Was passiert, wenn wir versuchen, einen Zeugen zu extrahieren, dieser jedoch nicht aus einem existenziellen Begriff existiert?

12

t : ∀x.∃y.(¬(x = 0) ⇒ x = S(y))Was ist der Wert eines Ausdrucks in Martin-Lofs Typentheorie w(t(0)), woher wkommt der Operator, der das Zeugnis eines Ausdrucks eines existenziellen Typs extrahiert?

Tag
quelle
Ich denke du meinst . ¬(x=0)
Mark Reitblatt
Ja, Mark, danke für den Hinweis, behoben.
Tag

Antworten:

12

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 verwendenty.(¬(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

Mark Reitblatt
quelle
10

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.

Andrej Bauer
quelle
Danke für das Beispiel in Coq, Andrej, es verdeutlicht mehr.
Tag