(* Proof of lem_sig_equiv_fun_make                                         *)
intros.
elim Afs; intros; elim H3; clear H3; 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 y)); intros;
apply H6; clear H5 H6; intros.
split;
[ idtac | exists x; exists y; split; [ reflexivity | auto with zfc ] ].
rewrite H3.
elim (lem_cartesian_propertie a a (couple x y)); intros; apply H6;
clear H5 H6; intros.
exists x; exists y; split;
[ auto with zfc | split; [ auto with zfc | reflexivity ] ].
Qed.
(* End of proof of lem_sig_equiv_fun_make                                  *)
(***************************************************************************)
(* Projection sur le quotient                                              *)
(***************************************************************************)
Definition projQuotient (r a : E) (rRel : rel_sig r a a)
(rEqv : equivalence r a rRel) (rD : rdom r a a rRel = a) :=
subset
(fun x : E =>
exists z : E,
(exists t : E, x = couple z t /\ t = equivClass r a rRel rEqv z))
(cartesien a (quotient r a rRel rEqv rD)).

(* Specifications: *)
(***************************************************************************)
(* projQuotient est une application                                        *)
(***************************************************************************)
Lemma lem_projQuotient_is_fun :
forall (r a : E) (rRel : rel_sig r a a) (rEqv : equivalence r a rRel)
(rD : rdom r a a rRel = a), fun_ (projQuotient r a rRel rEqv rD).