(* *)
(* Monoid Morphism *)
Variable m1 m2 : Monoid.
Definition MonUnit_law (f : Map m1 m2) := f (Munit m1) =_S Munit m2.
Definition MonOp_law (f : Map m1 m2) :=
forall a b : m1, f (a +_M b) =_S f a +_M f b.
Structure MonMor : Type :=
{MonMap :> Map m1 m2;
Prf_MonUnit_law : MonUnit_law MonMap;
Prf_MonOp_law : MonOp_law MonMap}.
(*** rewrite rules ***)

(* Specifications: *)
Lemma MMon_unit : forall f : MonMor, f (Munit m1) =_S Munit m2.
Lemma MMon_op : forall (f : MonMor) (a b : m1), f (a +_M b) =_S f a +_M f b.
Definition Equal_MonMor (f g : MonMor) := f =_M g.