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 t
Ihrer Aussage in Coq. Im Beweis nehmen wir an, dass ein Parameter k
vom Typ nat
gegeben ist. Wir verwenden k
als Wert für den y
Fall 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 0
gleich ist mit k
:
Theorem A: projT1 (t 0) = k.
Proof.
auto.
Qed.
Das protT1
ist da , weil t 0
nicht nur eine natürliche Zahl, aber eigentlich eine natürliche Zahl mit einem Beweis , dass 0 <> 0 -> 0 = S y
und projT1
wegwirft den Beweis.
Der t
mit dem Befehl extrahierte Ocaml-Code für Extraction k
lautet
(** 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 0
gleich sehen k
, was ein willkürlich angenommener Parameter war.