intros.
cut
(dans (couple e0 (couple epsilon e)) (pont qa1 qd2) \/
dans (couple e0 (couple epsilon e)) (union (injg_d1 q1 d1) (injd_d2 q2 d2)));
auto.
intro Ht; elim Ht; clear Ht.
unfold pont in |- *.
intro.
cut
(exists y : Elt,
dans y (prodcart qa1 qd2) /\
couple e0 (couple epsilon e) = transition_pont y :>Elt).
2: apply dans_map; auto.
intro Ht; elim Ht; clear Ht; intros y Ht; elim Ht; clear Ht; intros H3 H4.
cut
(exists y1 : Elt,
(exists y2 : Elt, dans y1 qa1 /\ dans y2 qd2 /\ y = couple y1 y2 :>Elt)).
2: apply coupl3; auto.
intro Ht; elim Ht; clear Ht; intros y1 Ht; elim Ht; clear Ht; intros y2 Ht;
elim Ht; clear Ht; intros H5 Ht; elim Ht; clear Ht;
intros H6 H7.
cut (couple e0 (couple epsilon e) = transition_pont (couple y1 y2) :>Elt).
2: rewrite <- H7; auto.
unfold transition_pont in |- *.
intro.
cut (e0 = couple y1 zero :>Elt).
2: apply
couple_couple_inv1
with (couple epsilon e) (couple epsilon (couple y2 un));
auto.
intro.
cut (couple epsilon e = couple epsilon (couple y2 un) :>Elt).
2: apply couple_couple_inv2 with e0 (couple y1 zero); auto.
intro.
cut (e = couple y2 un :>Elt).
2: apply couple_couple_inv2 with epsilon epsilon; auto.
intro.
split.
replace e0 with (couple y1 zero); auto.
replace (couple y1 zero) with (injgauche y1); auto.
replace e with (couple y2 un); auto.
replace (couple y2 un) with (injdroite y2); auto.
intro.
cut
(dans (couple e0 (couple epsilon e)) (injg_d1 q1 d1) \/
dans (couple e0 (couple epsilon e)) (injd_d2 q2 d2));
auto.
intro Ht; elim Ht; clear Ht.
unfold injg_d1 in |- *.
intro.
cut
(dans (couple e0 (couple epsilon e))
(prodcart (map injgauche q1) (prodcart alph (map injgauche q1))) /\
est_dans_d' d1 (couple e0 (couple epsilon e))).
2: apply dans_tq_imp; auto.
intro Ht; elim Ht; clear Ht; intros.
cut
(dans e0 (map injgauche q1) /\
dans (couple epsilon e) (prodcart alph (map injgauche q1))).
2: apply coupl2; auto.
intro Ht; elim Ht; clear Ht; intros.
cut (dans epsilon alph /\ dans e (map injgauche q1)).
2: apply coupl2; auto.
intro Ht; elim Ht; clear Ht; intros.
absurd (dans epsilon alph); auto.
red in |- *; intro; apply not_dans_epsilon_alph; assumption.
unfold injd_d2 in |- *.
intro.
cut
(dans (couple e0 (couple epsilon e))
(prodcart (map injdroite q2) (prodcart alph (map injdroite q2))) /\
est_dans_d' d2 (couple e0 (couple epsilon e))).
2: apply dans_tq_imp; auto.
intro Ht; elim Ht; clear Ht; intros.
cut
(dans e0 (map injdroite q2) /\
dans (couple epsilon e) (prodcart alph (map injdroite q2))).
2: apply coupl2; auto.
intro Ht; elim Ht; clear Ht; intros.
cut (dans epsilon alph /\ dans e (map injdroite q2)).
2: apply coupl2; auto.
intro Ht; elim Ht; clear Ht; intros.
absurd (dans epsilon alph); auto.
red in |- *; intro; apply not_dans_epsilon_alph; assumption.
Qed.
(*  Si on a une transition dans le pont alors c'est par epsilon.	*)

(* Specifications: *)
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.