The Grothendieck construction
Given a functor F : C ⥤ Cat, the objects of grothendieck F
consist of dependent pairs (b, f), where b : C and f : F.obj c,
and a morphism (b, f) ⟶ (b', f') is a pair β : b ⟶ b' in C, and
φ : (F.map β).obj f ⟶ f'
Categories such as PresheafedSpace are in fact examples of this construction,
and it may be interesting to try to generalize some of the development there.
Implementation notes
Really we should treat Cat as a 2-category, and allow F to be a 2-functor.
There is also a closely related construction starting with G : Cᵒᵖ ⥤ Cat,
where morphisms consists again of β : b ⟶ b' and φ : f ⟶ (F.map (op β)).obj f'.
References
See also category_theory.functor.elements for the category of elements of functor F : C ⥤ Type.
- https://stacks.math.columbia.edu/tag/02XV
- https://ncatlab.org/nlab/show/Grothendieck+construction
The Grothendieck construction (often written as ∫ F in mathematics) for a functor F : C ⥤ Cat
gives a category whose
- objects
Xconsist ofX.base : CandX.fiber : F.obj base - morphisms
f : X ⟶ Yconsist ofbase : X.base ⟶ Y.baseandf.fiber : (F.map base).obj X.fiber ⟶ Y.fiber
A morphism in the Grothendieck category F : C ⥤ Cat consists of
base : X.base ⟶ Y.base and f.fiber : (F.map base).obj X.fiber ⟶ Y.fiber.
The identity morphism in the Grothendieck category.
Composition of morphisms in the Grothendieck category.
Equations
- category_theory.grothendieck.category_theory.category = {to_category_struct := {to_has_hom := {hom := λ (X Y : category_theory.grothendieck F), X.hom Y}, id := λ (X : category_theory.grothendieck F), X.id, comp := λ (X Y Z : category_theory.grothendieck F) (f : X ⟶ Y) (g : Y ⟶ Z), category_theory.grothendieck.comp f g}, id_comp' := _, comp_id' := _, assoc' := _}
The forgetful functor from grothendieck F to the source category.
Equations
- category_theory.grothendieck.forget F = {obj := λ (X : category_theory.grothendieck F), X.base, map := λ (X Y : category_theory.grothendieck F) (f : X ⟶ Y), f.base, map_id' := _, map_comp' := _}
The Grothendieck construction applied to a functor to Type
(thought of as a functor to Cat by realising a type as a discrete category)
is the same as the 'category of elements' construction.
Equations
- category_theory.grothendieck.grothendieck_Type_to_Cat G = {functor := {obj := λ (X : category_theory.grothendieck (G ⋙ category_theory.Type_to_Cat)), ⟨X.base, X.fiber⟩, map := λ (X Y : category_theory.grothendieck (G ⋙ category_theory.Type_to_Cat)) (f : X ⟶ Y), ⟨f.base, _⟩, map_id' := _, map_comp' := _}, inverse := {obj := λ (X : G.elements), {base := X.fst, fiber := X.snd}, map := λ (X Y : G.elements) (f : X ⟶ Y), {base := f.val, fiber := {down := {down := _}}}, map_id' := _, map_comp' := _}, unit_iso := category_theory.nat_iso.of_components (λ (X : category_theory.grothendieck (G ⋙ category_theory.Type_to_Cat)), X.cases_on (λ (X_base : C) (X_fiber : ↥((G ⋙ category_theory.Type_to_Cat).obj X_base)), category_theory.iso.refl ((𝟭 (category_theory.grothendieck (G ⋙ category_theory.Type_to_Cat))).obj {base := X_base, fiber := X_fiber}))) _, counit_iso := category_theory.nat_iso.of_components (λ (X : G.elements), sigma.cases_on X (λ (X_fst : C) (X_snd : G.obj X_fst), category_theory.iso.refl (({obj := λ (X : G.elements), {base := X.fst, fiber := X.snd}, map := λ (X Y : G.elements) (f : X ⟶ Y), {base := f.val, fiber := {down := {down := _}}}, map_id' := _, map_comp' := _} ⋙ {obj := λ (X : category_theory.grothendieck (G ⋙ category_theory.Type_to_Cat)), ⟨X.base, X.fiber⟩, map := λ (X Y : category_theory.grothendieck (G ⋙ category_theory.Type_to_Cat)) (f : X ⟶ Y), ⟨f.base, _⟩, map_id' := _, map_comp' := _}).obj ⟨X_fst, X_snd⟩))) _, functor_unit_iso_comp' := _}