intros q qa d g0 w0 H_aut H_g0.
generalize w0; clear w0; simple induction w0.
auto.
intros x w H H0.
cut (Chemin g0 g0 q d (cons x w)); auto.
intro.
cut
(exists e : Elt,
chemin e g0 q d w /\
dans g0 q /\ dans x alph /\ dans (couple g0 (couple x e)) d);
auto.
intro Ht; elim Ht; clear Ht; intros e Ht; elim Ht; clear Ht; intros H2 Ht;
elim Ht; clear Ht; intros H3 Ht; elim Ht; clear Ht;
intros H4 H5.
cut (x = epsilon :>Elt).
2: apply (H_g0 e x); assumption.
intro.
absurd (dans x alph); auto.
rewrite H6.
red in |- *; intro; apply not_dans_epsilon_alph; assumption.
Qed.
(*									*)
(*  Si on a un chemin dans A* de e1 a e2 par w alors :			*)
(*    -  soit on a une chemin dans A de e1 a e2 par w.			*)
(*    -  soit il existe un etat e et 2 mots w1 et w2 tels que on a	*)
(*	 un chemin de e1 a e par w1, e est dans qa, w2 est dans l*	*)
(*	 et w=w1.w2							*)
(*									*)

Lemma lstar_is_reg2_bis :
forall (q qa d : Ensf) (g0 e1 e2 : Elt) (w : Word) (l : wordset),
automate q (singleton g0) qa d ->
eqwordset (reconnait q (singleton g0) qa d) l ->
(forall w : Word, chemin g0 g0 q d w -> w = nil :>Word) ->
chemin_A q (fun_d_dstar g0 qa d) e1 e2 w ->
e2 = g0 :>Elt ->
chemin e1 e2 q d w \/
(exists e : Elt,
(exists w1 : Word,
(exists w2 : Word,
chemin e1 e q d w1 /\
dans e qa /\ lstar l w2 /\ w = Append w1 w2 :>Word))).