Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
(** * Functoriality of the comma category construction *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Functor.Composition.Core NaturalTransformation.Composition.Core. Require Import NaturalTransformation.Composition.Laws. Require Import Functor.Paths. Require Import Category.Strict. Require Comma.Core. Local Set Warnings Append "-notation-overridden". (* work around bug #5567, https://coq.inria.fr/bugs/show_bug.cgi?id=5567, notation-overridden,parsing should not trigger for only printing notations *) Import Comma.Core. Local Set Warnings Append "notation-overridden". Import Functor.Identity.FunctorIdentityNotations NaturalTransformation.Identity.NaturalTransformationIdentityNotations. Require Import HoTT.Tactics PathGroupoids Types.Forall. Set Universe Polymorphism. Set Implicit Arguments. Generalizable All Variables. Set Asymmetric Patterns. Local Open Scope morphism_scope. Local Open Scope category_scope. (** The comma category construction is functorial in its category arguments. We really should be using ∏ (dependent product) here, but I'm lazy, and will instead expand it out. *) Local Ltac helper_t fwd_tac bak_tac fin := repeat first [ fin | rewrite <- ?Category.Core.associativity; progress repeat first [ bak_tac | apply ap10; apply ap ] | rewrite -> ?Category.Core.associativity; progress repeat first [ fwd_tac | apply ap ] | rewrite <- !composition_of ]. Local Tactic Notation "helper" tactic(fin) constr(hyp_fwd) constr(hyp_bak) := let H := fresh in let H' := fresh in pose proof hyp_fwd as H; pose proof hyp_bak as H'; simpl in *; helper_t ltac:(rewrite -> H) ltac:(rewrite <- H') fin. Local Ltac functorial_helper_t unfold_lem := repeat (apply path_forall || intro); simpl; rewrite !transport_forall_constant; simpl; transport_path_forall_hammer; simpl; apply CommaCategory.path_morphism; simpl; unfold unfold_lem; simpl; repeat match goal with | _ => exact idpath | [ |- context[CommaCategory.g (transport ?P ?p ?z)] ] => simpl rewrite (@ap_transport _ P _ _ _ p (fun _ => @CommaCategory.g _ _ _ _ _ _ _) z) | [ |- context[CommaCategory.h (transport ?P ?p ?z)] ] => simpl rewrite (@ap_transport _ P _ _ _ p (fun _ => @CommaCategory.h _ _ _ _ _ _ _) z) | [ |- context[transport (fun y => ?f (?g y) ?z)] ] => simpl rewrite (fun a b => @transport_compose _ _ a b (fun y => f y z) g) | [ |- context[transport (fun y => ?f (?g y))] ] => simpl rewrite (fun a b => @transport_compose _ _ a b (fun y => f y) g) | _ => rewrite !CommaCategory.ap_a_path_object'; simpl | _ => rewrite !CommaCategory.ap_b_path_object'; simpl end. Section functorial. Section single_source. Variables A B C : PreCategory. Variable S : Functor A C. Variable T : Functor B C. Section morphism_of. Variables A' B' C' : PreCategory. Variable S' : Functor A' C'. Variable T' : Functor B' C'. Variable AF : Functor A A'. Variable BF : Functor B B'. Variable CF : Functor C C'. Variable TA : NaturalTransformation (S' o AF) (CF o S). Variable TB : NaturalTransformation (CF o T) (T' o BF). Definition functorial_morphism_of_object_of : (S / T) -> (S' / T') := fun x => CommaCategory.Build_object S' T' (AF (CommaCategory.a x)) (BF (CommaCategory.b x)) (TB (CommaCategory.b x) o CF _1 (CommaCategory.f x) o TA (CommaCategory.a x)).
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
s, d: S / T
m: morphism (S / T) s d

morphism (S' / T') (functorial_morphism_of_object_of s) (functorial_morphism_of_object_of d)
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
s, d: S / T
m: morphism (S / T) s d

morphism (S' / T') (functorial_morphism_of_object_of s) (functorial_morphism_of_object_of d)
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
s, d: CommaCategory.object S T
m: CommaCategory.morphism s d

CommaCategory.morphism (functorial_morphism_of_object_of s) (functorial_morphism_of_object_of d)
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
s, d: CommaCategory.object S T
m: CommaCategory.morphism s d

T' _1 (BF _1 (CommaCategory.h m)) o CommaCategory.f (functorial_morphism_of_object_of s) = CommaCategory.f (functorial_morphism_of_object_of d) o S' _1 (AF _1 (CommaCategory.g m))
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
s, d: CommaCategory.object S T
m: CommaCategory.morphism s d

T' _1 (BF _1 (CommaCategory.h m)) o (TB (CommaCategory.b s) o CF _1 (CommaCategory.f s) o TA (CommaCategory.a s)) = TB (CommaCategory.b d) o CF _1 (CommaCategory.f d) o TA (CommaCategory.a d) o S' _1 (AF _1 (CommaCategory.g m))
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
s, d: CommaCategory.object S T
m: CommaCategory.morphism s d

T' _1 (BF _1 (CommaCategory.h m)) o (TB (CommaCategory.b s) o CF _1 (CommaCategory.f s) o TA (CommaCategory.a s)) = TB (CommaCategory.b d) o CF _1 (CommaCategory.f d) o TA (CommaCategory.a d) o S' _1 (AF _1 (CommaCategory.g m))
abstract helper (exact (CommaCategory.p m)) (commutes TA) (commutes TB). Defined.
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)

Functor (S / T) (S' / T')
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)

Functor (S / T) (S' / T')
refine (Build_Functor (S / T) (S' / T') functorial_morphism_of_object_of functorial_morphism_of_morphism_of _ _); abstract ( intros; apply CommaCategory.path_morphism; simpl; auto with functor ). Defined. End morphism_of. Section identity_of.
A, B, C: PreCategory
S: Functor A C
T: Functor B C
x: S / T

functorial_morphism_of_object_of 1 1 x = x
A, B, C: PreCategory
S: Functor A C
T: Functor B C
x: S / T

functorial_morphism_of_object_of 1 1 x = x
A, B, C: PreCategory
S: Functor A C
T: Functor B C
x: S / T

transport (fun X : A => morphism C (S _0 X)%object (T _0 (CommaCategory.b x))%object) 1 (transport (fun Y : B => morphism C (S _0 (CommaCategory.a (functorial_morphism_of_object_of 1 1 x)))%object (T _0 Y)%object) 1 (CommaCategory.f (functorial_morphism_of_object_of 1 1 x))) = CommaCategory.f x
exact (Category.Core.right_identity _ _ _ _ @ Category.Core.left_identity _ _ _ _)%path. Defined.
A, B, C: PreCategory
S: Functor A C
T: Functor B C
H: Funext

functorial_morphism_of 1 1 = 1%functor
A, B, C: PreCategory
S: Functor A C
T: Functor B C
H: Funext

functorial_morphism_of 1 1 = 1%functor
A, B, C: PreCategory
S: Functor A C
T: Functor B C
H: Funext

{HO : functorial_morphism_of_object_of 1 1 = idmap & transport (fun GO : CommaCategory.object S T -> CommaCategory.object S T => forall s d : CommaCategory.object S T, CommaCategory.morphism s d -> CommaCategory.morphism (GO s) (GO d)) HO (functorial_morphism_of_morphism_of 1 1) = (fun s d : CommaCategory.object S T => idmap)}
A, B, C: PreCategory
S: Functor A C
T: Functor B C
H: Funext

transport (fun GO : CommaCategory.object S T -> CommaCategory.object S T => forall s d : CommaCategory.object S T, CommaCategory.morphism s d -> CommaCategory.morphism (GO s) (GO d)) (path_forall (functorial_morphism_of_object_of 1 1) idmap functorial_identity_of_helper) (functorial_morphism_of_morphism_of 1 1) = (fun s d : CommaCategory.object S T => idmap)
A, B, C: PreCategory
S: Functor A C
T: Functor B C
H: Funext

transport (fun GO : CommaCategory.object S T -> CommaCategory.object S T => forall s d : CommaCategory.object S T, CommaCategory.morphism s d -> CommaCategory.morphism (GO s) (GO d)) (path_forall (functorial_morphism_of_object_of 1 1) idmap functorial_identity_of_helper) (functorial_morphism_of_morphism_of 1 1) = (fun s d : CommaCategory.object S T => idmap)
functorial_helper_t functorial_identity_of_helper. Qed. End identity_of. End single_source. Section composition_of. Variables A B C : PreCategory. Variable S : Functor A C. Variable T : Functor B C. Variables A' B' C' : PreCategory. Variable S' : Functor A' C'. Variable T' : Functor B' C'. Variables A'' B'' C'' : PreCategory. Variable S'' : Functor A'' C''. Variable T'' : Functor B'' C''. Variable AF : Functor A A'. Variable BF : Functor B B'. Variable CF : Functor C C'. Variable TA : NaturalTransformation (S' o AF) (CF o S). Variable TB : NaturalTransformation (CF o T) (T' o BF). Variable AF' : Functor A' A''. Variable BF' : Functor B' B''. Variable CF' : Functor C' C''. Variable TA' : NaturalTransformation (S'' o AF') (CF' o S'). Variable TB' : NaturalTransformation (CF' o T') (T'' o BF'). Let AF'' := (AF' o AF)%functor. Let BF'' := (BF' o BF)%functor. Let CF'' := (CF' o CF)%functor. Let TA'' : NaturalTransformation (S'' o AF'') (CF'' o S) := ((associator_2 _ _ _) o (CF' oL TA) o (associator_1 _ _ _) o (TA' oR AF) o associator_2 _ _ _)%natural_transformation. Let TB'' : NaturalTransformation (CF'' o T) (T'' o BF'') := ((associator_1 _ _ _) o (TB' oR BF) o (associator_2 _ _ _) o (CF' oL TB) o associator_1 _ _ _)%natural_transformation.
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
A'', B'', C'': PreCategory
S'': Functor A'' C''
T'': Functor B'' C''
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
AF': Functor A' A''
BF': Functor B' B''
CF': Functor C' C''
TA': NaturalTransformation (S'' o AF') (CF' o S')
TB': NaturalTransformation (CF' o T') (T'' o BF')
AF'':= (AF' o AF)%functor: Functor A A''
BF'':= (BF' o BF)%functor: Functor B B''
CF'':= (CF' o CF)%functor: Functor C C''
TA'':= (associator_2 CF' CF S o (CF' oL TA) o associator_1 CF' S' AF o (TA' oR AF) o associator_2 S'' AF' AF)%natural_transformation: NaturalTransformation (S'' o AF'') (CF'' o S)
TB'':= (associator_1 T'' BF' BF o (TB' oR BF) o associator_2 CF' T' BF o (CF' oL TB) o associator_1 CF' CF T)%natural_transformation: NaturalTransformation (CF'' o T) (T'' o BF'')
x: S / T

((functorial_morphism_of TA' TB' o functorial_morphism_of TA TB) _0 x)%object = ((functorial_morphism_of TA'' TB'') _0 x)%object
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
A'', B'', C'': PreCategory
S'': Functor A'' C''
T'': Functor B'' C''
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
AF': Functor A' A''
BF': Functor B' B''
CF': Functor C' C''
TA': NaturalTransformation (S'' o AF') (CF' o S')
TB': NaturalTransformation (CF' o T') (T'' o BF')
AF'':= (AF' o AF)%functor: Functor A A''
BF'':= (BF' o BF)%functor: Functor B B''
CF'':= (CF' o CF)%functor: Functor C C''
TA'':= (associator_2 CF' CF S o (CF' oL TA) o associator_1 CF' S' AF o (TA' oR AF) o associator_2 S'' AF' AF)%natural_transformation: NaturalTransformation (S'' o AF'') (CF'' o S)
TB'':= (associator_1 T'' BF' BF o (TB' oR BF) o associator_2 CF' T' BF o (CF' oL TB) o associator_1 CF' CF T)%natural_transformation: NaturalTransformation (CF'' o T) (T'' o BF'')
x: S / T

((functorial_morphism_of TA' TB' o functorial_morphism_of TA TB) _0 x)%object = ((functorial_morphism_of TA'' TB'') _0 x)%object
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
A'', B'', C'': PreCategory
S'': Functor A'' C''
T'': Functor B'' C''
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
AF': Functor A' A''
BF': Functor B' B''
CF': Functor C' C''
TA': NaturalTransformation (S'' o AF') (CF' o S')
TB': NaturalTransformation (CF' o T') (T'' o BF')
AF'':= (AF' o AF)%functor: Functor A A''
BF'':= (BF' o BF)%functor: Functor B B''
CF'':= (CF' o CF)%functor: Functor C C''
TA'':= (associator_2 CF' CF S o (CF' oL TA) o associator_1 CF' S' AF o (TA' oR AF) o associator_2 S'' AF' AF)%natural_transformation: NaturalTransformation (S'' o AF'') (CF'' o S)
TB'':= (associator_1 T'' BF' BF o (TB' oR BF) o associator_2 CF' T' BF o (CF' oL TB) o associator_1 CF' CF T)%natural_transformation: NaturalTransformation (CF'' o T) (T'' o BF'')
x: S / T

transport (fun X : A'' => morphism C'' (S'' _0 X)%object (T'' _0 (CommaCategory.b ((functorial_morphism_of TA'' TB'') _0 x)))%object) 1 (transport (fun Y : B'' => morphism C'' (S'' _0 (CommaCategory.a ((functorial_morphism_of TA' TB' o functorial_morphism_of TA TB) _0 x)))%object (T'' _0 Y)%object) 1 (CommaCategory.f ((functorial_morphism_of TA' TB' o functorial_morphism_of TA TB) _0 x)%object)) = CommaCategory.f ((functorial_morphism_of TA'' TB'') _0 x)%object
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
A'', B'', C'': PreCategory
S'': Functor A'' C''
T'': Functor B'' C''
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
AF': Functor A' A''
BF': Functor B' B''
CF': Functor C' C''
TA': NaturalTransformation (S'' o AF') (CF' o S')
TB': NaturalTransformation (CF' o T') (T'' o BF')
x: S / T

transport (fun X : A'' => morphism C'' (S'' _0 X)%object (T'' _0 (CommaCategory.b ((functorial_morphism_of (associator_2 CF' CF S o (CF' oL TA) o associator_1 CF' S' AF o (TA' oR AF) o associator_2 S'' AF' AF) (associator_1 T'' BF' BF o (TB' oR BF) o associator_2 CF' T' BF o (CF' oL TB) o associator_1 CF' CF T)) _0 x)))%object) 1 (transport (fun Y : B'' => morphism C'' (S'' _0 (CommaCategory.a ((functorial_morphism_of TA' TB' o functorial_morphism_of TA TB) _0 x)))%object (T'' _0 Y)%object) 1 (CommaCategory.f ((functorial_morphism_of TA' TB' o functorial_morphism_of TA TB) _0 x)%object)) = CommaCategory.f ((functorial_morphism_of (associator_2 CF' CF S o (CF' oL TA) o associator_1 CF' S' AF o (TA' oR AF) o associator_2 S'' AF' AF) (associator_1 T'' BF' BF o (TB' oR BF) o associator_2 CF' T' BF o (CF' oL TB) o associator_1 CF' CF T)) _0 x)%object
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
A'', B'', C'': PreCategory
S'': Functor A'' C''
T'': Functor B'' C''
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
AF': Functor A' A''
BF': Functor B' B''
CF': Functor C' C''
TA': NaturalTransformation (S'' o AF') (CF' o S')
TB': NaturalTransformation (CF' o T') (T'' o BF')
x: CommaCategory.object S T

TB' (BF _0 (CommaCategory.b x))%object o CF' _1 (TB (CommaCategory.b x) o CF _1 (CommaCategory.f x) o TA (CommaCategory.a x)) o TA' (AF _0 (CommaCategory.a x))%object = 1 o TB' (BF _0 (CommaCategory.b x))%object o 1 o CF' _1 (TB (CommaCategory.b x)) o 1 o CF' _1 (CF _1 (CommaCategory.f x)) o (1 o CF' _1 (TA (CommaCategory.a x)) o 1 o TA' (AF _0 (CommaCategory.a x))%object o 1)
abstract ( autorewrite with morphism; simpl; helper (exact idpath) (commutes TA') (commutes TB') ). Defined.
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
A'', B'', C'': PreCategory
S'': Functor A'' C''
T'': Functor B'' C''
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
AF': Functor A' A''
BF': Functor B' B''
CF': Functor C' C''
TA': NaturalTransformation (S'' o AF') (CF' o S')
TB': NaturalTransformation (CF' o T') (T'' o BF')
AF'':= (AF' o AF)%functor: Functor A A''
BF'':= (BF' o BF)%functor: Functor B B''
CF'':= (CF' o CF)%functor: Functor C C''
TA'':= (associator_2 CF' CF S o (CF' oL TA) o associator_1 CF' S' AF o (TA' oR AF) o associator_2 S'' AF' AF)%natural_transformation: NaturalTransformation (S'' o AF'') (CF'' o S)
TB'':= (associator_1 T'' BF' BF o (TB' oR BF) o associator_2 CF' T' BF o (CF' oL TB) o associator_1 CF' CF T)%natural_transformation: NaturalTransformation (CF'' o T) (T'' o BF'')
H: Funext

(functorial_morphism_of TA' TB' o functorial_morphism_of TA TB)%functor = functorial_morphism_of TA'' TB''
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
A'', B'', C'': PreCategory
S'': Functor A'' C''
T'': Functor B'' C''
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
AF': Functor A' A''
BF': Functor B' B''
CF': Functor C' C''
TA': NaturalTransformation (S'' o AF') (CF' o S')
TB': NaturalTransformation (CF' o T') (T'' o BF')
AF'':= (AF' o AF)%functor: Functor A A''
BF'':= (BF' o BF)%functor: Functor B B''
CF'':= (CF' o CF)%functor: Functor C C''
TA'':= (associator_2 CF' CF S o (CF' oL TA) o associator_1 CF' S' AF o (TA' oR AF) o associator_2 S'' AF' AF)%natural_transformation: NaturalTransformation (S'' o AF'') (CF'' o S)
TB'':= (associator_1 T'' BF' BF o (TB' oR BF) o associator_2 CF' T' BF o (CF' oL TB) o associator_1 CF' CF T)%natural_transformation: NaturalTransformation (CF'' o T) (T'' o BF'')
H: Funext

(functorial_morphism_of TA' TB' o functorial_morphism_of TA TB)%functor = functorial_morphism_of TA'' TB''
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
A'', B'', C'': PreCategory
S'': Functor A'' C''
T'': Functor B'' C''
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
AF': Functor A' A''
BF': Functor B' B''
CF': Functor C' C''
TA': NaturalTransformation (S'' o AF') (CF' o S')
TB': NaturalTransformation (CF' o T') (T'' o BF')
AF'':= (AF' o AF)%functor: Functor A A''
BF'':= (BF' o BF)%functor: Functor B B''
CF'':= (CF' o CF)%functor: Functor C C''
TA'':= (associator_2 CF' CF S o (CF' oL TA) o associator_1 CF' S' AF o (TA' oR AF) o associator_2 S'' AF' AF)%natural_transformation: NaturalTransformation (S'' o AF'') (CF'' o S)
TB'':= (associator_1 T'' BF' BF o (TB' oR BF) o associator_2 CF' T' BF o (CF' oL TB) o associator_1 CF' CF T)%natural_transformation: NaturalTransformation (CF'' o T) (T'' o BF'')
H: Funext

{HO : (fun c : CommaCategory.object S T => functorial_morphism_of_object_of TA' TB' (functorial_morphism_of_object_of TA TB c)) = functorial_morphism_of_object_of TA'' TB'' & transport (fun GO : CommaCategory.object S T -> CommaCategory.object S'' T'' => forall s d : CommaCategory.object S T, CommaCategory.morphism s d -> CommaCategory.morphism (GO s) (GO d)) HO (fun (s d : CommaCategory.object S T) (m : CommaCategory.morphism s d) => functorial_morphism_of_morphism_of TA' TB' (functorial_morphism_of_morphism_of TA TB m)) = functorial_morphism_of_morphism_of TA'' TB''}
A, B, C: PreCategory
S: Functor A C
T: Functor B C
A', B', C': PreCategory
S': Functor A' C'
T': Functor B' C'
A'', B'', C'': PreCategory
S'': Functor A'' C''
T'': Functor B'' C''
AF: Functor A A'
BF: Functor B B'
CF: Functor C C'
TA: NaturalTransformation (S' o AF) (CF o S)
TB: NaturalTransformation (CF o T) (T' o BF)
AF': Functor A' A''
BF': Functor B' B''
CF': Functor C' C''
TA': NaturalTransformation (S'' o AF') (CF' o S')
TB': NaturalTransformation (CF' o T') (T'' o BF')
AF'':= (AF' o AF)%functor: Functor A A''
BF'':= (BF' o BF)%functor: Functor B B''
CF'':= (CF' o CF)%functor: Functor C C''
TA'':= (associator_2 CF' CF S o (CF' oL TA) o associator_1 CF' S' AF o (TA' oR AF) o associator_2 S'' AF' AF)%natural_transformation: NaturalTransformation (S'' o AF'') (CF'' o S)
TB'':= (associator_1 T'' BF' BF o (TB' oR BF) o associator_2 CF' T' BF o (CF' oL TB) o associator_1 CF' CF T)%natural_transformation: NaturalTransformation (CF'' o T) (T'' o BF'')
H: Funext

transport (fun GO : CommaCategory.object S T -> CommaCategory.object S'' T'' => forall s d : CommaCategory.object S T, CommaCategory.morphism s d -> CommaCategory.morphism (GO s) (GO d)) (path_forall (functorial_morphism_of TA' TB' o functorial_morphism_of TA TB)%functor (functorial_morphism_of TA'' TB'') functorial_composition_of_helper) (fun (s d : CommaCategory.object S T) (m : CommaCategory.morphism s d) => functorial_morphism_of_morphism_of TA' TB' (functorial_morphism_of_morphism_of TA TB m)) = functorial_morphism_of_morphism_of TA'' TB''
functorial_helper_t functorial_composition_of_helper. Qed. End composition_of. End functorial.