Section equaz_laws.
Variables (c : C) (e : c --> a).
Definition Equalizer_eq (r : C) (h : r --> a) :=
forall i j : I, h o k i =_S h o k j.
Definition Equalizer_law1 := Equalizer_eq e.
Variable E_diese : forall (r : C) (h : r --> a), Equalizer_eq h -> (r --> c).
Definition Equalizer_law2 :=
forall (r : C) (h : r --> a) (p : Equalizer_eq h), h =_S E_diese p o e.
Definition Equalizer_law3 :=
forall (r : C) (h : r --> a) (p : Equalizer_eq h) (l : r --> c),
h =_S l o e -> l =_S E_diese p.
End equaz_laws.
Structure Equalizer : Type :=
{E_ob : C;
E_mor : E_ob --> a;
Prf_E_law1 : Equalizer_law1 E_mor;
E_diese : forall (r : C) (h : r --> a), Equalizer_eq h -> (r --> E_ob);
Prf_E_law2 : Equalizer_law2 E_mor E_diese;
Prf_E_law3 : Equalizer_law3 E_mor E_diese}.
Variable f : Equalizer.
(* tout Equalizer est monic *)
(* un epic Equalizer est iso *)

Lemma Epic_Equalizer_iso :
forall p : Epic_law (E_mor f),
let f1 := E_diese f (Epic_Equalizer_id p) in AreIsos (E_mor f) f1.