(* Proof of lem_union_assoc                                                *)
intros; apply axs_extensionnalite; intros.
elim (lem_union_propertie (union a b) c v2); intros.
elim (lem_union_propertie a (union b c) v2); intros.
elim (lem_or_rew_l (In v2 c) (In v2 (union a b)) (In v2 a \/ In v2 b));
intros.
elim (lem_or_rew_r (In v2 a) (In v2 (union b c)) (In v2 b \/ In v2 c));
intros.
elim (lem_or_assoc_l (In v2 a) (In v2 b) (In v2 c)); intros.
unfold iff in |- *; split; intros.
clear H0; clear H1; clear H4; clear H5; clear H8.
apply H2; clear H2; apply H6; clear H6; apply H7; clear H7.
apply H3; clear H3; apply H; clear H; auto with zfc.
clear H; clear H2; clear H3; clear H6; clear H7.
apply H0; clear H0; apply H4; clear H4; apply H8; clear H8.
apply H5; clear H5; apply H1; clear H1; auto with zfc.
apply (lem_union_propertie b c v2).
apply (lem_union_propertie a b v2).
Qed.
(* End of proof of lem_union_assoc                                         *)

Lemma lem_inter_dist :
forall a b c : E, inter a (union b c) = union (inter a b) (inter a c).