|
1 | 1 | /-
|
2 | 2 | Copyright (c) 2020 Kim Morrison. All rights reserved.
|
3 | 3 | Released under Apache 2.0 license as described in the file LICENSE.
|
4 |
| -Authors: Kim Morrison |
| 4 | +Authors: Kim Morrison, Jakob von Raumer |
5 | 5 | -/
|
| 6 | +import Mathlib.CategoryTheory.Category.Cat.AsSmall |
6 | 7 | import Mathlib.CategoryTheory.Comma.StructuredArrow.Basic
|
7 | 8 | import Mathlib.CategoryTheory.IsConnected
|
8 | 9 | import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Terminal
|
9 | 10 | import Mathlib.CategoryTheory.Limits.Shapes.Types
|
| 11 | +import Mathlib.CategoryTheory.Limits.Shapes.Grothendieck |
10 | 12 | import Mathlib.CategoryTheory.Filtered.Basic
|
11 | 13 | import Mathlib.CategoryTheory.Limits.Yoneda
|
12 | 14 | import Mathlib.CategoryTheory.PUnit
|
@@ -42,6 +44,9 @@ From 3., we prove 1. directly in `final_of_colimit_comp_coyoneda_iso_pUnit`.
|
42 | 44 | Dually, we prove that if a functor `F : C ⥤ D` is initial, then any functor `G : D ⥤ E` has a
|
43 | 45 | limit if and only if `F ⋙ G` does, and these limits are isomorphic via `limit.pre G F`.
|
44 | 46 |
|
| 47 | +In the end of the file, we characterize the finality of some important induced functors on the |
| 48 | +(co)structured arrow category (`StructuredArrow.pre` and `CostructuredArrow.pre`) and on the |
| 49 | +Grothendieck construction (`Grothendieck.pre` and `Grothendieck.map`). |
45 | 50 |
|
46 | 51 | ## Naming
|
47 | 52 | There is some discrepancy in the literature about naming; some say 'cofinal' instead of 'final'.
|
@@ -1017,6 +1022,61 @@ instance Grothendieck.final_pre [hG : Final G] : (Grothendieck.pre F G).Final :=
|
1017 | 1022 | exact zigzag_prefunctor_obj_of_zigzag (Grothendieck.structuredArrowToStructuredArrowPre F G d f)
|
1018 | 1023 | (isPreconnected_zigzag (.mk gbi) (.mk gbj))
|
1019 | 1024 |
|
| 1025 | +open Limits |
| 1026 | + |
| 1027 | +/-- A natural transformation `α : F ⟶ G` between functors `F G : C ⥤ Cat` which is is final on each |
| 1028 | +fiber `(α.app X)` induces an equivalence of fiberwise colimits of `map α ⋙ H` and `H` for each |
| 1029 | +functor `H : Grothendieck G ⥤ Type`. -/ |
| 1030 | +def Grothendieck.fiberwiseColimitMapCompEquivalence {C : Type u₁} [Category.{v₁} C] |
| 1031 | + {F G : C ⥤ Cat.{v₂, u₂}} (α : F ⟶ G) [∀ X, Final (α.app X)] (H : Grothendieck G ⥤ Type u₂) : |
| 1032 | + fiberwiseColimit (map α ⋙ H) ≅ fiberwiseColimit H := |
| 1033 | + NatIso.ofComponents |
| 1034 | + (fun X => |
| 1035 | + HasColimit.isoOfNatIso ((Functor.associator _ _ _).symm ≪≫ |
| 1036 | + isoWhiskerRight (ιCompMap α X) H ≪≫ Functor.associator _ _ _) ≪≫ |
| 1037 | + Final.colimitIso (α.app X) (ι G X ⋙ H)) |
| 1038 | + (fun f => colimit.hom_ext <| fun d => by |
| 1039 | + simp only [map, Cat.comp_obj, comp_obj, ι_obj, fiberwiseColimit_obj, fiberwiseColimit_map, |
| 1040 | + ιNatTrans, ιCompMap, Iso.trans_hom, Category.assoc, ι_colimMap_assoc, NatTrans.comp_app, |
| 1041 | + whiskerRight_app, Functor.comp_map, Cat.eqToHom_app, map_id, Category.comp_id, |
| 1042 | + associator_hom_app, colimit.ι_pre_assoc, HasColimit.isoOfNatIso_ι_hom_assoc, Iso.symm_hom, |
| 1043 | + isoWhiskerRight_hom, associator_inv_app, NatIso.ofComponents_hom_app, Iso.refl_hom, |
| 1044 | + Final.ι_colimitIso_hom, Category.id_comp, Final.ι_colimitIso_hom_assoc, colimit.ι_pre] |
| 1045 | + have := Functor.congr_obj (α.naturality f) d |
| 1046 | + dsimp at this |
| 1047 | + congr |
| 1048 | + apply eqToHom_heq_id_dom) |
| 1049 | + |
| 1050 | +/-- This is the small version of the more general lemma `Grothendieck.final_map` below. -/ |
| 1051 | +private lemma Grothendieck.final_map_small {C : Type u₁} [SmallCategory C] {F G : C ⥤ Cat.{u₁, u₁}} |
| 1052 | + (α : F ⟶ G) [hα : ∀ X, Final (α.app X)] : Final (map α) := by |
| 1053 | + rw [final_iff_isIso_colimit_pre] |
| 1054 | + intro H |
| 1055 | + let i := (colimitFiberwiseColimitIso _).symm ≪≫ |
| 1056 | + HasColimit.isoOfNatIso (fiberwiseColimitMapCompEquivalence α H) ≪≫ colimitFiberwiseColimitIso _ |
| 1057 | + convert Iso.isIso_hom i |
| 1058 | + apply colimit.hom_ext |
| 1059 | + intro X |
| 1060 | + simp [i, fiberwiseColimitMapCompEquivalence] |
| 1061 | + |
| 1062 | +/-- The functor `Grothendieck.map α` for a natural transformation `α : F ⟶ G`, with |
| 1063 | +`F G : C ⥤ Cat`, is final if for each `X : C`, the functor `α.app X` is final. -/ |
| 1064 | +lemma Grothendieck.final_map {F G : C ⥤ Cat.{v₂, u₂}} (α : F ⟶ G) [hα : ∀ X, Final (α.app X)] : |
| 1065 | + Final (map α) := by |
| 1066 | + let sC : C ≌ AsSmall.{max u₁ u₂ v₁ v₂} C := AsSmall.equiv |
| 1067 | + let F' : AsSmall C ⥤ Cat := sC.inverse ⋙ F ⋙ Cat.asSmallFunctor.{max v₁ u₁ v₂ u₂} |
| 1068 | + let G' : AsSmall C ⥤ Cat := sC.inverse ⋙ G ⋙ Cat.asSmallFunctor.{max v₁ u₁ v₂ u₂} |
| 1069 | + let α' : F' ⟶ G' := whiskerLeft _ (whiskerRight α _) |
| 1070 | + have : ∀ X, Final (α'.app X) := fun X => |
| 1071 | + inferInstanceAs (AsSmall.equiv.inverse ⋙ _ ⋙ AsSmall.equiv.functor).Final |
| 1072 | + have hα' : (map α').Final := final_map_small _ |
| 1073 | + dsimp only [α', ← Equivalence.symm_functor] at hα' |
| 1074 | + have i := mapWhiskerLeftIsoConjPreMap sC.symm (whiskerRight α Cat.asSmallFunctor) |
| 1075 | + ≪≫ isoWhiskerLeft _ (isoWhiskerRight (mapWhiskerRightAsSmallFunctor α) _) |
| 1076 | + have := final_of_natIso i |
| 1077 | + rwa [← final_iff_equivalence_comp, ← final_iff_comp_equivalence, |
| 1078 | + ← final_iff_equivalence_comp, ← final_iff_comp_equivalence] at this |
| 1079 | + |
1020 | 1080 | end Grothendieck
|
1021 | 1081 |
|
1022 | 1082 | section Prod
|
|
0 commit comments