fact: Record Metacategory := { arr := nat; pairs : M.t arr; composite (f g h : arr) := M.MapsTo (f, g) h pairs; identity (u : arr) := (∀ (f : arr), composite f u f) ∧ (∀ (g : arr), composite u g g); composition_law (k g f kg gf : arr) : composite k g kg -> composite g f gf -> ∀ kgf, composite kg f kgf ↔ composite k gf kgf; triple_composition (k g f kg gf : arr) : composite k g kg -> composite g f gf → (exists kgf : arr, composite kg f kgf)%type; identity_law (g : arr) : ∃ u, identity u -> ∃ u', identity u' -> defined g u pairs ∧ defined u' g pairs; }.
imports: Coq.Structures.DecidableTypeEx Coq.FSets.FMapFacts Category.Lib.FMapExt Coq.Arith.PeanoNat Category.Lib Category.Theory.Category