intros q qd qa d H.
elim H.
intros H1 H0; elim H0; clear H0.
auto.
Qed.
(*									*)
(*  On definit le predicat (chemin e1 e2 q d w), qui signifie :		*)
(*  On passe de e1 a e2 par le mot w dans un automate d'ensemble  	*)
(*  d'etats q et de transition d.					*)
(*									*)
Inductive chemin : Elt -> Elt -> Ensf -> Ensf -> Word -> Prop :=
| chemin_nil :
forall (e1 e2 : Elt) (q d : Ensf),
dans e1 q -> e1 = e2 :>Elt -> chemin e1 e2 q d nil
| chemin_cons :
forall (e1 e2 : Elt) (q d : Ensf) (w : Word) (e a : Elt),
chemin e1 e2 q d w ->
dans e q ->
dans a alph ->
dans (couple e (couple a e1)) d -> chemin e e2 q d (cons a w).
Hint Resolve chemin_nil.
(*  On definit le meme predicat d'une autre facon, qui sera plus utile	*)
(*  par la suite							*)
Definition Chemin (e1 e2 : Elt) (q d : Ensf) (w : Word) : Prop :=
match w return Prop with
| nil =>
(* nil  *)  dans e1 q /\ e1 = e2 :>Elt (* cons *)
| cons a w' =>
exists e : Elt,
chemin e e2 q d w' /\
dans e1 q /\ dans a alph /\ dans (couple e1 (couple a e)) d
end.
(*  On montre l'equivalence entre les 2 definitions : 			*)

(* Specifications: *)
Lemma Chemin_chemin :
forall (e1 e2 : Elt) (q d : Ensf) (w : Word),
Chemin e1 e2 q d w -> chemin e1 e2 q d w.