unfold isregular_A in |- *.
intros l Ht; elim Ht; clear Ht.
intros q Ht; elim Ht; clear Ht.
intros qd Ht; elim Ht; clear Ht.
intros qaA Ht; elim Ht; clear Ht.
intros dA Ht; elim Ht; clear Ht.
intros.
cut
(exists d : Ensf,
(exists qa : Ensf,
automate q qd qa d /\
eqwordset (reconnait_A q qd qaA dA) (reconnait q qd qa d))).
2: apply async_is_sync; auto.
intro Ht; elim Ht; clear Ht.
intros d Ht; elim Ht; clear Ht.
intros qa Ht; elim Ht; clear Ht.
intros.
unfold isregular in |- *.
exists q.
exists qd.
exists qa.
exists d.
split; auto.
apply eqwordset_trans with (reconnait_A q qd qaA dA); auto.
apply eqwordset_sym; auto.
Qed.
Definition isregular_D (l : wordset) : Prop :=
exists q : Ensf,
(exists g0 : Elt,
(exists qa : Ensf,
(exists d : Ensf,
automate q (singleton g0) qa d /\
(forall w : Word, chemin g0 g0 q d w -> w = nil :>Word) /\
eqwordset (reconnait q (singleton g0) qa d) l))).
Definition transition_D (g0 x : Elt) : Elt := couple g0 (couple epsilon x).
Definition delta_D (g0 : Elt) (qd : Ensf) : Ensf := map (transition_D g0) qd.

(* Specifications: *)
Lemma automate_A_D :
forall (q qd qa d : Ensf) (g0 : Elt),
automate q qd qa d ->
automate_A (add g0 q) (singleton g0) qa (union d (delta_D g0 qd)).