m'a donné une solution au théorème suivant comme indiqué ci-dessous:Coq ne génère pas l'hypothèse d'induction
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 (X: Type) (xs ys: list X) :
suffix xs ys -> exists ws, xs = ws ++ ys.
Proof.
induction 1 as [|x xsp ysp hs [zs zeq]].
- exists []. reflexivity.
- now exists (x :: zs); rewrite zeq.
Qed.
je tente de reproduire rapidement sur une autre machine et a tenté ainsi:
Theorem suffix_app (X: Type) (xs ys: list X) :
suffix xs ys -> exists ws, xs = ws ++ ys.
Proof.
induction 1.
- exists []. reflexivity.
- (* Stuck here! *)
Abort.
c'est-à-dire sans la clause "as". Cependant, je suis coincé à cause de l'équivalent auto-nommé de "zeq" qui n'est pas généré pour des raisons que je ne peux pas résoudre. Pourquoi l'équivalent (nommé automatiquement) de "zeq" généré par Coq dans le second cas ici?
Il est là pour moi, notez que dans votre premier exemple vous avez eu un 'destruct' dans le motif. Ainsi 'détruire IHsuffix en tant que [zs zeq] .' vous ramènera en jeu. – ejgallego
Je suis choqué de n'avoir jamais vu ça mais ... c'est la vie. Merci, cela répond complètement à ma question. N'hésitez pas à le mettre comme réponse et je l'accepterai. –
Outre la destruction, 'intros' peut aussi faire des réécritures (' -> '):' induction 1 as [| x? ? ? [zs ->]]; [existe [] | existe (x :: zs)]; trivial. » –