(* Proof of lem_paire_propertie                                            *)
intros; split; intros.
apply lem_or_and_conv_r.
generalize axs_paire; intros.
split.
elim (H0 a1 b1 a0); intros.
clear H0; clear H2; apply H1; clear H1.
rewrite <- H.
elim (axs_paire a0 b0 a0); intros.
clear H0; apply H1; clear H1; left; reflexivity.
split.
apply lem_or_sym.
elim (H0 a0 b0 b1); clear H0; intros.
clear H1.
elim (lem_eq_or a0 b0 b1); intros.
clear H1; apply H2; clear H2.
apply H0; clear H0.
rewrite H.
elim (axs_paire a1 b1 b1); intros.
clear H0; apply H1; clear H1; right; reflexivity.
split.
elim (lem_eq_or a0 b0 a1); intros.
clear H1; apply H2; clear H2.
elim (H0 a0 b0 a1); clear H0; intros.
clear H1; apply H0; clear H0; rewrite H.
elim (axs_paire a1 b1 a1); intros.
clear H0; apply H1; clear H1; left; reflexivity.
apply lem_or_sym.
elim (H0 a1 b1 b0); clear H0; intros.
clear H1; apply H0; clear H0; rewrite <- H; clear H.
elim (axs_paire a0 b0 b0); intros.
clear H; apply H0; clear H0; right; reflexivity.
elim H; clear H; intros.
elim H; clear H; intros.
rewrite H; clear H; rewrite H0; clear H0; reflexivity.
elim H; clear H; intros.
rewrite H; clear H; rewrite H0; clear H0; elim (lem_paire_sym a1 b1); intros;
reflexivity.
Qed.
(* End of proof of lem_paire_propertie                                     *)
(***************************************************************************)
(* Singleton                                                               *)
(***************************************************************************)
Definition singleton (a : E) := paire a a.
Hint Unfold singleton: zfc.

(* Specifications: *)
(***************************************************************************)
(* {a} = {a'} <=> a = a'                                                   *)
(***************************************************************************)
Lemma lem_singleton_propertie :
forall a b : E, singleton a = singleton b <-> a = b.