Section funct_laws.
Variables (FOb : C -> D)
(FMap : forall a b : C, Map (a --> b) (FOb a --> FOb b)).
Definition Fcomp_law :=
forall (a b c : C) (f : a --> b) (g : b --> c),
FMap a c (f o g) =_S FMap a b f o FMap b c g.
Definition Fid_law := forall a : C, FMap a a (Id a) =_S Id (FOb a).
End funct_laws.
Structure Functor : Type :=
{FOb :> C -> D;
FMap : forall a b : C, Map (a --> b) (FOb a --> FOb b);
Prf_Fcomp_law : Fcomp_law FMap;
Prf_Fid_law : Fid_law FMap}.
Definition FMor (F : Functor) (a b : C) (f : a --> b) := FMap F a b f.
(*** rewrite rules ***)

Lemma FComp :
forall (F : Functor) (a b c : C) (f : a --> b) (g : b --> c),
FMor F (f o g) =_S FMor F f o FMor F g.