(* End of proof of lem_equiv_comp_bij_under                                *)

(***************************************************************************)
(***************************************************************************)
(* Deux corollaires au thm fondamental                                     *)
(***************************************************************************)
(***************************************************************************)

(***************************************************************************)
(* Corollaire 1                                                            *)
(***************************************************************************)
(***************************************************************************)
(* On s'interesse a equiv_comp dans le cas ou la relation r est le noyau   *)
(* d'equivalence de f.                                                     *)
(***************************************************************************)
Definition equiv_comp_fun (f a s : E) (Afs : fun_sig f a s) :=
  equiv_comp (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
    (lem_sig_fun_equiv_is_rel f a s Afs)
    (lem_sig_fun_equiv_is_equiv f a s Afs) (lem_sig_fun_equiv_dom f a s Afs)
    s f Afs (lem_fun_equiv_prop f (lem_fun_sig_is_fun f a s Afs)).

(* Specifications: *)
Lemma lem_equiv_comp_fun_is_inj : forall (f a s : E) (Afs : fun_sig f a s), fun_inj (equiv_comp_fun f a s Afs) (quotient (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a (lem_sig_fun_equiv_is_rel f a s Afs) (lem_sig_fun_equiv_is_equiv f a s Afs) (lem_sig_fun_equiv_dom f a s Afs)) s.
Lemma lem_equiv_comp_fun_sig : forall (f a s : E) (Afs : fun_sig f a s), fun_sig (equiv_comp_fun f a s Afs) (quotient (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a (lem_sig_fun_equiv_is_rel f a s Afs) (lem_sig_fun_equiv_is_equiv f a s Afs) (lem_sig_fun_equiv_dom f a s Afs)) s.
Lemma lem_equiv_comp_fun_prop : forall (f a s : E) (Afs : fun_sig f a s), f = comp (projQuotient (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a (lem_sig_fun_equiv_is_rel f a s Afs) (lem_sig_fun_equiv_is_equiv f a s Afs) (lem_sig_fun_equiv_dom f a s Afs)) (equiv_comp_fun f a s Afs) a (quotient (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a (lem_sig_fun_equiv_is_rel f a s Afs) (lem_sig_fun_equiv_is_equiv f a s Afs) (lem_sig_fun_equiv_dom f a s Afs)) s (lem_projQuotient_sig (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a (lem_sig_fun_equiv_is_rel f a s Afs) (lem_sig_fun_equiv_is_equiv f a s Afs) (lem_sig_fun_equiv_dom f a s Afs)) (lem_equiv_comp_fun_sig f a s Afs).
Lemma lem_sym_not_antisym : forall (r a : E) (rRel : rel_sig r a a) (rNe : exists x : E, (exists y : E, x <> y /\ In (couple x y) r)), symmetry r a rRel -> ~ antisymmetry r a rRel.
Lemma lem_antisym_not_sym : forall (r a : E) (rRel : rel_sig r a a) (rNe : exists x : E, (exists y : E, x <> y /\ In (couple x y) r)), antisymmetry r a rRel -> ~ symmetry r a rRel.
Lemma lem_irrefl_trans_so_antisym : forall (r a : E) (rRel : rel_sig r a a) (rIrrefl : irreflexivity r a rRel) (rTrans : transitivity r a rRel), antisymmetry r a rRel.