Que se passe-t-il si nous essayons d'extraire un témoin mais qu'il n'existe pas réellement à partir d'un terme de type existentiel?

12

Étant donné un terme t : ∀x.∃y.(¬(x = 0) ⇒ x = S(y))dans la théorie des types de Martin-Lof, quelle est la valeur de w(t(0)), où west l'opérateur qui extrait le témoin d'un terme de type existentiel?

journée
la source
Je pense que vous voulez dire . ¬(x=0)
Mark Reitblatt
Oui, Mark, merci de l'avoir signalé, corrigé.
jour

Réponses:

12

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

Mark Reitblatt
la source
10

Pour démontrer la réponse de Mark, considérez la preuve suivante tde votre déclaration, écrite en Coq. Dans la preuve, nous supposons qu'un paramètre kde type natest donné. Nous utilisons kla valeur de ydans le cas où 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.

Nous pouvons prouver que t 0c'est égal à k:

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

Le protT1est là parce t 0est non seulement un nombre naturel, mais en fait un nombre naturel avec une preuve 0 <> 0 -> 0 = S yet projT1jette la preuve.

Le code Ocaml extrait pour t, obtenu avec la commande Extraction kest

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

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

Encore une fois, nous pouvons voir que t 0est égal à k, qui était un paramètre présumé aribtrairement.

Andrej Bauer
la source
Merci pour l'exemple de Coq, Andrej, cela clarifie davantage.
jour