(* Proof of lem_sig_fun_equiv_is_equiv                                     *)
intros.
elim Afs; intros; elim H0; clear H0; intros.
generalize (lem_fun_equiv_is_equiv f H); intros.
unfold equivalence in |- *.
elim H2; unfold reflexivity, symmetry, transitivity in |- *; clear H2; intros;
elim H3; clear H3; intros.
split; [ intros | split; intros ].
unfold equiv_fun in |- *.
elim
(axs_comprehension
(fun x0 : E =>
exists a0 : E,
(exists b : E,
x0 = couple a0 b /\
App f (lem_fun_sig_is_fun f a s Afs) a0 =
App f (lem_fun_sig_is_fun f a s Afs) b))
(cartesien (dom f) (dom f)) (couple x x)); intros;
apply H7; clear H6 H7; intros.
split; [ idtac | exists x; exists x; split; reflexivity ].
unfold rdom in H5.
elim
(axs_comprehension
(fun x0 : E =>
exists y : E,
In (couple x0 y) (equiv_fun f (lem_fun_sig_is_fun f a s Afs))) a x);
intros; generalize (H6 H5); clear H5 H6 H7; intros.
elim H5; clear H5; intros.
elim (lem_cartesian_propertie (dom f) (dom f) (couple x x)); intros; apply H8;
clear H7 H8; intros.
exists x; exists x; rewrite H0; split;
[ auto with zfc | split; [ auto with zfc | reflexivity ] ].
unfold equiv_fun in H5.
elim
(axs_comprehension
(fun x0 : E =>
exists a0 : E,
(exists b : E,
x0 = couple a0 b /\
App f (lem_fun_sig_is_fun f a s Afs) a0 =
App f (lem_fun_sig_is_fun f a s Afs) b))
(cartesien (dom f) (dom f)) (couple x y)); intros;
generalize (H6 H5); clear H5 H6 H7; intros.
elim H5; clear H5; intros; elim H6; clear H6; intros; elim H6; clear H6;
intros; elim H6; clear H6; intros.
elim (lem_couple_propertie x x0 y x1); intros; generalize (H8 H6);
clear H6 H8 H9; intros.
elim H6; clear H6; intros.
generalize H7; rewrite <- H6; rewrite <- H8; clear H6 H7 H8; intros.
unfold equiv_fun in |- *.
elim
(axs_comprehension
(fun x0 : E =>
exists a0 : E,
(exists b : E,
x0 = couple a0 b /\
App f (lem_fun_sig_is_fun f a s Afs) a0 =
App f (lem_fun_sig_is_fun f a s Afs) b))
(cartesien (dom f) (dom f)) (couple y x)); intros;
apply H8; clear H6 H8; intros.
split;
[ idtac
| exists y; exists x; split;
[ reflexivity | symmetry  in |- *; auto with zfc ] ].
elim (lem_cartesian_propertie (dom f) (dom f) (couple x y)); intros;
generalize (H6 H5); clear H5 H6 H8; intros.
elim H5; clear H5; intros; elim H5; clear H5; intros; elim H5; clear H5;
intros; elim H6; clear H6; intros.
elim (lem_couple_propertie x x2 y x3); intros; generalize (H9 H8);
clear H8 H9 H10; intros; elim H8; clear H8; intros.
rewrite H8; rewrite H9;
elim (lem_cartesian_propertie (dom f) (dom f) (couple x3 x2));
intros; apply H11; clear H10 H11; intros.
exists x3; exists x2; split;
[ auto with zfc | split; [ auto with zfc | reflexivity ] ].
unfold equiv_fun in H5; unfold equiv_fun in H6.
elim
(axs_comprehension
(fun x0 : E =>
exists a0 : E,
(exists b : E,
x0 = couple a0 b /\
App f (lem_fun_sig_is_fun f a s Afs) a0 =
App f (lem_fun_sig_is_fun f a s Afs) b))
(cartesien (dom f) (dom f)) (couple x y)); intros;
generalize (H7 H5); clear H5 H7 H8; intros.
elim
(axs_comprehension
(fun x : E =>
exists a0 : E,
(exists b : E,
x = couple a0 b /\
App f (lem_fun_sig_is_fun f a s Afs) a0 =
App f (lem_fun_sig_is_fun f a s Afs) b))
(cartesien (dom f) (dom f)) (couple y z)); intros;
generalize (H7 H6); clear H6 H7 H8; intros.
elim H5; clear H5; intros; elim H7; clear H7; intros; elim H7; clear H7;
intros; elim H7; clear H7; intros.
elim (lem_couple_propertie x x0 y x1); intros; generalize (H9 H7);
clear H7 H9 H10; intros; elim H7; clear H7; intros.
generalize H8; rewrite <- H7; rewrite <- H9; clear H7 H8 H9; intros.
elim H6; clear H6; intros; elim H7; clear H7; intros; elim H7; clear H7;
intros; elim H7; clear H7; intros.
elim (lem_couple_propertie y x2 z x3); intros; generalize (H10 H7);
clear H7 H10 H11; intros; elim H7; clear H7; intros.
generalize H9; rewrite <- H7; rewrite <- H10; clear H7 H9 H10; intros.
generalize H9; rewrite <- H8; clear H8 H9; intros.
elim (lem_cartesian_propertie (dom f) (dom f) (couple x y)); intros;
generalize (H7 H5); clear H5 H7 H8; intros.
elim H5; clear H5; intros; elim H5; clear H5; intros; elim H5; clear H5;
intros; elim H7; clear H7; intros.
elim (lem_couple_propertie x x4 y x5); intros; generalize (H10 H8);
clear H8 H10 H11; intros; elim H8; clear H8; intros.
generalize H5; rewrite <- H8; clear H5 H7 H8 H10; intros.
elim (lem_cartesian_propertie (dom f) (dom f) (couple y z)); intros;
generalize (H7 H6); clear H6 H7 H8; intros.
elim H6; clear H6; intros; elim H6; clear H6; intros; elim H6; clear H6;
intros; elim H7; clear H7; intros.
elim (lem_couple_propertie y x6 z x7); intros; generalize (H10 H8);
clear H8 H10 H11; intros; elim H8; clear H8; intros.
generalize H7; rewrite <- H10; clear H6 H7 H8 H10; intros.
unfold equiv_fun in |- *.
elim
(axs_comprehension
(fun x0 : E =>
exists a0 : E,
(exists b : E,
x0 = couple a0 b /\
App f (lem_fun_sig_is_fun f a s Afs) a0 =
App f (lem_fun_sig_is_fun f a s Afs) b))
(cartesien (dom f) (dom f)) (couple x z)); intros;
apply H8; clear H6 H8; intros.
split;
[ idtac | exists x; exists z; split; [ reflexivity | auto with zfc ] ].
elim (lem_cartesian_propertie (dom f) (dom f) (couple x z)); intros; apply H8;
clear H6 H8; intros.
exists x; exists z; split;
[ auto with zfc | split; [ auto with zfc | reflexivity ] ].
Qed.
(* End of proof of lem_sig_fun_equiv_is_equiv                              *)

(* Specifications: *)
Lemma lem_fun_equiv_dom :
forall (f : E) (Af : fun_ f),
rdom (equiv_fun f Af) (dom f) (dom f) (lem_fun_equiv_is_rel f Af) = dom f.