(*  									*)
(*  Si (q,qd,qa,d) est un automate alors (reconnait q qd qa d) est le   *)
(*  langage reconnu par cet automate.					*)
(*  On le definit est disant que w est dans ce langage s'il est tout	*)
(*  d'abord dans le monoid libre engendre par alph, et s'il existe	*)
(*  2 etats e1 et e2, repsectivement dans qd et qa, tels que		*)
(*  (chemin e1 e2 q d w) soit vrai.					*)
(*									*)

Definition reconnait (q qd qa d : Ensf) (w : Word) : Prop :=
  inmonoid alph w /\
  (exists e1 : Elt,
     (exists e2 : Elt, dans e1 qd /\ dans e2 qa /\ chemin e1 e2 q d w)).

(* Specifications: *)
Lemma dans_e1_q : forall (q d : Ensf) (w : Word) (e1 e2 : Elt), chemin e1 e2 q d w -> dans e1 q.
Lemma dans_e2_q : forall (q d : Ensf) (w : Word) (e1 e2 : Elt), chemin e1 e2 q d w -> dans e2 q.
Lemma Cheminmonoid : forall (w : Word) (q qd qa d : Ensf), automate q qd qa d -> forall e1 e2 : Elt, chemin e1 e2 q d w -> inmonoid alph w.
Lemma chemin_lettre : forall (e1 e2 x : Elt) (q d : Ensf), dans x alph -> dans e1 q -> dans e2 q -> dans (couple e1 (couple x e2)) d -> chemin e1 e2 q d (cons x nil).