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?


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


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.


Merci pour l'exemple de Coq, Andrej, cela clarifie davantage.
jour
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.