(*									*)
(*  UNION DISJOINTE 							*)
(*    L'union disjointe de A et B est definie comme l'ensemble des 	*)
(*    des couples (x,zero) pour x dans A et (x,un) pour x dans B	*)
(*    Pour cela on definit 2 fonctions injgauche : x->(x,zero) et	*)
(*    injdroite : x->(x,un) et on fait l'union de (map injgauche A)	*)
(*    et de (map injdroite B).						*)
(*									*)

Definition injgauche (e : Elt) : Elt := couple e zero.Definition injdroite (e : Elt) : Elt := couple e un.Definition union_disj (e f : Ensf) : Ensf :=
  union (map injgauche e) (map injdroite f).

(* Specifications: *)
Lemma dans_map_injg : forall (e : Ensf) (x : Elt), dans x (map injgauche e) -> dans (first x) e.
Lemma dans_map_injd : forall (e : Ensf) (x : Elt), dans x (map injdroite e) -> dans (first x) e.
Lemma absurd_injg_injd : forall (x : Elt) (e f : Ensf), dans x (map injgauche e) -> ~ dans x (map injdroite f).
Lemma union_disj1 : forall (x : Elt) (a b : Ensf), dans x (union_disj a b) -> (exists y : Elt, dans y a /\ x = injgauche y :>Elt) \/ (exists y : Elt, dans y b /\ x = injdroite y :>Elt).
Lemma union_disj_d : forall (x : Elt) (a b : Ensf), dans x b -> dans (injdroite x) (union_disj a b).
Lemma union_disj_g : forall (x : Elt) (a b : Ensf), dans x a -> dans (injgauche x) (union_disj a b).
Lemma inclus_union_disj : forall a b c d : Ensf, inclus a c -> inclus b d -> inclus (union_disj a b) (union_disj c d).
Lemma pair_equal : forall (A B : Set) (x x' : A) (y y' : B), x = x' :>A -> y = y' :>B -> pair x y = pair x' y' :>A * B.