(* Proof of lem_cartesian_propertie                                        *)
intros; unfold cartesien in |- *.
elim
(axs_comprehension
(fun u : E =>
exists x0 : E, (exists y : E, In x0 a /\ In y b /\ u = couple x0 y))
(parties (parties (union a b))) x); intros.
unfold iff in |- *; split; intros.
elim H; clear H; clear H0; intros; [ idtac | auto with zfc ].
do 2 (elim H0; clear H0; intros); exists x0; exists x1; auto with zfc.
do 2 (elim H1; clear H1; intros); clear H; apply H0; clear H0.
split; [ idtac | exists x0; exists x1; auto with zfc ].
elim H1; clear H1; intros; elim H0; clear H0; intros.
elim (axs_parties (parties (union a b)) x); intros.
clear H2; apply H3; clear H3; intros.
elim (axs_parties (union a b) v3); intros.
clear H3; apply H4; clear H4; intros.
elim (lem_union_propertie a b v0); intros.
clear H4; apply H5; clear H5; intros.
unfold couple in H1.
elim (axs_paire (singleton x0) (paire x0 x1) v3); intros.
generalize H2; rewrite H1; intros.
clear H5; elim H4; clear H4; intros; [ idtac | idtac | auto with zfc ].
generalize H3; rewrite H4; intros.
elim (lem_in_singleton x0 v0); intros.
generalize H; clear H8; elim H7; clear H7; intros;
[ idtac | auto with zfc ]; left; auto with zfc.
generalize H3; rewrite H4; intros.
elim (axs_paire x0 x1 v0); intros.
clear H8; elim H7; clear H7; intros;
[ rewrite H7; left; auto with zfc
| rewrite H7; right; auto with zfc
| auto with zfc ].
Qed.
(* End of proof of lem_cartesian_propertie                                 *)

(* Specifications: *)
Lemma lem_cartesian_cons :
forall x y a b : E, In x a -> In y b -> In (couple x y) (cartesien a b).