s d (m : morphism (C1 -> (C2 -> D)) s d) : morphism (C1 * C2 -> D) (functor_object_of s) (functor_object_of d). Proof. simpl. refine (Build_NaturalTransformation (functor_object_of s) (functor_object_of d) (fun c => m (fst c) (snd c)) _); abstract ( repeat match goal with | [ |- context[components_of ?T ?x o components_of ?U ?x] ] => change (T x o U x) with ((compose (C := (_ -> _)) T U) x) | _ => f_ap | _ => rewrite !commutes | _ => do_exponential4 end ). Defined.
Require Import Category.Core Category.Prod FunctorCategory.Core Functor.Core NaturalTransformation.Core NaturalTransformation.Paths. Require Import Basics.Tactics.