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

                          The inverse functor to build the equivalence compAsSmallFunctorEquivalence.

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

                            The functor to build the equivalence compAsSmallFunctorEquivalence.

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

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

                                    Auxiliary definition for grothendieckTypeToCat, to speed up elaboration.

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

                                      Auxiliary definition for grothendieckTypeToCat, to speed up elaboration.

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

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