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.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Category.Strict.Require Import Functor.Composition.Core.Require Import NaturalTransformation.Paths NaturalTransformation.Composition.Core.Require Import Category.Morphisms FunctorCategory.Core.Require Import Pseudofunctor.Core Pseudofunctor.RewriteLaws.Require Import NaturalTransformation.Composition.Laws.Require Import FunctorCategory.Morphisms.Require LaxComma.CoreParts.Require Import HoTT.Tactics.Import Functor.Identity.FunctorIdentityNotations.Set Universe Polymorphism.Set Implicit Arguments.Generalizable All Variables.Set Asymmetric Patterns.LocalOpen Scope morphism_scope.LocalOpen Scope category_scope.(** Quoting David Spivak: David: ok so an object of [FC ⇓ D] is a pair [(X, G)], where [X] is a finite category (or a small category or whatever you wanted) and [G : X --> D] is a functor. a morphism in [FC ⇓ D] is a ``natural transformation diagram'' (as opposed to a commutative diagram, in which the natural transformation would be ``identity'') so a map in [FC ⇓ D] from [(X, G)] to [(X', G')] is a pair [(F, α)] where [F : X --> X'] is a functor and [α : G --> G' ∘ F] is a natural transformation and the punchline is that there is a functor [colim : FC ⇓ D --> D] David: consider for yourself the case where [F : X --> X'] is identity ([X = X']) and (separately) the case where [α : G --> G ∘ F] is identity. the point is, you've already done the work to get this colim functor. because every map in [FC ⇓ D] can be written as a composition of two maps, one where the [F]-part is identity and one where the [α]-part is identity. and you've worked both of those cases out already. *)ModuleImport LaxCommaCategory.Include LaxComma.CoreParts.LaxCommaCategoryParts.Sectionlax_comma_category_parts.Context `{Funext}.VariablesAB : PreCategory.VariableS : Pseudofunctor A.VariableT : Pseudofunctor B.Context `{forallab, IsHSet (Functor (S a) (T b))}.Local Notationobject := (@object _ A B S T).Local Notationmorphism := (@morphism _ A B S T).Local Notationcompose := (@compose _ A B S T).Local Notationidentity := (@identity _ A B S T).Local Ltact_do_work :=
repeatmatch goal with
| _ => reflexivity
| [ |- context[components_of ?T^-1?x] ]
=> progresschange (T^-1 x) with ((T x)^-1)
| [ |- context[?F _1 ?m^-1] ]
=> progresschange (F _1 m^-1) with ((F _1 m)^-1)
| _ => progressrepeat iso_collapse_inverse_right'
end.Local Ltact_start :=
simplin *;
repeatmatch goal with
| [ H : ?x = _ |- _ ] => rewrite H; clear H; tryclear x
end;
path_natural_transformation;
simplin *;
rewrite !Category.Core.left_identity, !Category.Core.right_identity;
rewrite !composition_of.Local Ltact :=
t_start;
rewrite <- !Category.Core.associativity;
(** A reflective simplifier would be really useful here... *)repeatmatch goal with
| _ => progress t_do_work
| [ |- context[components_of ?T?x] ]
=> simplrewrite <- !(commutes_pT_F T)
| [ |- context[components_of ?T?x] ]
=> simplrewrite <- !(commutes T)
| _ => iso_move_inverse
end.(** Ugh. The following code constructs the type of the helper lemma:<< Lemma associativity x1 x2 x3 x4 (m1 : morphism x1 x2) (m2 : morphism x2 x3) (m3 : morphism x3 x4) : compose (compose m3 m2) m1 = compose m3 (compose m2 m1). Proof. exact (@path_morphism' _ _ (compose (compose m3 m2) m1) (compose m3 (compose m2 m1)) (Category.Core.associativity _ _ _ _ _ _ _ _) (Category.Core.associativity _ _ _ _ _ _ _ _) _). simpl in *. repeat match goal with | [ |- context[@morphism_inverse _ _ _ _ (@isisomorphism_isomorphic _ _ _ (Category.Morphisms.idtoiso ?C0 (ap (p_morphism_of ?F (s:=_) (d:=_)) (Category.Core.associativity ?C ?x1 ?x2 ?x3 ?x4 ?m1 ?m2 ?m3))))] ] => generalize (@p_composition_of_coherent_inverse_for_rewrite _ C F x1 x2 x3 x4 m1 m2 m3); generalize (Category.Morphisms.idtoiso C0 (ap (p_morphism_of F (s:=_) (d:=_)) (Category.Core.associativity C x1 x2 x3 x4 m1 m2 m3))) | [ |- context[Category.Morphisms.idtoiso ?C0 (ap (p_morphism_of ?F (s:=_) (d:=_)) (Category.Core.associativity ?C ?x1 ?x2 ?x3 ?x4 ?m1 ?m2 ?m3))] ] => generalize (@p_composition_of_coherent_for_rewrite _ C F x1 x2 x3 x4 m1 m2 m3); generalize (Category.Morphisms.idtoiso C0 (ap (p_morphism_of F (s:=_) (d:=_)) (Category.Core.associativity C x1 x2 x3 x4 m1 m2 m3))) end. simpl. destruct_head morphism. destruct_head object. simpl in *. repeat match goal with | [ |- context[p_composition_of ?F ?x ?y ?z ?m1 ?m2] ] => generalize dependent (p_composition_of F x y z m1 m2) | [ |- context[p_identity_of ?F ?x] ] => generalize dependent (p_identity_of F x) | [ |- context[p_morphism_of ?F ?x] ] => generalize dependent (p_morphism_of F x) | [ |- context[p_object_of ?F ?x] ] => generalize dependent (p_object_of F x) end. simpl. clear. repeat (let H := fresh "x" in intro H). repeat match goal with H : _ |- _ => revert H end. intro.>>*)
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x, x0: PreCategory x1: Functor x0 x x2, x3: PreCategory x4: Functor x3 x2 x5, x6: PreCategory x7: Functor x6 x5 x8, x9: PreCategory x10: Functor x9 x8 x11: Functor x9 x6 x12: Functor x9 x3 x13: Functor x0 x6 x14: Functor x9 x6 x15: Functor x8 x5 x16: Functor x x5 x17: Functor x9 x0 x18: Functor x8 x x19: NaturalTransformation (x18 o x10) (x1 o x17) x20: Functor x0 x3 x21: Functor x x2 x22: NaturalTransformation (x21 o x1) (x4 o x20) x23: Functor x8 x2 x24: Functor x3 x6 x25: Functor x2 x5 x26: NaturalTransformation (x25 o x4) (x7 o x24) x27: Functor x8 x5 x28: x27 <~=~> (x25 o x23)%functor x29: x23 <~=~> (x21 o x18)%functor x30: x16 <~=~> (x25 o x21)%functor x31: x15 <~=~> (x16 o x18)%functor x32: x14 <~=~> (x13 o x17)%functor x33: x13 <~=~> (x24 o x20)%functor x34: x12 <~=~> (x20 o x17)%functor x35: x11 <~=~> (x24 o x12)%functor x36: x14 <~=~> x11 x37: (x36 : Core.morphism (x9 -> x6) x14 x11) =
(x35^-1
o (x24 oL x34^-1
o (associator_1 x24 x20 x17
o ((x33 : Core.morphism (x0 -> x6) x13 (x24 o x20)%functor) oR x17
o (x32 : Core.morphism (x9 -> x6) x14 (x13 o x17)%functor)))))%natural_transformation x38: x15 <~=~> x27 x39: x38^-1 =
(x31^-1 o (x30^-1 oR x18) o inverse (associator_1 x25 x21 x18)
o (x25 oL (x29 : Core.morphism (x8 -> x2) x23 (x21 o x18)%functor))
o (x28 : Core.morphism (x8 -> x5) x27 (x25 o x23)%functor))%natural_transformation
(x7 oL (x36 : Core.morphism (x9 -> x6) x14 x11)
o (x7 oL x32^-1 o associator_1 x7 x13 x17
o (x7 oL x33^-1 o associator_1 x7 x24 x20
o (x26 oR x20) o associator_2 x25 x4 x20
o (x25 oL x22) o associator_1 x25 x21 x1
o ((x30
:
Core.morphism (x -> x5) x16
(x25 o x21)%functor) oR x1) oR x17)
o associator_2 x16 x1 x17 o (x16 oL x19)
o associator_1 x16 x18 x10
o ((x31
:
Core.morphism (x8 -> x5) x15
(x16 o x18)%functor) oR x10))
o (x38^-1 oR x10))%natural_transformation =
(x7 oL x35^-1 o associator_1 x7 x24 x12 o (x26 oR x12)
o associator_2 x25 x4 x12
o (x25
oL (x4 oL x34^-1 o associator_1 x4 x20 x17
o (x22 oR x17) o associator_2 x21 x1 x17
o (x21 oL x19) o associator_1 x21 x18 x10
o ((x29
:
Core.morphism (x8 -> x2) x23
(x21 o x18)%functor) oR x10)))
o associator_1 x25 x23 x10
o ((x28
:
Core.morphism (x8 -> x5) x27 (x25 o x23)%functor)
oR x10))%natural_transformation
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x, x0: PreCategory x1: Functor x0 x x2, x3: PreCategory x4: Functor x3 x2 x5, x6: PreCategory x7: Functor x6 x5 x8, x9: PreCategory x10: Functor x9 x8 x11: Functor x9 x6 x12: Functor x9 x3 x13: Functor x0 x6 x14: Functor x9 x6 x15: Functor x8 x5 x16: Functor x x5 x17: Functor x9 x0 x18: Functor x8 x x19: NaturalTransformation (x18 o x10) (x1 o x17) x20: Functor x0 x3 x21: Functor x x2 x22: NaturalTransformation (x21 o x1) (x4 o x20) x23: Functor x8 x2 x24: Functor x3 x6 x25: Functor x2 x5 x26: NaturalTransformation (x25 o x4) (x7 o x24) x27: Functor x8 x5 x28: x27 <~=~> (x25 o x23)%functor x29: x23 <~=~> (x21 o x18)%functor x30: x16 <~=~> (x25 o x21)%functor x31: x15 <~=~> (x16 o x18)%functor x32: x14 <~=~> (x13 o x17)%functor x33: x13 <~=~> (x24 o x20)%functor x34: x12 <~=~> (x20 o x17)%functor x35: x11 <~=~> (x24 o x12)%functor x36: x14 <~=~> x11 x37: (x36 : Core.morphism (x9 -> x6) x14 x11) =
(x35^-1
o (x24 oL x34^-1
o (associator_1 x24 x20 x17
o ((x33 : Core.morphism (x0 -> x6) x13 (x24 o x20)%functor) oR x17
o (x32 : Core.morphism (x9 -> x6) x14 (x13 o x17)%functor)))))%natural_transformation x38: x15 <~=~> x27 x39: x38^-1 =
(x31^-1 o (x30^-1 oR x18) o inverse (associator_1 x25 x21 x18)
o (x25 oL (x29 : Core.morphism (x8 -> x2) x23 (x21 o x18)%functor))
o (x28 : Core.morphism (x8 -> x5) x27 (x25 o x23)%functor))%natural_transformation
(x7 oL (x36 : Core.morphism (x9 -> x6) x14 x11)
o (x7 oL x32^-1 o associator_1 x7 x13 x17
o (x7 oL x33^-1 o associator_1 x7 x24 x20
o (x26 oR x20) o associator_2 x25 x4 x20
o (x25 oL x22) o associator_1 x25 x21 x1
o ((x30
:
Core.morphism (x -> x5) x16
(x25 o x21)%functor) oR x1) oR x17)
o associator_2 x16 x1 x17 o (x16 oL x19)
o associator_1 x16 x18 x10
o ((x31
:
Core.morphism (x8 -> x5) x15
(x16 o x18)%functor) oR x10))
o (x38^-1 oR x10))%natural_transformation =
(x7 oL x35^-1 o associator_1 x7 x24 x12 o (x26 oR x12)
o associator_2 x25 x4 x12
o (x25
oL (x4 oL x34^-1 o associator_1 x4 x20 x17
o (x22 oR x17) o associator_2 x21 x1 x17
o (x21 oL x19) o associator_1 x21 x18 x10
o ((x29
:
Core.morphism (x8 -> x2) x23
(x21 o x18)%functor) oR x10)))
o associator_1 x25 x23 x10
o ((x28
:
Core.morphism (x8 -> x5) x27 (x25 o x23)%functor)
oR x10))%natural_transformation
t. (* 18.647s *)Qed.
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x1, x2, x3, x4: object m1: morphism x1 x2 m2: morphism x2 x3 m3: morphism x3 x4
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x1, x2, x3, x4: object m1: morphism x1 x2 m2: morphism x2 x3 m3: morphism x3 x4
(f x4
oL Category.Morphisms.idtoiso (S (a x1) -> S (a x4))
(ap (p_morphism_of S)
(Core.associativity A (a x1) (a x2) (a x3)
(a x4) (g m1) (g m2) (g m3)))
o p (compose (compose m3 m2) m1)
o ((Category.Morphisms.idtoiso (T (b x1) -> T (b x4))
(ap (p_morphism_of T)
(Core.associativity B (b x1) (b x2) (b x3)
(b x4) (h m1) (h m2) (h m3))))^-1 oR
f x1))%natural_transformation =
p (compose m3 (compose m2 m1))
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x1, x2, x3, x4: object m1: morphism x1 x2 m2: morphism x2 x3 m3: morphism x3 x4
(f x4
oL Category.Morphisms.idtoiso (S (a x1) -> S (a x4))
(ap (p_morphism_of S)
(Core.associativity A (a x1) (a x2) (a x3)
(a x4) (g m1) (g m2) (g m3)))
o (f x4
oL (p_composition_of S (a x1) (a x2) (a x4)
(g m3 o g m2) (g m1))^-1
o associator_1 (f x4)
(p_morphism_of S (g m3 o g m2))
(p_morphism_of S (g m1))
o (f x4
oL (p_composition_of S (a x2) (a x3) (a x4)
(g m3) (g m2))^-1
o associator_1 (f x4) (p_morphism_of S (g m3))
(p_morphism_of S (g m2))
o (p m3 oR p_morphism_of S (g m2))
o associator_2 (p_morphism_of T (h m3)) (f x3)
(p_morphism_of S (g m2))
o (p_morphism_of T (h m3) oL p m2)
o associator_1 (p_morphism_of T (h m3))
(p_morphism_of T (h m2)) (f x2)
o (p_composition_of T (b x2) (b x3) (b x4)
(h m3) (h m2) oR f x2)
oR p_morphism_of S (g m1))
o associator_2 (p_morphism_of T (h m3 o h m2))
(f x2) (p_morphism_of S (g m1))
o (p_morphism_of T (h m3 o h m2) oL p m1)
o associator_1 (p_morphism_of T (h m3 o h m2))
(p_morphism_of T (h m1)) (f x1)
o (p_composition_of T (b x1) (b x2) (b x4)
(h m3 o h m2) (h m1) oR f x1))
o ((Category.Morphisms.idtoiso (T (b x1) -> T (b x4))
(ap (p_morphism_of T)
(Core.associativity B (b x1) (b x2) (b x3)
(b x4) (h m1) (h m2) (h m3))))^-1 oR
f x1))%natural_transformation =
(f x4
oL (p_composition_of S (a x1) (a x3) (a x4) (g m3)
(g m2 o g m1))^-1
o associator_1 (f x4) (p_morphism_of S (g m3))
(p_morphism_of S (g m2 o g m1))
o (p m3 oR p_morphism_of S (g m2 o g m1))
o associator_2 (p_morphism_of T (h m3)) (f x3)
(p_morphism_of S (g m2 o g m1))
o (p_morphism_of T (h m3)
oL (f x3
oL (p_composition_of S (a x1) (a x2) (a x3)
(g m2) (g m1))^-1
o associator_1 (f x3) (p_morphism_of S (g m2))
(p_morphism_of S (g m1))
o (p m2 oR p_morphism_of S (g m1))
o associator_2 (p_morphism_of T (h m2)) (f x2)
(p_morphism_of S (g m1))
o (p_morphism_of T (h m2) oL p m1)
o associator_1 (p_morphism_of T (h m2))
(p_morphism_of T (h m1)) (f x1)
o (p_composition_of T (b x1) (b x2) (b x3)
(h m2) (h m1) oR f x1)))
o associator_1 (p_morphism_of T (h m3))
(p_morphism_of T (h m2 o h m1)) (f x1)
o (p_composition_of T (b x1) (b x3) (b x4) (h m3)
(h m2 o h m1) oR f x1))%natural_transformation
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x1, x2, x3, x4: object m1: morphism x1 x2 m2: morphism x2 x3 m3: morphism x3 x4
Category.Morphisms.idtoiso (S (a x1) -> S (a x4))
(ap (p_morphism_of S)
(Core.associativity A (a x1) (a x2) (a x3) (a x4)
(g m1) (g m2) (g m3))) =
((p_composition_of S (a x1) (a x3) (a x4) (g m3)
(g m2 o g m1))^-1
o (p_morphism_of S (g m3)
oL (p_composition_of S (a x1) (a x2) (a x3) (g m2)
(g m1))^-1
o (associator_1 (p_morphism_of S (g m3))
(p_morphism_of S (g m2))
(p_morphism_of S (g m1))
o (p_composition_of S (a x2) (a x3) (a x4)
(g m3) (g m2) oR p_morphism_of S (g m1)
o p_composition_of S (a x1) (a x2) (a x4)
(g m3 o g m2) (g m1)))))%natural_transformation
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x1, x2, x3, x4: object m1: morphism x1 x2 m2: morphism x2 x3 m3: morphism x3 x4
(Category.Morphisms.idtoiso (T (b x1) -> T (b x4))
(ap (p_morphism_of T)
(Core.associativity B (b x1) (b x2) (b x3)
(b x4) (h m1) (h m2) (h m3))))^-1 =
((p_composition_of T (b x1) (b x2) (b x4)
(h m3 o h m2) (h m1))^-1
o ((p_composition_of T (b x2) (b x3) (b x4) (h m3)
(h m2))^-1 oR p_morphism_of T (h m1))
o inverse
(associator_1 (p_morphism_of T (h m3))
(p_morphism_of T (h m2))
(p_morphism_of T (h m1)))
o (p_morphism_of T (h m3)
oL p_composition_of T (b x1) (b x2) (b x3) (h m2)
(h m1))
o p_composition_of T (b x1) (b x3) (b x4) (h m3)
(h m2 o h m1))%natural_transformation
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x1, x2, x3, x4: object m1: morphism x1 x2 m2: morphism x2 x3 m3: morphism x3 x4
Category.Morphisms.idtoiso (S (a x1) -> S (a x4))
(ap (p_morphism_of S)
(Core.associativity A (a x1) (a x2) (a x3) (a x4)
(g m1) (g m2) (g m3))) =
((p_composition_of S (a x1) (a x3) (a x4) (g m3)
(g m2 o g m1))^-1
o (p_morphism_of S (g m3)
oL (p_composition_of S (a x1) (a x2) (a x3) (g m2)
(g m1))^-1
o (associator_1 (p_morphism_of S (g m3))
(p_morphism_of S (g m2))
(p_morphism_of S (g m1))
o (p_composition_of S (a x2) (a x3) (a x4)
(g m3) (g m2) oR p_morphism_of S (g m1)
o p_composition_of S (a x1) (a x2) (a x4)
(g m3 o g m2) (g m1)))))%natural_transformation
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x1, x2, x3, x4: object m1: morphism x1 x2 m2: morphism x2 x3 m3: morphism x3 x4
(Category.Morphisms.idtoiso (T (b x1) -> T (b x4))
(ap (p_morphism_of T)
(Core.associativity B (b x1) (b x2) (b x3)
(b x4) (h m1) (h m2) (h m3))))^-1 =
((p_composition_of T (b x1) (b x2) (b x4)
(h m3 o h m2) (h m1))^-1
o ((p_composition_of T (b x2) (b x3) (b x4) (h m3)
(h m2))^-1 oR p_morphism_of T (h m1))
o inverse
(associator_1 (p_morphism_of T (h m3))
(p_morphism_of T (h m2))
(p_morphism_of T (h m1)))
o (p_morphism_of T (h m3)
oL p_composition_of T (b x1) (b x2) (b x3) (h m2)
(h m1))
o p_composition_of T (b x1) (b x3) (b x4) (h m3)
(h m2 o h m1))%natural_transformation
exact (p_composition_of_coherent_inverse_for_rewrite _ _ _ _ _ _ _ _).Defined.(** Ugh. To construct the type of this lemma, the code is:<<Lemma left_identity (s d : object) (m : morphism s d) : compose (identity _) m = m. Proof. exact (@path_morphism' _ _ (compose (identity _) m) m (Category.Core.left_identity _ _ _ _) (Category.Core.left_identity _ _ _ _) _). simpl in *. repeat match goal with | [ |- context[@morphism_inverse _ _ _ _ (@isisomorphism_isomorphic _ _ _ (Category.Morphisms.idtoiso ?C0 (ap (p_morphism_of ?F (s:=_) (d:=_)) (Category.Core.left_identity ?C ?x ?y ?f))))] ] => generalize (@p_left_identity_of_coherent_inverse_for_rewrite _ C F x y f); generalize (Category.Morphisms.idtoiso C0 (ap (p_morphism_of F (s:=_) (d:=_)) (Category.Core.left_identity C x y f))) | [ |- context[Category.Morphisms.idtoiso ?C0 (ap (p_morphism_of ?F (s:=_) (d:=_)) (Category.Core.left_identity ?C ?x ?y ?f))] ] => generalize (@p_left_identity_of_coherent_for_rewrite _ C F x y f); generalize (Category.Morphisms.idtoiso C0 (ap (p_morphism_of F (s:=_) (d:=_)) (Category.Core.left_identity C x y f))) end. simpl. destruct_head morphism. destruct_head object. simpl in *. repeat match goal with | [ |- context[p_composition_of ?F ?x ?y ?z ?m1 ?m2] ] => generalize dependent (p_composition_of F x y z m1 m2) | [ |- context[p_identity_of ?F ?x] ] => generalize dependent (p_identity_of F x) | [ |- context[p_morphism_of ?F ?x] ] => generalize dependent (p_morphism_of F x) | [ |- context[p_object_of ?F ?x] ] => generalize dependent (p_object_of F x) end. simpl. clear. repeat (let H := fresh "x" in intro H). repeat match goal with H : _ |- _ => revert H end. intro.>>*)
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x, x0: PreCategory x1: Functor x0 x x2, x3: PreCategory x4: Functor x3 x2 x5, x6: Functor x3 x0 x7: Functor x2 x x8: NaturalTransformation (x7 o x4) (x1 o x6) x9: Functor x2 x x10: Functor x0 x0 x11: Functor x x x12: x11 <~=~> 1%functor x13: x10 <~=~> 1%functor x14: x9 <~=~> (x11 o x7)%functor x15: x5 <~=~> (x10 o x6)%functor x16: x5 <~=~> x6 x17: (x16 : Core.morphism (x3 -> x0) x5 x6) =
(left_identity_natural_transformation_1 x6
o ((x13 : Core.morphism (x0 -> x0) x10 1%functor) oR x6
o (x15 : Core.morphism (x3 -> x0) x5 (x10 o x6)%functor)))%natural_transformation x18: x9 <~=~> x7 x19: x18^-1 =
(x14^-1 o (x12^-1 oR x7)
o inverse (left_identity_natural_transformation_1 x7))%natural_transformation
(x1 oL (x16 : Core.morphism (x3 -> x0) x5 x6)
o (x1 oL x15^-1 o associator_1 x1 x10 x6
o (x1 oL x13^-1
o right_identity_natural_transformation_2 x1
o left_identity_natural_transformation_1 x1
o ((x12 : Core.morphism (x -> x) x11 1%functor)
oR x1) oR x6) o associator_2 x11 x1 x6
o (x11 oL x8) o associator_1 x11 x7 x4
o ((x14
:
Core.morphism (x2 -> x) x9 (x11 o x7)%functor)
oR x4)) o (x18^-1 oR x4))%natural_transformation =
x8
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x, x0: PreCategory x1: Functor x0 x x2, x3: PreCategory x4: Functor x3 x2 x5, x6: Functor x3 x0 x7: Functor x2 x x8: NaturalTransformation (x7 o x4) (x1 o x6) x9: Functor x2 x x10: Functor x0 x0 x11: Functor x x x12: x11 <~=~> 1%functor x13: x10 <~=~> 1%functor x14: x9 <~=~> (x11 o x7)%functor x15: x5 <~=~> (x10 o x6)%functor x16: x5 <~=~> x6 x17: (x16 : Core.morphism (x3 -> x0) x5 x6) =
(left_identity_natural_transformation_1 x6
o ((x13 : Core.morphism (x0 -> x0) x10 1%functor) oR x6
o (x15 : Core.morphism (x3 -> x0) x5 (x10 o x6)%functor)))%natural_transformation x18: x9 <~=~> x7 x19: x18^-1 =
(x14^-1 o (x12^-1 oR x7)
o inverse (left_identity_natural_transformation_1 x7))%natural_transformation
(x1 oL (x16 : Core.morphism (x3 -> x0) x5 x6)
o (x1 oL x15^-1 o associator_1 x1 x10 x6
o (x1 oL x13^-1
o right_identity_natural_transformation_2 x1
o left_identity_natural_transformation_1 x1
o ((x12 : Core.morphism (x -> x) x11 1%functor)
oR x1) oR x6) o associator_2 x11 x1 x6
o (x11 oL x8) o associator_1 x11 x7 x4
o ((x14
:
Core.morphism (x2 -> x) x9 (x11 o x7)%functor)
oR x4)) o (x18^-1 oR x4))%natural_transformation =
x8
t. (* 3.959 s *)Qed.
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
compose (identity d) m = m
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
compose (identity d) m = m
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
(f d
oL Category.Morphisms.idtoiso (S (a s) -> S (a d))
(ap (p_morphism_of S)
(Core.left_identity A (a s) (a d) (g m)))
o p (compose (identity d) m)
o ((Category.Morphisms.idtoiso (T (b s) -> T (b d))
(ap (p_morphism_of T)
(Core.left_identity B (b s) (b d) (h m))))^-1
oR f s))%natural_transformation = p m
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
(f d
oL Category.Morphisms.idtoiso (S (a s) -> S (a d))
(ap (p_morphism_of S)
(Core.left_identity A (a s) (a d) (g m)))
o (f d
oL (p_composition_of S (a s) (a d) (a d) 1 (g m))^-1
o associator_1 (f d) (p_morphism_of S 1)
(p_morphism_of S (g m))
o (f d oL (p_identity_of S (a d))^-1
o right_identity_natural_transformation_2 (f d)
o left_identity_natural_transformation_1 (f d)
o (p_identity_of T (b d) oR f d)
oR p_morphism_of S (g m))
o associator_2 (p_morphism_of T 1) (f d)
(p_morphism_of S (g m))
o (p_morphism_of T 1 oL p m)
o associator_1 (p_morphism_of T 1)
(p_morphism_of T (h m)) (f s)
o (p_composition_of T (b s) (b d) (b d) 1 (h m)
oR f s))
o ((Category.Morphisms.idtoiso (T (b s) -> T (b d))
(ap (p_morphism_of T)
(Core.left_identity B (b s) (b d) (h m))))^-1
oR f s))%natural_transformation = p m
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
Category.Morphisms.idtoiso (S (a s) -> S (a d))
(ap (p_morphism_of S)
(Core.left_identity A (a s) (a d) (g m))) =
(left_identity_natural_transformation_1
(p_morphism_of S (g m))
o (p_identity_of S (a d) oR p_morphism_of S (g m)
o p_composition_of S (a s) (a d) (a d) 1 (g m)))%natural_transformation
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
(Category.Morphisms.idtoiso (T (b s) -> T (b d))
(ap (p_morphism_of T)
(Core.left_identity B (b s) (b d) (h m))))^-1 =
((p_composition_of T (b s) (b d) (b d) 1 (h m))^-1
o ((p_identity_of T (b d))^-1
oR p_morphism_of T (h m))
o inverse
(left_identity_natural_transformation_1
(p_morphism_of T (h m))))%natural_transformation
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
Category.Morphisms.idtoiso (S (a s) -> S (a d))
(ap (p_morphism_of S)
(Core.left_identity A (a s) (a d) (g m))) =
(left_identity_natural_transformation_1
(p_morphism_of S (g m))
o (p_identity_of S (a d) oR p_morphism_of S (g m)
o p_composition_of S (a s) (a d) (a d) 1 (g m)))%natural_transformation
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
(Category.Morphisms.idtoiso (T (b s) -> T (b d))
(ap (p_morphism_of T)
(Core.left_identity B (b s) (b d) (h m))))^-1 =
((p_composition_of T (b s) (b d) (b d) 1 (h m))^-1
o ((p_identity_of T (b d))^-1
oR p_morphism_of T (h m))
o inverse
(left_identity_natural_transformation_1
(p_morphism_of T (h m))))%natural_transformation
exact (p_left_identity_of_coherent_inverse_for_rewrite _ _ _ _).Defined.(** To generate the type of this helper lemma, we used:<< Lemma right_identity (s d : object) (m : morphism s d) : compose m (identity _) = m. Proof. exact (@path_morphism' _ _ (compose m (identity _)) m (Category.Core.right_identity _ _ _ _) (Category.Core.right_identity _ _ _ _) _). simpl in *. repeat match goal with | [ |- context[@morphism_inverse _ _ _ _ (@isisomorphism_isomorphic _ _ _ (Category.Morphisms.idtoiso ?C0 (ap (p_morphism_of ?F (s:=_) (d:=_)) (Category.Core.right_identity ?C ?x ?y ?f))))] ] => generalize (@p_right_identity_of_coherent_inverse_for_rewrite _ C F x y f); generalize (Category.Morphisms.idtoiso C0 (ap (p_morphism_of F (s:=_) (d:=_)) (Category.Core.right_identity C x y f))) | [ |- context[Category.Morphisms.idtoiso ?C0 (ap (p_morphism_of ?F (s:=_) (d:=_)) (Category.Core.right_identity ?C ?x ?y ?f))] ] => generalize (@p_right_identity_of_coherent_for_rewrite _ C F x y f); generalize (Category.Morphisms.idtoiso C0 (ap (p_morphism_of F (s:=_) (d:=_)) (Category.Core.right_identity C x y f))) end. simpl. destruct_head morphism. destruct_head object. simpl in *. repeat match goal with | [ |- context[p_composition_of ?F ?x ?y ?z ?m1 ?m2] ] => generalize dependent (p_composition_of F x y z m1 m2) | [ |- context[p_identity_of ?F ?x] ] => generalize dependent (p_identity_of F x) | [ |- context[p_morphism_of ?F ?x] ] => generalize dependent (p_morphism_of F x) | [ |- context[p_object_of ?F ?x] ] => generalize dependent (p_object_of F x) end. simpl. clear. repeat (let H := fresh "x" in intro H). repeat match goal with H : _ |- _ => revert H end. intro.>>*)
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x, x0: PreCategory x1: Functor x0 x x2, x3: PreCategory x4: Functor x3 x2 x5, x6: Functor x3 x0 x7: Functor x2 x x8: NaturalTransformation (x7 o x4) (x1 o x6) x9: Functor x2 x x10: Functor x3 x3 x11: Functor x2 x2 x12: x11 <~=~> 1%functor x13: x10 <~=~> 1%functor x14: x9 <~=~> (x7 o x11)%functor x15: x5 <~=~> (x6 o x10)%functor x16: x5 <~=~> x6 x17: (x16 : Core.morphism (x3 -> x0) x5 x6) =
(right_identity_natural_transformation_1 x6
o (x6 oL (x13 : Core.morphism (x3 -> x3) x10 1%functor)
o (x15 : Core.morphism (x3 -> x0) x5 (x6 o x10)%functor)))%natural_transformation x18: x9 <~=~> x7 x19: x18^-1 =
(x14^-1 o (x7 oL x12^-1)
o inverse (right_identity_natural_transformation_1 x7))%natural_transformation
(x1 oL (x16 : Core.morphism (x3 -> x0) x5 x6)
o (x1 oL x15^-1 o associator_1 x1 x6 x10
o (x8 oR x10) o associator_2 x7 x4 x10
o (x7
oL (x4 oL x13^-1
o right_identity_natural_transformation_2
x4
o left_identity_natural_transformation_1 x4
o ((x12
:
Core.morphism (x2 -> x2) x11 1%functor)
oR x4))) o associator_1 x7 x11 x4
o ((x14
:
Core.morphism (x2 -> x) x9 (x7 o x11)%functor)
oR x4)) o (x18^-1 oR x4))%natural_transformation =
x8
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) x, x0: PreCategory x1: Functor x0 x x2, x3: PreCategory x4: Functor x3 x2 x5, x6: Functor x3 x0 x7: Functor x2 x x8: NaturalTransformation (x7 o x4) (x1 o x6) x9: Functor x2 x x10: Functor x3 x3 x11: Functor x2 x2 x12: x11 <~=~> 1%functor x13: x10 <~=~> 1%functor x14: x9 <~=~> (x7 o x11)%functor x15: x5 <~=~> (x6 o x10)%functor x16: x5 <~=~> x6 x17: (x16 : Core.morphism (x3 -> x0) x5 x6) =
(right_identity_natural_transformation_1 x6
o (x6 oL (x13 : Core.morphism (x3 -> x3) x10 1%functor)
o (x15 : Core.morphism (x3 -> x0) x5 (x6 o x10)%functor)))%natural_transformation x18: x9 <~=~> x7 x19: x18^-1 =
(x14^-1 o (x7 oL x12^-1)
o inverse (right_identity_natural_transformation_1 x7))%natural_transformation
(x1 oL (x16 : Core.morphism (x3 -> x0) x5 x6)
o (x1 oL x15^-1 o associator_1 x1 x6 x10
o (x8 oR x10) o associator_2 x7 x4 x10
o (x7
oL (x4 oL x13^-1
o right_identity_natural_transformation_2
x4
o left_identity_natural_transformation_1 x4
o ((x12
:
Core.morphism (x2 -> x2) x11 1%functor)
oR x4))) o associator_1 x7 x11 x4
o ((x14
:
Core.morphism (x2 -> x) x9 (x7 o x11)%functor)
oR x4)) o (x18^-1 oR x4))%natural_transformation =
x8
t. (* 3.26 s *)Qed.
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
compose m (identity s) = m
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
compose m (identity s) = m
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
(f d
oL Category.Morphisms.idtoiso (S (a s) -> S (a d))
(ap (p_morphism_of S)
(Core.right_identity A (a s) (a d) (g m)))
o p (compose m (identity s))
o ((Category.Morphisms.idtoiso (T (b s) -> T (b d))
(ap (p_morphism_of T)
(Core.right_identity B (b s) (b d) (h m))))^-1
oR f s))%natural_transformation = p m
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
(f d
oL Category.Morphisms.idtoiso (S (a s) -> S (a d))
(ap (p_morphism_of S)
(Core.right_identity A (a s) (a d) (g m)))
o (f d
oL (p_composition_of S (a s) (a s) (a d) (g m) 1)^-1
o associator_1 (f d) (p_morphism_of S (g m))
(p_morphism_of S 1)
o (p m oR p_morphism_of S 1)
o associator_2 (p_morphism_of T (h m)) (f s)
(p_morphism_of S 1)
o (p_morphism_of T (h m)
oL (f s oL (p_identity_of S (a s))^-1
o right_identity_natural_transformation_2
(f s)
o left_identity_natural_transformation_1
(f s) o (p_identity_of T (b s) oR f s)))
o associator_1 (p_morphism_of T (h m))
(p_morphism_of T 1) (f s)
o (p_composition_of T (b s) (b s) (b d) (h m) 1
oR f s))
o ((Category.Morphisms.idtoiso (T (b s) -> T (b d))
(ap (p_morphism_of T)
(Core.right_identity B (b s) (b d) (h m))))^-1
oR f s))%natural_transformation = p m
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
Category.Morphisms.idtoiso (S (a s) -> S (a d))
(ap (p_morphism_of S)
(Core.right_identity A (a s) (a d) (g m))) =
(right_identity_natural_transformation_1
(p_morphism_of S (g m))
o (p_morphism_of S (g m) oL p_identity_of S (a s)
o p_composition_of S (a s) (a s) (a d) (g m) 1))%natural_transformation
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
(Category.Morphisms.idtoiso (T (b s) -> T (b d))
(ap (p_morphism_of T)
(Core.right_identity B (b s) (b d) (h m))))^-1 =
((p_composition_of T (b s) (b s) (b d) (h m) 1)^-1
o (p_morphism_of T (h m)
oL (p_identity_of T (b s))^-1)
o inverse
(right_identity_natural_transformation_1
(p_morphism_of T (h m))))%natural_transformation
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
Category.Morphisms.idtoiso (S (a s) -> S (a d))
(ap (p_morphism_of S)
(Core.right_identity A (a s) (a d) (g m))) =
(right_identity_natural_transformation_1
(p_morphism_of S (g m))
o (p_morphism_of S (g m) oL p_identity_of S (a s)
o p_composition_of S (a s) (a s) (a d) (g m) 1))%natural_transformation
H: Funext A, B: PreCategory S: Pseudofunctor A T: Pseudofunctor B H0: forall (a : A) (b : B),
IsHSet (Functor (S a) (T b)) s, d: object m: morphism s d
(Category.Morphisms.idtoiso (T (b s) -> T (b d))
(ap (p_morphism_of T)
(Core.right_identity B (b s) (b d) (h m))))^-1 =
((p_composition_of T (b s) (b s) (b d) (h m) 1)^-1
o (p_morphism_of T (h m)
oL (p_identity_of T (b s))^-1)
o inverse
(right_identity_natural_transformation_1
(p_morphism_of T (h m))))%natural_transformation