t : ∀x.∃y.(¬(x = 0) ⇒ x = S(y))
Was ist der Wert eines Ausdrucks in Martin-Lofs Typentheorie w(t(0))
, woher w
kommt der Operator, der das Zeugnis eines Ausdrucks eines existenziellen Typs extrahiert?
12
t : ∀x.∃y.(¬(x = 0) ⇒ x = S(y))
Was ist der Wert eines Ausdrucks in Martin-Lofs Typentheorie w(t(0))
, woher w
kommt der Operator, der das Zeugnis eines Ausdrucks eines existenziellen Typs extrahiert?
Antworten:
Beliebiger Wert. Es hängt davon ab, welches Ihnen gegeben wird. Ein Begriff vom Typ ∃ y . ( ¬ ( 0 = 0 ) ⇒ 0 = S ( y ) ) ist ein Paar aus einem int y und einer Funktion, die einen Beweis von ¬ ( 0 = 0 ) annimmt und Ihnen einen Beweis von 0 = S ( y ) gibt . Sie können einen Term vom Typ ¬ ( 0 = 0 ) und vom Typ 0 = 0 verwendent ∃ y. ( ¬ ( 0 = 0 ) ⇒ 0 = S( y) ) y ¬ ( 0 = 0 ) 0 = S( y) ¬ ( 0 = 0 ) 0 = 0 (aus Reflexivität), um einen beliebigen Begriff abzuleiten. Dies beinhaltet einen Term vom Typ , 0 = S ( 1 ) , … . So können Sie machen y eine ganze Zahl Sie wollen.0 = S( 0 ) 0 = S( 1 ) … y
quelle
Um Marks Antwort zu demonstrieren, betrachten Sie den folgenden Beweis
t
Ihrer Aussage in Coq. Im Beweis nehmen wir an, dass ein Parameterk
vom Typnat
gegeben ist. Wir verwendenk
als Wert für deny
Fallx = 0
:Wir können beweisen, dass dies
t 0
gleich ist mitk
:Das
protT1
ist da , weilt 0
nicht nur eine natürliche Zahl, aber eigentlich eine natürliche Zahl mit einem Beweis , dass0 <> 0 -> 0 = S y
undprojT1
wegwirft den Beweis.Der
t
mit dem Befehl extrahierte Ocaml-Code fürExtraction k
lautetAuch hier können wir
t 0
gleich sehenk
, was ein willkürlich angenommener Parameter war.quelle