(* Proof of lem_inter_dist                                                 *)
intros; apply axs_extensionnalite; intros.
elim (lem_inter_propertie a (union b c) v2); intros.
elim (lem_union_propertie (inter a b) (inter a c) v2); intros.
elim
(lem_or_rew_lr (In v2 (inter a b)) (In v2 (inter a c))
(In v2 a /\ In v2 b) (In v2 a /\ In v2 c)); intros.
elim
(lem_or_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.
elim (lem_and_rew_r (In v2 a) (In v2 (union b c)) (In v2 b \/ In v2 c));
intros.
unfold iff in |- *; split; intros.
clear H0; clear H1; clear H3; clear H5; clear H8.
apply H2; clear H2; apply H4; clear H4.
apply H6; clear H6; apply lem_and_fact.
apply lem_and_sym; apply H7; clear H7; apply H; clear H; auto with zfc.
clear H; clear H2; clear H4; clear H6; clear H7.
apply H0; clear H0; apply H8; clear H8.
apply lem_and_sym; apply lem_and_dist.
apply H5; clear H5; apply H3; clear H3; apply H1; clear H1; auto with zfc.
apply lem_union_propertie.
unfold iff in |- *; split; intros; apply lem_and_sym; auto with zfc.
unfold iff in |- *; split; intros; apply lem_and_sym; auto with zfc.
apply lem_inter_propertie.
apply lem_inter_propertie.
Qed.
(* End of proof of lem_inter_dist                                          *)

(* Specifications: *)
Lemma lem_union_dist :
forall a b c : E, union a (inter b c) = inter (union a b) (union a c).