Documentation

Mathlib.CategoryTheory.Grothendieck

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'

Grothendieck.functor makes the Grothendieck construction into a functor from the functor category C ⥤ Cat to the over category Over C in the category of categories.

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'.

Notable constructions #

References #

See also CategoryTheory.Functor.Elements for the category of elements of functor F : C ⥤ Type.

structure CategoryTheory.Grothendieck {C : Type u} [Category.{v, u} C] (F : Functor C Cat) :
Type (max u u₂)

The Grothendieck construction (often written as ∫ F in mathematics) for a functor F : C ⥤ Cat gives a category whose

  • base : C

    The underlying object in C

  • fiber : (F.obj self.base)

    The object in the fiber of the base object.

Instances For
structure CategoryTheory.Grothendieck.Hom {C : Type u} [Category.{v, u} C] {F : Functor C Cat} (X Y : Grothendieck F) :
Type (max v v₂)

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.

  • base : X.base Y.base

    The morphism between base objects.

  • fiber : (F.map self.base).obj X.fiber Y.fiber

    The morphism from the pushforward to the source fiber object to the target fiber object.

Instances For
theorem CategoryTheory.Grothendieck.ext {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {X Y : Grothendieck F} (f g : X.Hom Y) (w_base : f.base = g.base) (w_fiber : CategoryStruct.comp (eqToHom ) f.fiber = g.fiber) :
f = g

The identity morphism in the Grothendieck category.

Equations
def CategoryTheory.Grothendieck.comp {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {X Y Z : Grothendieck F} (f : X.Hom Y) (g : Y.Hom Z) :
X.Hom Z

Composition of morphisms in the Grothendieck category.

Equations
  • One or more equations did not get rendered due to their size.
theorem CategoryTheory.Grothendieck.congr {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {X Y : Grothendieck F} {f g : X Y} (h : f = g) :
@[simp]
@[simp]
theorem CategoryTheory.Grothendieck.eqToHom_eq {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {X Y : Grothendieck F} (hF : X = Y) :
eqToHom hF = { base := eqToHom , fiber := eqToHom }

If F : C ⥤ Cat is a functor and t : c ⟶ d is a morphism in C, then transport maps each c-based element of Grothendieck F to a d-based element.

Equations
@[simp]
theorem CategoryTheory.Grothendieck.transport_fiber {C : Type u} [Category.{v, u} C] {F : Functor C Cat} (x : Grothendieck F) {c : C} (t : x.base c) :
(x.transport t).fiber = (F.map t).obj x.fiber
@[simp]
theorem CategoryTheory.Grothendieck.transport_base {C : Type u} [Category.{v, u} C] {F : Functor C Cat} (x : Grothendieck F) {c : C} (t : x.base c) :
(x.transport t).base = c
def CategoryTheory.Grothendieck.toTransport {C : Type u} [Category.{v, u} C] {F : Functor C Cat} (x : Grothendieck F) {c : C} (t : x.base c) :

If F : C ⥤ Cat is a functor and t : c ⟶ d is a morphism in C, then transport maps each c-based element x of Grothendieck F to a d-based element x.transport t.

toTransport is the morphism x ⟶ x.transport t induced by t and the identity on fibers.

Equations
@[simp]
theorem CategoryTheory.Grothendieck.toTransport_base {C : Type u} [Category.{v, u} C] {F : Functor C Cat} (x : Grothendieck F) {c : C} (t : x.base c) :
def CategoryTheory.Grothendieck.isoMk {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {X Y : Grothendieck F} (e₁ : X.base Y.base) (e₂ : (F.map e₁.hom).obj X.fiber Y.fiber) :
X Y

Construct an isomorphism in a Grothendieck construction from isomorphisms in its base and fiber.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Grothendieck.isoMk_inv_base {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {X Y : Grothendieck F} (e₁ : X.base Y.base) (e₂ : (F.map e₁.hom).obj X.fiber Y.fiber) :
(isoMk e₁ e₂).inv.base = e₁.inv
@[simp]
theorem CategoryTheory.Grothendieck.isoMk_hom_fiber {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {X Y : Grothendieck F} (e₁ : X.base Y.base) (e₂ : (F.map e₁.hom).obj X.fiber Y.fiber) :
(isoMk e₁ e₂).hom.fiber = e₂.hom
@[simp]
theorem CategoryTheory.Grothendieck.isoMk_inv_fiber {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {X Y : Grothendieck F} (e₁ : X.base Y.base) (e₂ : (F.map e₁.hom).obj X.fiber Y.fiber) :
(isoMk e₁ e₂).inv.fiber = CategoryStruct.comp ((F.map e₁.inv).map e₂.inv) (eqToHom )
@[simp]
theorem CategoryTheory.Grothendieck.isoMk_hom_base {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {X Y : Grothendieck F} (e₁ : X.base Y.base) (e₂ : (F.map e₁.hom).obj X.fiber Y.fiber) :
(isoMk e₁ e₂).hom.base = e₁.hom
def CategoryTheory.Grothendieck.transportIso {C : Type u} [Category.{v, u} C] {F : Functor C Cat} (x : Grothendieck F) {c : C} (α : x.base c) :

If F : C ⥤ Cat and x : Grothendieck F, then every C-isomorphism α : x.base ≅ c induces an isomorphism between x and its transport along α

Equations
@[simp]
@[simp]

The forgetful functor from Grothendieck F to the source category.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Grothendieck.forget_map {C : Type u} [Category.{v, u} C] (F : Functor C Cat) {X✝ Y✝ : Grothendieck F} (f : X✝ Y✝) :
(forget F).map f = f.base

The Grothendieck construction is functorial: a natural transformation α : F ⟶ G induces a functor Grothendieck.map : Grothendieck F ⥤ Grothendieck G.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Grothendieck.map_map_base {C : Type u} [Category.{v, u} C] {F G : Functor C Cat} (α : F G) {X Y : Grothendieck F} (f : X Y) :
((map α).map f).base = f.base
@[simp]
theorem CategoryTheory.Grothendieck.map_obj_base {C : Type u} [Category.{v, u} C] {F G : Functor C Cat} (α : F G) (X : Grothendieck F) :
((map α).obj X).base = X.base
@[simp]
theorem CategoryTheory.Grothendieck.map_obj_fiber {C : Type u} [Category.{v, u} C] {F G : Functor C Cat} (α : F G) (X : Grothendieck F) :
((map α).obj X).fiber = (α.app X.base).obj X.fiber
@[simp]
theorem CategoryTheory.Grothendieck.map_map_fiber {C : Type u} [Category.{v, u} C] {F G : Functor C Cat} (α : F G) {X Y : Grothendieck F} (f : X Y) :
theorem CategoryTheory.Grothendieck.map_obj {C : Type u} [Category.{v, u} C] {F G : Functor C Cat} {α : F G} (X : Grothendieck F) :
(map α).obj X = { base := X.base, fiber := (α.app X.base).obj X.fiber }
theorem CategoryTheory.Grothendieck.map_map {C : Type u} [Category.{v, u} C] {F G : Functor C Cat} {α : F G} {X Y : Grothendieck F} {f : X Y} :
(map α).map f = { base := f.base, fiber := CategoryStruct.comp ((eqToHom ).app X.fiber) ((α.app Y.base).map f.fiber) }

The functor Grothendieck.map α : Grothendieck F ⥤ Grothendieck G lies over C.

Making the equality of functors into an isomorphism. Note: we should avoid equality of functors if possible, and we should prefer mapIdIso to map_id_eq whenever we can.

Equations
theorem CategoryTheory.Grothendieck.map_comp_eq {C : Type u} [Category.{v, u} C] {F G H : Functor C Cat} (α : F G) (β : G H) :
map (CategoryStruct.comp α β) = (map α).comp (map β)
def CategoryTheory.Grothendieck.mapCompIso {C : Type u} [Category.{v, u} C] {F G H : Functor C Cat} (α : F G) (β : G H) :

Making the equality of functors into an isomorphism. Note: we should avoid equality of functors if possible, and we should prefer map_comp_iso to map_comp_eq whenever we can.

Equations

The inverse functor to build the equivalence compAsSmallFunctorEquivalence.

Equations
  • One or more equations did not get rendered due to their size.

The functor to build the equivalence compAsSmallFunctorEquivalence.

Equations
  • One or more equations did not get rendered due to their size.

Taking the Grothendieck construction on F ⋙ asSmallFunctor, where asSmallFunctor : Cat ⥤ Cat is the functor which turns each category into a small category of a (potentiall) larger universe, is equivalent to the Grothendieck construction on F itself.

Equations
  • One or more equations did not get rendered due to their size.

Mapping a Grothendieck construction along the whiskering of any natural transformation α : F ⟶ G with the functor asSmallFunctor : Cat ⥤ Cat is naturally isomorphic to conjugating map α with the equivalence between Grothendieck (F ⋙ asSmallFunctor) and Grothendieck F.

Equations
  • One or more equations did not get rendered due to their size.

The Grothendieck construction as a functor from the functor category E ⥤ Cat to the over category Over E.

Equations
  • One or more equations did not get rendered due to their size.

Auxiliary definition for grothendieckTypeToCat, to speed up elaboration.

Equations
  • One or more equations did not get rendered due to their size.

Auxiliary definition for grothendieckTypeToCat, to speed up elaboration.

Equations
  • One or more equations did not get rendered due to their size.

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
  • One or more equations did not get rendered due to their size.

Applying a functor G : D ⥤ C to the base of the Grothendieck construction induces a functor Grothendieck (G ⋙ F) ⥤ Grothendieck F.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem CategoryTheory.Grothendieck.pre_obj_fiber {C : Type u} [Category.{v, u} C] {D : Type u₁} [Category.{v₁, u₁} D] (F : Functor C Cat) (G : Functor D C) (X : Grothendieck (G.comp F)) :
((pre F G).obj X).fiber = X.fiber
@[simp]
theorem CategoryTheory.Grothendieck.pre_map_base {C : Type u} [Category.{v, u} C] {D : Type u₁} [Category.{v₁, u₁} D] (F : Functor C Cat) (G : Functor D C) {X✝ Y✝ : Grothendieck (G.comp F)} (f : X✝ Y✝) :
((pre F G).map f).base = G.map f.base
@[simp]
theorem CategoryTheory.Grothendieck.pre_obj_base {C : Type u} [Category.{v, u} C] {D : Type u₁} [Category.{v₁, u₁} D] (F : Functor C Cat) (G : Functor D C) (X : Grothendieck (G.comp F)) :
((pre F G).obj X).base = G.obj X.base
@[simp]
theorem CategoryTheory.Grothendieck.pre_map_fiber {C : Type u} [Category.{v, u} C] {D : Type u₁} [Category.{v₁, u₁} D] (F : Functor C Cat) (G : Functor D C) {X✝ Y✝ : Grothendieck (G.comp F)} (f : X✝ Y✝) :
((pre F G).map f).fiber = f.fiber
def CategoryTheory.Grothendieck.preNatIso {C : Type u} [Category.{v, u} C] {D : Type u₁} [Category.{v₁, u₁} D] (F : Functor C Cat) {G H : Functor D C} (α : G H) :
pre F G (map (whiskerRight α.hom F)).comp (pre F H)

An natural isomorphism between functors G ≅ H induces a natural isomorphism between the canonical morphism pre F G and pre F H, up to composition with Grothendieck (G ⋙ F) ⥤ Grothendieck (H ⋙ F).

Equations
  • One or more equations did not get rendered due to their size.
theorem CategoryTheory.Grothendieck.pre_comp_map {C : Type u} [Category.{v, u} C] {D : Type u₁} [Category.{v₁, u₁} D] {F : Functor C Cat} (G : Functor D C) {H : Functor C Cat} (α : F H) :
(pre F G).comp (map α) = (map (whiskerLeft G α)).comp (pre H G)
theorem CategoryTheory.Grothendieck.pre_comp_map_assoc {C : Type u} [Category.{v, u} C] {D : Type u₁} [Category.{v₁, u₁} D] {F : Functor C Cat} (G : Functor D C) {H : Functor C Cat} (α : F H) {E : Type u_1} [Category.{u_2, u_1} E] (K : Functor (Grothendieck H) E) :
(pre F G).comp ((map α).comp K) = (map (whiskerLeft G α)).comp ((pre H G).comp K)
@[simp]
theorem CategoryTheory.Grothendieck.pre_comp {C : Type u} [Category.{v, u} C] {D : Type u₁} [Category.{v₁, u₁} D] (F : Functor C Cat) {E : Type u_1} [Category.{u_2, u_1} E] (G : Functor D C) (H : Functor E D) :
pre F (H.comp G) = (pre (G.comp F) H).comp (pre F G)

Let G be an equivalence of categories. The functor induced via pre by G.functor ⋙ G.inverse is naturally isomorphic to the functor induced via map by a whiskered version of G's inverse unit.

Equations

Given a functor F : C ⥤ Cat and an equivalence of categories G : D ≌ C, the functor pre F G.functor is an equivalence between Grothendieck (G.functor ⋙ F) and Grothendieck F.

Equations
  • One or more equations did not get rendered due to their size.

Let F, F' : C ⥤ Cat be functor, G : D ≌ C an equivalence and α : F ⟶ F' a natural transformation.

Left-whiskering α by G and then taking the Grothendieck construction is, up to isomorphism, the same as taking the Grothendieck construction of α and using the equivalences pre F G and pre F' G to match the expected type:

Grothendieck (G.functor ⋙ F) ≌ Grothendieck F ⥤ Grothendieck F' ≌ Grothendieck (G.functor ⋙ F')
Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Grothendieck.ι {C : Type u} [Category.{v, u} C] (F : Functor C Cat) (c : C) :
Functor (↑(F.obj c)) (Grothendieck F)

The inclusion of a fiber F.obj c of a functor F : C ⥤ Cat into its Grothendieck construction.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem CategoryTheory.Grothendieck.ι_map {C : Type u} [Category.{v, u} C] (F : Functor C Cat) (c : C) {X✝ Y✝ : (F.obj c)} (f : X✝ Y✝) :
(ι F c).map f = { base := CategoryStruct.id ((fun (d : (F.obj c)) => { base := c, fiber := d }) X✝).base, fiber := CategoryStruct.comp (eqToHom ) f }
@[simp]
theorem CategoryTheory.Grothendieck.ι_obj {C : Type u} [Category.{v, u} C] (F : Functor C Cat) (c : C) (d : (F.obj c)) :
(ι F c).obj d = { base := c, fiber := d }
def CategoryTheory.Grothendieck.ιNatTrans {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {X Y : C} (f : X Y) :
ι F X Functor.comp (F.map f) (ι F Y)

Every morphism f : X ⟶ Y in the base category induces a natural transformation from the fiber inclusion ι F X to the composition F.map f ⋙ ι F Y.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Grothendieck.ιNatTrans_app_fiber {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {X Y : C} (f : X Y) (d : (F.obj X)) :
((ιNatTrans f).app d).fiber = CategoryStruct.id ((F.map f).obj ((ι F X).obj d).fiber)
@[simp]
theorem CategoryTheory.Grothendieck.ιNatTrans_app_base {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {X Y : C} (f : X Y) (d : (F.obj X)) :
((ιNatTrans f).app d).base = f
def CategoryTheory.Grothendieck.functorFrom {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {E : Type u_1} [Category.{u_2, u_1} E] (fib : (c : C) → Functor (↑(F.obj c)) E) (hom : {c c' : C} → (f : c c') → fib c Functor.comp (F.map f) (fib c')) (hom_id : ∀ (c : C), hom (CategoryStruct.id c) = eqToHom ) (hom_comp : ∀ (c₁ c₂ c₃ : C) (f : c₁ c₂) (g : c₂ c₃), hom (CategoryStruct.comp f g) = CategoryStruct.comp (hom f) (CategoryStruct.comp (whiskerLeft (F.map f) (hom g)) (eqToHom ))) :

Construct a functor from Grothendieck F to another category E by providing a family of functors on the fibers of Grothendieck F, a family of natural transformations on morphisms in the base of Grothendieck F and coherence data for this family of natural transformations.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Grothendieck.functorFrom_obj {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {E : Type u_1} [Category.{u_2, u_1} E] (fib : (c : C) → Functor (↑(F.obj c)) E) (hom : {c c' : C} → (f : c c') → fib c Functor.comp (F.map f) (fib c')) (hom_id : ∀ (c : C), hom (CategoryStruct.id c) = eqToHom ) (hom_comp : ∀ (c₁ c₂ c₃ : C) (f : c₁ c₂) (g : c₂ c₃), hom (CategoryStruct.comp f g) = CategoryStruct.comp (hom f) (CategoryStruct.comp (whiskerLeft (F.map f) (hom g)) (eqToHom ))) (X : Grothendieck F) :
(functorFrom fib hom hom_id hom_comp).obj X = (fib X.base).obj X.fiber
@[simp]
theorem CategoryTheory.Grothendieck.functorFrom_map {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {E : Type u_1} [Category.{u_2, u_1} E] (fib : (c : C) → Functor (↑(F.obj c)) E) (hom : {c c' : C} → (f : c c') → fib c Functor.comp (F.map f) (fib c')) (hom_id : ∀ (c : C), hom (CategoryStruct.id c) = eqToHom ) (hom_comp : ∀ (c₁ c₂ c₃ : C) (f : c₁ c₂) (g : c₂ c₃), hom (CategoryStruct.comp f g) = CategoryStruct.comp (hom f) (CategoryStruct.comp (whiskerLeft (F.map f) (hom g)) (eqToHom ))) {X Y : Grothendieck F} (f : X Y) :
(functorFrom fib hom hom_id hom_comp).map f = CategoryStruct.comp ((hom f.base).app X.fiber) ((fib Y.base).map f.fiber)
def CategoryTheory.Grothendieck.ιCompFunctorFrom {C : Type u} [Category.{v, u} C] {F : Functor C Cat} {E : Type u_1} [Category.{u_2, u_1} E] (fib : (c : C) → Functor (↑(F.obj c)) E) (hom : {c c' : C} → (f : c c') → fib c Functor.comp (F.map f) (fib c')) (hom_id : ∀ (c : C), hom (CategoryStruct.id c) = eqToHom ) (hom_comp : ∀ (c₁ c₂ c₃ : C) (f : c₁ c₂) (g : c₂ c₃), hom (CategoryStruct.comp f g) = CategoryStruct.comp (hom f) (CategoryStruct.comp (whiskerLeft (F.map f) (hom g)) (eqToHom ))) (c : C) :
(ι F c).comp (functorFrom fib (fun {c c' : C} => hom) hom_id hom_comp) fib c

Grothendieck.ι F c composed with Grothendieck.functorFrom is isomorphic a functor on a fiber on F supplied as the first argument to Grothendieck.functorFrom.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Grothendieck.ιCompMap {C : Type u} [Category.{v, u} C] {F F' : Functor C Cat} (α : F F') (c : C) :
(ι F c).comp (map α) Functor.comp (α.app c) (ι F' c)

The fiber inclusion ι F c composed with map α is isomorphic to α.app c ⋙ ι F' c.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Grothendieck.ιCompMap_hom_app_base {C : Type u} [Category.{v, u} C] {F F' : Functor C Cat} (α : F F') (c : C) (X : (F.obj c)) :
@[simp]
theorem CategoryTheory.Grothendieck.ιCompMap_hom_app_fiber {C : Type u} [Category.{v, u} C] {F F' : Functor C Cat} (α : F F') (c : C) (X : (F.obj c)) :
((ιCompMap α c).hom.app X).fiber = eqToHom
@[simp]
theorem CategoryTheory.Grothendieck.ιCompMap_inv_app_base {C : Type u} [Category.{v, u} C] {F F' : Functor C Cat} (α : F F') (c : C) (X : (F.obj c)) :
@[simp]
theorem CategoryTheory.Grothendieck.ιCompMap_inv_app_fiber {C : Type u} [Category.{v, u} C] {F F' : Functor C Cat} (α : F F') (c : C) (X : (F.obj c)) :
((ιCompMap α c).inv.app X).fiber = eqToHom