Cosa succede se proviamo ad estrarre un testimone ma in realtà non esiste da un termine di tipo esistenziale?


12

Dato un termine t : ∀x.∃y.(¬(x = 0) ⇒ x = S(y))nella teoria dei tipi di Martin-Lof, qual è il valore w(t(0)), dov'è wl'operatore che estrae la testimonianza di un termine di tipo esistenziale?


Penso che intendi . ¬(x=0)
Mark Reitblatt,

Sì, Mark, grazie per averlo sottolineato, risolto.
giorno

Risposte:


12

ty.(¬(0=0)0=S(y))y¬(0=0)0=S(y)¬(0=0)0=00=S(0)0=S(1)y


10

Per dimostrare la risposta di Mark, considera la seguente prova tdella tua dichiarazione, scritta in Coq. Nella dimostrazione presupponiamo che venga fornito un parametro kdi tipo nat. Usiamo kcome valore ynel caso in cui 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.

Possiamo dimostrare che t 0è uguale a k:

Theorem A: projT1 (t 0) = k.
Proof.
  auto.
Qed.

L' protT1è lì perché t 0non è solo un numero naturale, ma in realtà un numero naturale con una prova che 0 <> 0 -> 0 = S ye projT1getta via la prova.

Il codice Ocaml estratto per t, ottenuto con il comando Extraction kè

(** val t : nat -> nat **)

let rec t = function
  | O -> k
  | S n0 -> (match n0 with
              | O -> O
              | S n1 -> S (t n0))

Ancora una volta possiamo vedere che t 0è uguale a k, che era un parametro assunto aribtraneamente.


Grazie per l'esempio in Coq, Andrej, chiarisce di più.
giorno
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.