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

Theorem thm_ens_quotient_fond : 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), exUniq _ (fun g : E => fun_sig g (quotient r a rRel rEqv rD) s /\ f = comp2 (projQuotient r a rRel rEqv rD) g a (quotient r a rRel rEqv rD) s).