Local Open Scope morphism_scope.
(** A comma category for Functors F : B → C and G : D → C is a category whose objects are arrows in C  # <pre> F _o x ———————–> G _o y </pre> #  for x an object of B and y an object of D. Arrows of comma are commutative diagrams in C:  # <pre> F _o x ———————–> G _o y |                | |                | F _a h  |                |  F _a h' |                | |                | ↓                ↓ F _o x' ———————–> G _o y' </pre> #  for h : x → x' an arrow in B and h' : y → y' an arrow in G.  *)
Section Comma.
Context {B C D : Category} (F : (B –≻ C)%functor) (G : (D –≻ C)%functor).
Record Comma_Obj : Type :=
{
CMO_src : B;
CMO_trg : D;
CMO_hom : ((F _o CMO_src) –≻ (G _o CMO_trg))%object
}.
Record Comma_Hom (a b : Comma_Obj) : Type :=
{
CMH_left : (CMO_src a) –≻ (CMO_src b);
CMH_right : (CMO_trg a) –≻ (CMO_trg b);
CMH_com :  ((G _a CMH_right) ∘ (@CMO_hom a) =
(@CMO_hom b) ∘ (F _a CMH_left))%morphism
}.
Arguments CMH_left {_ _} _.
Arguments CMH_right {_ _} _.
Arguments CMH_com {_ _} _.

(* Specifications: *)
Theorem Comma_Hom_eq_simplify {a b : Comma_Obj} (h h' : Comma_Hom a b) :
(@CMH_left _ _ h) = (@CMH_left _ _ h') →
(@CMH_right _ _ h) = (@CMH_right _ _ h') → h = h'.