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 verwenden(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.
Um Marks Antwort zu demonstrieren, betrachten Sie den folgenden Beweis tIhrer Aussage in Coq. Im Beweis nehmen wir an, dass ein Parameter kvom Typ natgegeben ist. Wir verwenden kals Wert für den yFall x = 0:
Parameter k : nat.
Theorem t : forall x : nat, { y : nat | x <> 0 -> x = S y}.
Proof.
induction x.
exists k; tauto.
induction x.
exists 0; auto.
destruct IHx as [z G].
exists (S z).
intro H.
elim G; auto.
Defined.
Wir können beweisen, dass dies t 0gleich ist mit k:
Theorem A: projT1 (t 0) = k.
Proof.
auto.
Qed.
Das protT1ist da , weil t 0nicht nur eine natürliche Zahl, aber eigentlich eine natürliche Zahl mit einem Beweis , dass 0 <> 0 -> 0 = S yund projT1wegwirft den Beweis.
Der tmit dem Befehl extrahierte Ocaml-Code für Extraction klautet
(** val t : nat -> nat **)
let rec t = function
| O -> k
| S n0 -> (match n0 with
| O -> O
| S n1 -> S (t n0))
Auch hier können wir t 0gleich sehen k, was ein willkürlich angenommener Parameter war.