(* Proof of lem_union_dist                                                 *)
intros; apply axs_extensionnalite; intros.
elim (lem_union_propertie a (inter b c) v2); intros.
elim (lem_inter_propertie (union a b) (union a c) v2); intros.
elim
(lem_and_rew_lr (In v2 (union a b)) (In v2 (union a c))
(In v2 a \/ In v2 b) (In v2 a \/ In v2 c)); intros;
[ idtac | apply lem_union_propertie | apply lem_union_propertie ].
elim (lem_or_rew_r (In v2 a) (In v2 (inter b c)) (In v2 b /\ In v2 c));
intros; [ idtac | apply lem_inter_propertie ].
unfold iff in |- *; split; intros.
apply H2; clear H2; apply H4; clear H4.
elim
(lem_and_rew_lr (In v2 a \/ In v2 b) (In v2 a \/ In v2 c)
(In v2 b \/ In v2 a) (In v2 c \/ In v2 a)); intros;
[ idtac
| unfold iff in |- *; split; intros; apply lem_or_sym; auto with zfc
| unfold iff in |- *; split; intros; apply lem_or_sym; auto with zfc ].
apply H4; clear H4; apply lem_or_fact; apply lem_or_sym; apply H5; clear H5;
apply H; clear H; auto with zfc.
apply H0; clear H0; apply H6; clear H6; apply lem_or_sym; apply lem_or_dist.
elim
(lem_and_rew_lr (In v2 b \/ In v2 a) (In v2 c \/ In v2 a)
(In v2 a \/ In v2 b) (In v2 a \/ In v2 c)); intros;
[ idtac
| unfold iff in |- *; split; intros; apply lem_or_sym; auto with zfc
| unfold iff in |- *; split; intros; apply lem_or_sym; auto with zfc ].
apply H6; clear H6; apply H3; clear H3; apply H1; clear H1; auto with zfc.
Qed.
(* End of proof of lem_union_dist                                          *)

(***************************************************************************)
(* Quelques proprietes de l'ensemble Vide                                  *)
(***************************************************************************)
Lemma lem_reunion_vide : reunion Vide = Vide.
apply axs_extensionnalite; intros.