(*  De meme pour d2...							*)

Axiom
  transition_a_droite_2 :
    forall (q1 qa1 d1 q2 qd2 d2 : Ensf) (e0 x e : Elt),
    dans e0 (map injdroite q2) ->
    dans x alph ->
    dans (couple e0 (couple x e))
      (union (pont qa1 qd2) (union (injg_d1 q1 d1) (injd_d2 q2 d2))) ->
    dans (couple (first e0) (couple x (first e))) d2.

(* Specifications: *)
Lemma transition_dans_pont : forall (q1 qa1 d1 q2 qd2 d2 : Ensf) (e0 e : Elt), dans (couple e0 (couple epsilon e)) (union (pont qa1 qd2) (union (injg_d1 q1 d1) (injd_d2 q2 d2))) -> dans e0 (map injgauche qa1) /\ dans e (map injdroite qd2).
Lemma dans_pont_imp_epsilon : forall (qa1 qd2 : Ensf) (e1 x e0 : Elt), dans (couple e1 (couple x e0)) (pont qa1 qd2) -> x = epsilon :>Elt.
Lemma chemin_A_chemin_2 : forall (q1 qa1 d1 q2 qd2 d2 : Ensf) (e e3 : Elt) (w0 : Word), chemin_A (union_disj q1 q2) (union (pont qa1 qd2) (union (injg_d1 q1 d1) (injd_d2 q2 d2))) e e3 w0 -> dans e (map injdroite q2) -> dans e3 (map injdroite q2) -> chemin (first e) (first e3) q2 d2 w0.
Lemma par_le_pont : forall (q1 qd1 qa1 d1 q2 qd2 qa2 d2 : Ensf) (e1 e2 : Elt) (w : Word), automate q1 qd1 qa1 d1 -> automate q2 qd2 qa2 d2 -> chemin_A (union_disj q1 q2) (union (pont qa1 qd2) (union (injg_d1 q1 d1) (injd_d2 q2 d2))) e1 e2 w -> dans e1 (map injgauche q1) -> dans e2 (map injdroite q2) -> exists x1 : Elt, (exists x2 : Elt, (exists w1 : Word, (exists w2 : Word, dans x1 qa1 /\ dans x2 qd2 /\ chemin (first e1) x1 q1 d1 w1 /\ chemin x2 (first e2) q2 d2 w2 /\ w = Append w1 w2 :>Word))).
Lemma reconnait_Append : forall (q1 qd1 qa1 d1 q2 qd2 qa2 d2 : Ensf) (w2 : Word) (x1 x2 e2 : Elt) (w1 : Word) (e1 : Elt), automate q1 qd1 qa1 d1 -> automate q2 qd2 qa2 d2 -> chemin e1 x1 q1 d1 w1 -> dans x1 qa1 -> chemin x2 e2 q2 d2 w2 -> dans x2 qd2 -> dans e2 qa2 -> chemin_A (union_disj q1 q2) (union (pont qa1 qd2) (union (injg_d1 q1 d1) (injd_d2 q2 d2))) (couple e1 zero) (couple e2 un) (Append w1 w2).
Lemma lconc_is_reg1 : forall (q1 qd1 qa1 d1 q2 qd2 qa2 d2 : Ensf) (l1 l2 : wordset), automate q1 qd1 qa1 d1 -> eqwordset (reconnait q1 qd1 qa1 d1) l1 -> automate q2 qd2 qa2 d2 -> eqwordset (reconnait q2 qd2 qa2 d2) l2 -> eqwordset (reconnait_A (union_disj q1 q2) (map injgauche qd1) (map injdroite qa2) (union (pont qa1 qd2) (union (injg_d1 q1 d1) (injd_d2 q2 d2)))) (lconc l1 l2).
Lemma lconc_is_reg : forall l1 l2 : wordset, isregular l1 -> isregular l2 -> isregular (lconc l1 l2).