Section Algebras.
Context {C : Category} (T : Functor C C).
Record Algebra : Type :=
{
Alg_Carrier : C;
Constructors : Hom (FO T Alg_Carrier) Alg_Carrier
}.
Record Algebra_Hom (alg alg' : Algebra) : Type :=
{
Alg_map : Hom (Alg_Carrier alg) (Alg_Carrier alg');
Alg_map_com : compose (FA T Alg_map) (Constructors alg')
= compose (Constructors alg) Alg_map
}.
Arguments Alg_map {_ _} _.
Arguments Alg_map_com {_ _} _.
Program Definition Algebra_Hom_compose
{alg alg' alg'' : Algebra}
(h : Algebra_Hom alg alg')
(h' : Algebra_Hom alg' alg'')
: Algebra_Hom alg alg''
:=
{|
Alg_map := compose (Alg_map h) (Alg_map h')
|}.
Next Obligation. Proof. Admitted.

Lemma Algebra_Hom_eq_simplify (alg alg' : Algebra)
(ah ah' : Algebra_Hom alg alg')
: (Alg_map ah) = (Alg_map ah') -> ah = ah'.