End NatTrans_id_Op.
(** Horizontal composition of natural transformations:  Let C, D and E be categories, F: C -> D G : C -> D, F' : D -> E and G' : D -> E be functors and N : F -> G and N' : F' -> G' be natural transformations. Then, the horizontal composition of N and N', denoted by N ∘_h N' : F' ∘ F -> G' ∘ G is defined as follows: *)
Program Definition NatTrans_hor_comp {C D E : Category} {F G : (C –≻ D)%functor}
{F' G' : (D –≻ E)%functor} (tr : F –≻ G) (tr' : F' –≻ G')
: (F' ∘ F) –≻ (G' ∘ G) :=
{|
Trans := fun c : Obj => ((G' _a (Trans tr c)) ∘ (Trans tr' (F _o c)))%morphism
|}.
Next Obligation. (* Trans_com*)
Next Obligation. (* Trans_com*)
(** Graphically: # <pre> C      C             C              C |  N   |             |              | F | ===> | G           |              | |      |             |              | ∨      ∨             |   N' ∘_h N   | D      D        F'∘F | ===========> |G'∘G |  N'  |             |              | F' | ===> | G'          |              | |      |             |              | ∨      ∨             ∨              ∨ E      E             E              E </pre> # *)
Notation "N ∘_h N'" := (NatTrans_hor_comp N' N) : nattrans_scope.
(** Horizontal composition of NatTrans_ids is just the NatTrans_id of the composition of underlying functors. *)
Section Hor_Compose_ids.
Context {C D E : Category} (F : (C –≻ D)%functor) (G : (D –≻ E)%functor).

(* Specifications: *)
Theorem NatTrans_hor_comp_ids
: ((NatTrans_id G) ∘_h (NatTrans_id F))%nattrans = NatTrans_id  (G ∘ F).