Section Arrow.
Local Open Scope morphism_scope.
(** The type accomodating all arrows of a category C. *)
Record Arrow (C : Category) :=
{
Orig : Obj;
Targ : Obj;
Arr : Orig –≻ Targ
}.
Arguments Orig {_} _.
Arguments Targ {_} _.
Arguments Arr {_} _.
Coercion Arr : Arrow >-> Hom.
(** An arrow (in the appropriate category, e.g., comma) from arrow f : a -> b to arrow g : c -> d is a pair of arrows h1 : a -> c and h2 : b -> d that makes the following diagram commute: # <pre> f a ———————————> b |              | h1 |              | h2 |              | ↓              ↓ c ———————————> d g </pre> # *)
Record Arrow_Hom {C : Category} (a b : Arrow C) :=
{
Arr_H : (Orig a) –≻ (Orig b);
Arr_H' : (Targ a) –≻ (Targ b);
Arr_Hom_com : Arr_H' ∘ (Arr a) = (Arr b) ∘ Arr_H
}.
Arguments Arr_H {_ _ _} _.
Arguments Arr_H' {_ _ _} _.
Arguments Arr_Hom_com {_ _ _} _.
Context (C : Category).
Section Arrow_Hom_eq_simplify.
Context {a b : Arrow C} (f g : Arrow_Hom a b).

(* Specifications: *)
(** Two arrow homomorphisms are equal if the arrows between theor domains and codomain are respectively equal. In other words, we don't care about the proof of the diagram commuting. *)
Lemma Arrow_Hom_eq_simplify : Arr_H f = Arr_H g → Arr_H' f = Arr_H' g → f = g.
End Arrow_Hom_eq_simplify.