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
        Instances For
          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
            Instances For
              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
                Instances For
                  @[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
                  @[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
                  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
                    Instances For
                      @[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
                        Instances For
                          @[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
                          @[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_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
                          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
                            Instances For
                              @[simp]
                              @[simp]

                              The forgetful functor from Grothendieck F to the source category.

                              Equations
                                Instances For
                                  @[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
                                    Instances For
                                      @[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_map_fiber {C : Type u} [Category.{v, u} C] {F G : Functor C Cat} (α : F G) {X Y : Grothendieck F} (f : X Y) :
                                      @[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_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
                                      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
                                        Instances For
                                          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
                                            Instances For

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

                                              Equations
                                                Instances For

                                                  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
                                                    Instances For

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

                                                      Equations
                                                        Instances For

                                                          Auxiliary definition for grothendieckTypeToCat, to speed up elaboration.

                                                          Equations
                                                            Instances For

                                                              Auxiliary definition for grothendieckTypeToCat, to speed up elaboration.

                                                              Equations
                                                                Instances For

                                                                  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
                                                                    Instances For

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

                                                                      Equations
                                                                        Instances For
                                                                          @[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_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_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) :

                                                                          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
                                                                            Instances For

                                                                              Given an equivalence of categories G, preInv _ G is the (weak) inverse of the pre _ G.functor.

                                                                              Equations
                                                                                Instances For
                                                                                  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 (G.whiskerLeft α)).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 (G.whiskerLeft α)).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
                                                                                    Instances For

                                                                                      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
                                                                                        Instances For

                                                                                          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
                                                                                            Instances For
                                                                                              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
                                                                                                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 { base := c, fiber := 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
                                                                                                    Instances For
                                                                                                      @[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 (Functor.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
                                                                                                        Instances For
                                                                                                          @[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 (Functor.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 (Functor.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 (Functor.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
                                                                                                            Instances For
                                                                                                              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
                                                                                                                Instances For
                                                                                                                  @[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
                                                                                                                  @[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)) :