(* End of proof of lem_equivClass_is_same                                  *)

Definition equiv_comp (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) :=
  subset
    (fun z : E =>
     exists x : E,
       In x a /\
       z =
       couple (equivClass r a rRel rEqv x)
         (App f (lem_fun_sig_is_fun f a s Afs) x))
    (cartesien (quotient r a rRel rEqv rD) s).

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).