(* Proof of lem_cartesian_cons                                             *)
intros; unfold cartesien in |- *.
elim
(axs_comprehension
(fun u : E =>
exists x0 : E, (exists y0 : E, In x0 a /\ In y0 b /\ u = couple x0 y0))
(parties (parties (union a b))) (couple x y));
intros; apply H2; clear H1 H2; intros.
split;
[ idtac
| exists x; exists y; split;
[ auto with zfc | split; [ auto with zfc | reflexivity ] ] ].
elim (axs_parties (parties (union a b)) (couple x y)); intros; apply H2;
clear H1 H2; intros.
elim (axs_parties (union a b) v3); intros; apply H3; clear H2 H3; intros.
unfold couple in H1; generalize (axs_paire (singleton x) (paire x y) v3);
unfold iff in |- *; intros.
elim H3; clear H3; intros.
generalize (H3 H1); clear H3 H4; intros.
elim H3; clear H3; intros.
generalize H2; clear H2; rewrite H3; clear H3; intros.
elim (lem_in_singleton x v0); intros.
generalize (H3 H2); clear H2 H3 H4; intros; rewrite H2.
elim (lem_union_propertie a b x); intros.
apply H4; left; auto with zfc.
generalize H2; clear H2; rewrite H3; clear H3; intros.
elim (axs_paire x y v0); intros.
generalize (H3 H2); clear H2 H3 H4; intros; elim H2; clear H2; intros.
rewrite H2; clear H2; elim (lem_union_propertie a b x); intros.
apply H3; left; auto with zfc.
rewrite H2; clear H2; elim (lem_union_propertie a b y); intros.
apply H3; right; auto with zfc.
Qed.
(* End of proof of lem_cartesian_cons                                      *)
(***************************************************************************)
(* Somme disjointe de deux ensembles                                       *)
(***************************************************************************)
(* Old Release                                                             *)
Parameter Odisj_l : E -> E.
Axiom
axs_Odisj_l :
forall a x : E,
In x (Odisj_l a) <-> (exists y : E, In y a /\ x = couple y Vide).
Parameter Odisj_r : E -> E.
Axiom
axs_Odisj_r :
forall a x : E,
In x (Odisj_r a) <->
(exists y : E, In y a /\ x = couple y (singleton Vide)).
Definition Osomme_disj (a b : E) := union (Odisj_l a) (Odisj_r b).
(* New Release                                                             *)
Definition disj_l (a : E) :=
subset (fun y : E => exists x : E, y = couple x Vide /\ In x a)
(cartesien a (singleton Vide)).
Definition disj_r (a : E) :=
subset (fun y : E => exists x : E, y = couple x (singleton Vide) /\ In x a)
(cartesien a (singleton (singleton Vide))).
Definition somme_disj (a b : E) := union (disj_l a) (disj_r b).

(* Specifications: *)
(* Old and New                                                             *)
Lemma lem_OaN : forall a b : E, somme_disj a b = Osomme_disj a b.
intros; apply axs_extensionnalite; intros.