(* Proof of lem_equiv_comp_elem                                            *)
intros.
generalize (lem_x_equiv_in_projQ r a rRel rEqv rD x H); intros.
generalize
(lem_fun_and_img (projQuotient r a rRel rEqv rD) x
(equivClass r a rRel rEqv x) (lem_projQuotient_is_fun r a rRel rEqv rD)
H0); rewrite (lem_projQuotient_img r a rRel rEqv rD);
intros.
unfold equiv_comp in |- *.
elim
(axs_comprehension
(fun z : E =>
exists x0 : E,
In x0 a /\
z =
couple (equivClass r a rRel rEqv x0)
(App f (lem_fun_sig_is_fun f a s Afs) x0))
(cartesien (quotient r a rRel rEqv rD) s)
(couple (equivClass r a rRel rEqv x)
(App f (lem_fun_sig_is_fun f a s Afs) x)));
intros; apply H3; clear H2 H3; intros.
split; [ idtac | exists x; split; [ auto with zfc | reflexivity ] ].
elim
(lem_cartesian_propertie (quotient r a rRel rEqv rD) s
(couple (equivClass r a rRel rEqv x)
(App f (lem_fun_sig_is_fun f a s Afs) x)));
intros; apply H3; clear H2 H3; intros.
exists (equivClass r a rRel rEqv x);
exists (App f (lem_fun_sig_is_fun f a s Afs) x); split;
[ auto with zfc | split; [ idtac | reflexivity ] ].
elim Afs; intros; elim H3; clear H3; intros.
cut (In x (dom f)); intros; [ idtac | rewrite H3; auto with zfc ].
generalize (lem_eval_prop2 f x (lem_fun_sig_is_fun f a s Afs) H5); intros.
generalize
(lem_fun_and_img f x (App f (lem_fun_sig_is_fun f a s Afs) x)
(lem_fun_sig_is_fun f a s Afs) H6); intros.
exact (H4 (App f (lem_fun_sig_is_fun f a s Afs) x) H7).
Qed.
(* End of proof of lem_equiv_comp_elem                                     *)

(***************************************************************************)
(* f = equiv_comp o projQuotient                                           *)
(***************************************************************************)
Lemma lem_equiv_comp_prop :
forall (r a : E) (rRel : rel_sig r a a) (rEqv : equivalence r a rRel)
(rD : rdom r a a rRel = a) (s f : E) (Afs : fun_sig f a s)
(Pr : forall x y : E,
In (couple x y) r ->
App f (lem_fun_sig_is_fun f a s Afs) x =
App f (lem_fun_sig_is_fun f a s Afs) y),
f =
comp (projQuotient r a rRel rEqv rD)
(equiv_comp r a rRel rEqv rD s f Afs Pr) a (quotient r a rRel rEqv rD) s
(lem_projQuotient_sig r a rRel rEqv rD)
(lem_equiv_comp_sig r a rRel rEqv rD s f Afs Pr).