Je suis nouveau à Coq et je fais quelques exercices pour me familiariser avec ça. Ma compréhension est que prouver une proposition dans Coq "vraiment" est écrire un type dans Gallina et montrer ensuite qu'il est habité en utilisant des tactiques pour combiner des termes de manière déterministe.Coq comment bien imprimer un terme construit en utilisant des tactiques?
Je me demande s'il existe un moyen d'obtenir une représentation assez bien imprimée du terme réel, avec toutes les tactiques supprimées.
Dans l'exemple ci-dessous, un terme anonyme de type plus_comm (x y : N) : plus x y = plus y x
est finalement produit ... Je pense. Que dois-je faire si je veux le regarder? Dans un certain sens, je suis curieux de savoir à quoi la tactique "désole".
Voici le code en question, extrait littéralement d'un tutoriel sur YouTube https://www.youtube.com/watch?v=OaIn7g8BAIc.
Inductive N : Type :=
| O : N
| S : N -> N
.
Fixpoint plus (x y : N) : N :=
match x with
| O => y
| S x' => S (plus x' y)
end.
Lemma plus_0 (x : N) : plus x O = x.
Proof.
induction x.
- simpl. reflexivity.
- simpl. rewrite IHx. reflexivity.
Qed.
Lemma plus_S (x y : N) : plus x (S y) = S(plus x y).
Proof.
induction x.
- simpl. reflexivity.
- simpl. rewrite IHx. reflexivity.
Qed.
Lemma plus_comm (x y : N) : plus x y = plus y x.
Proof.
induction x.
- simpl. rewrite plus_0. reflexivity.
- simpl. rewrite IHx. rewrite plus_S. reflexivity.
Qed.