import algebra.category.basic
open eq eq.ops category functor natural_transformation

variables {obC obD : Type} {C : category obC} {D : category obD} {F G H : C ⇒ D}

protected definition compose2 (η : G ⟹ H) (θ : F ⟹ G) : F ⟹ H :=
natural_transformation.mk
  (λ a, η a ∘ θ a)
  (λ a b f, calc
    H f ∘ (η a ∘ θ a) = (H f ∘ η a) ∘ θ a : assoc
                  ... = (η b ∘ G f) ∘ θ a : {naturality η f}
                  ... = η b ∘ (G f ∘ θ a) : symm !assoc
                  ... = η b ∘ (θ b ∘ F f) : {naturality θ f}
                  ... = (η b ∘ θ b) ∘ F f : assoc)
