Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.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"-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"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.LocalOpen Scope morphism_scope.LocalOpen 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 Ltachelper_t fwd_tac bak_tac fin :=
repeatfirst [ fin
| rewrite <- ?Category.Core.associativity;
progressrepeatfirst [ bak_tac
| apply ap10; apply ap ]
| rewrite -> ?Category.Core.associativity;
progressrepeatfirst [ fwd_tac
| apply ap ]
| rewrite <- !composition_of ].LocalTactic Notation"helper" tactic(fin) constr(hyp_fwd) constr(hyp_bak) :=
letH := freshinletH' := freshinpose proof hyp_fwd as H;
pose proof hyp_bak as H';
simplin *;
helper_t ltac:(rewrite -> H) ltac:(rewrite <- H') fin.Local Ltacfunctorial_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;
repeatmatch goal with
| _ => exact idpath
| [ |- context[CommaCategory.g (transport ?P?p?z)] ]
=> simplrewrite (@ap_transport _ P _ _ _ p (fun_ => @CommaCategory.g _ _ _ _ _ _ _) z)
| [ |- context[CommaCategory.h (transport ?P?p?z)] ]
=> simplrewrite (@ap_transport _ P _ _ _ p (fun_ => @CommaCategory.h _ _ _ _ _ _ _) z)
| [ |- context[transport (funy => ?f (?g y) ?z)] ]
=> simplrewrite (funab => @transport_compose _ _ a b (funy => f y z) g)
| [ |- context[transport (funy => ?f (?g y))] ]
=> simplrewrite (funab => @transport_compose _ _ a b (funy => f y) g)
| _ => rewrite !CommaCategory.ap_a_path_object'; simpl
| _ => rewrite !CommaCategory.ap_b_path_object'; simplend.Sectionfunctorial.Sectionsingle_source.VariablesABC : PreCategory.VariableS : Functor A C.VariableT : Functor B C.Sectionmorphism_of.VariablesA'B'C' : PreCategory.VariableS' : Functor A' C'.VariableT' : Functor B' C'.VariableAF : Functor A A'.VariableBF : Functor B B'.VariableCF : Functor C C'.VariableTA : NaturalTransformation (S' o AF) (CF o S).VariableTB : NaturalTransformation (CF o T) (T' o BF).Definitionfunctorial_morphism_of_object_of : (S / T) -> (S' / T')
:= funx => 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
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
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
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))
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.Endmorphism_of.Sectionidentity_of.
A, B, C: PreCategory S: Functor A C T: Functor B C x: S / T
functorial_morphism_of_object_of 11 x = x
A, B, C: PreCategory S: Functor A C T: Functor B C x: S / T
functorial_morphism_of_object_of 11 x = x
A, B, C: PreCategory S: Functor A C T: Functor B C x: S / T
transport
(funX : A =>
morphism C (S _0 X)%object
(T _0 (CommaCategory.b x))%object) 1
(transport
(funY : B =>
morphism C
(S
_0 (CommaCategory.a
(functorial_morphism_of_object_of 11 x)))%object
(T _0 Y)%object) 1
(CommaCategory.f
(functorial_morphism_of_object_of 11 x))) =
CommaCategory.f x
A, B, C: PreCategory S: Functor A C T: Functor B C H: Funext
functorial_morphism_of 11 = 1%functor
A, B, C: PreCategory S: Functor A C T: Functor B C H: Funext
functorial_morphism_of 11 = 1%functor
A, B, C: PreCategory S: Functor A C T: Functor B C H: Funext
{HO : functorial_morphism_of_object_of 11 = idmap &
transport
(funGO : CommaCategory.object S T ->
CommaCategory.object S T =>
forallsd : CommaCategory.object S T,
CommaCategory.morphism s d ->
CommaCategory.morphism (GO s) (GO d)) HO
(functorial_morphism_of_morphism_of 11) =
(funsd : CommaCategory.object S T => idmap)}
A, B, C: PreCategory S: Functor A C T: Functor B C H: Funext
transport
(funGO : CommaCategory.object S T ->
CommaCategory.object S T =>
forallsd : CommaCategory.object S T,
CommaCategory.morphism s d ->
CommaCategory.morphism (GO s) (GO d))
(path_forall (functorial_morphism_of_object_of 11)
idmap functorial_identity_of_helper)
(functorial_morphism_of_morphism_of 11) =
(funsd : CommaCategory.object S T => idmap)
A, B, C: PreCategory S: Functor A C T: Functor B C H: Funext
transport
(funGO : CommaCategory.object S T ->
CommaCategory.object S T =>
forallsd : CommaCategory.object S T,
CommaCategory.morphism s d ->
CommaCategory.morphism (GO s) (GO d))
(path_forall (functorial_morphism_of_object_of 11)
idmap functorial_identity_of_helper)
(functorial_morphism_of_morphism_of 11) =
(funsd : CommaCategory.object S T => idmap)
functorial_helper_t functorial_identity_of_helper.Qed.Endidentity_of.Endsingle_source.Sectioncomposition_of.VariablesABC : PreCategory.VariableS : Functor A C.VariableT : Functor B C.VariablesA'B'C' : PreCategory.VariableS' : Functor A' C'.VariableT' : Functor B' C'.VariablesA''B''C'' : PreCategory.VariableS'' : Functor A'' C''.VariableT'' : Functor B'' C''.VariableAF : Functor A A'.VariableBF : Functor B B'.VariableCF : Functor C C'.VariableTA : NaturalTransformation (S' o AF) (CF o S).VariableTB : NaturalTransformation (CF o T) (T' o BF).VariableAF' : Functor A' A''.VariableBF' : Functor B' B''.VariableCF' : Functor C' C''.VariableTA' : NaturalTransformation (S'' o AF') (CF' o S').VariableTB' : NaturalTransformation (CF' o T') (T'' o BF').LetAF'' := (AF' o AF)%functor.LetBF'' := (BF' o BF)%functor.LetCF'' := (CF' o CF)%functor.LetTA'' : 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.LetTB'' : 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
(funX : A'' =>
morphism C'' (S'' _0 X)%object
(T''
_0 (CommaCategory.b
((functorial_morphism_of TA'' TB'') _0 x)))%object)
1
(transport
(funY : 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
(funX : 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
(funY : 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)
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
: (func : 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
(funGO : CommaCategory.object S T ->
CommaCategory.object S'' T'' =>
forallsd : CommaCategory.object S T,
CommaCategory.morphism s d ->
CommaCategory.morphism (GO s) (GO d)) HO
(fun (sd : 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
(funGO : CommaCategory.object S T ->
CommaCategory.object S'' T'' =>
forallsd : 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 (sd : 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''