J'ai une relation inductive comme indiqué ci-dessous intitulé suffixe. J'essaie de prouver le théorème connexe suffix_app. Mon idée générale est d'utiliser ce fait que suffixe xs ys pour montrer que xs est soit égal à ys ou que c'est une série d'éléments contre 'd sur ys.Coincé dans la boucle d'inversion infinie Coq
Require Import Coq.Lists.List.
Import ListNotations.
Inductive suffix {X : Type} : list X -> list X -> Prop :=
| suffix_end : forall xs,
suffix xs xs
| suffix_step : forall x xs ys,
suffix xs ys ->
suffix (x :: xs) ys.
Theorem suffix_app : forall (X: Type) (x:X) (xs ys: list X),
suffix xs ys ->
exists ws, xs = ws ++ ys.
Proof.
intros.
inversion H.
- exists []. reflexivity.
-
Cependant, quand j'utilise l'inversion, il n'y a aucun moyen de réellement jamais « arriver » à terme est égal à ys. Par conséquent, je suis coincé au point actuellement vu dans le code.
Bonjour, désolé pour le retard dans la réponse. En effet cela fonctionne. Cependant, pourquoi dois-je appeler induction 1 avec la clause as pour obtenir l'hypothèse zeq? J'expérimentais sans la clause as et où je m'attendais à trouver zeq (mais avec un nom généré automatiquement à partir de Coq) il n'y avait pas une telle hypothèse, d'où la preuve était insoluble avec la clause as. Désolé, je ne comprends pas très bien cet aspect de Coq. –
Je ne suis pas sûr que je suis, vous devriez obtenir les mêmes résultats si vous utilisez la clause «as» ou non. Soyez sûr que vous appelez l'induction sur la bonne chose! Notez que si vous utilisez des noms générés automatiquement, vous souffrirez beaucoup lorsque Coq décidera de changer le schéma de nommage et ainsi toutes vos preuves ne seront plus valables. – ejgallego