Documentation

Mathlib.CategoryTheory.Limits.Shapes.Pullback.Categorical.Basic

Categorical pullbacks #

This file defines the basic properties of categorical pullbacks.

Given a pair of functors (F : A ⥤ B, G : C ⥤ B), we define the category CategoricalPullback F G as the category of triples (a : A, c : C, e : F.obj a ≅ G.obj b).

The category CategoricalPullback F G sits in a canonical CatCommSq, and we formalize that this square is a "limit" in the following sense: functors X ⥤ CategoricalPullback F G are equivalent to pairs of functors (L : X ⥤ A, R : X ⥤ C) equipped with a natural isomorphism L ⋙ F ≅ R ⋙ G.

We formalize this by introducing a category CatCommSqOver F G X that encodes exactly this data, and we prove that the category of functors X ⥤ CategoricalPullback F G is equivalent to CatCommSqOver F G X.

Main declarations #

References #

TODOs: #

structure CategoryTheory.Limits.CategoricalPullback {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] (F : Functor A B) (G : Functor C B) :
Type (max (max u₁ u₃) v₂)

The CategoricalPullback F G is the category of triples (a : A, c : C, F a ≅ G c). Morphisms (a, c, e) ⟶ (a', c', e') are pairs of morphisms (f₁ : a ⟶ a', f₂ : c ⟶ c') compatible with the specified isomorphisms.

  • fst : A

    the first component element

  • snd : C

    the second component element

  • iso : F.obj self.fst G.obj self.snd

    the structural isomorphism F.obj fst ≅ G.obj snd

Instances For

    A notation for the categorical pullback.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      structure CategoryTheory.Limits.CategoricalPullback.Hom {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} (x y : CategoricalPullback F G) :
      Type (max v₁ v₃)

      The Hom types for the categorical pullback are given by pairs of maps compatible with the structural isomorphisms.

      Instances For
        theorem CategoryTheory.Limits.CategoricalPullback.Hom.ext_iff {A : Type u₁} {B : Type u₂} {C : Type u₃} {inst✝ : Category.{v₁, u₁} A} {inst✝¹ : Category.{v₂, u₂} B} {inst✝² : Category.{v₃, u₃} C} {F : Functor A B} {G : Functor C B} {x y : CategoricalPullback F G} {x✝ y✝ : x.Hom y} :
        x✝ = y✝ x✝.fst = y✝.fst x✝.snd = y✝.snd
        theorem CategoryTheory.Limits.CategoricalPullback.Hom.ext {A : Type u₁} {B : Type u₂} {C : Type u₃} {inst✝ : Category.{v₁, u₁} A} {inst✝¹ : Category.{v₂, u₂} B} {inst✝² : Category.{v₃, u₃} C} {F : Functor A B} {G : Functor C B} {x y : CategoricalPullback F G} {x✝ y✝ : x.Hom y} (fst : x✝.fst = y✝.fst) (snd : x✝.snd = y✝.snd) :
        x✝ = y✝
        Equations
        • One or more equations did not get rendered due to their size.
        @[simp]
        theorem CategoryTheory.Limits.CategoricalPullback.comp_fst {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {X✝ Y✝ Z✝ : CategoricalPullback F G} (f : X✝.Hom Y✝) (g : Y✝.Hom Z✝) :
        @[simp]
        theorem CategoryTheory.Limits.CategoricalPullback.comp_snd {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {X✝ Y✝ Z✝ : CategoricalPullback F G} (f : X✝.Hom Y✝) (g : Y✝.Hom Z✝) :
        theorem CategoryTheory.Limits.CategoricalPullback.comp_fst_assoc {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {X✝ Y✝ Z✝ : CategoricalPullback F G} (f : X✝.Hom Y✝) (g : Y✝.Hom Z✝) {Z : A} (h : Z✝.fst Z) :
        theorem CategoryTheory.Limits.CategoricalPullback.comp_snd_assoc {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {X✝ Y✝ Z✝ : CategoricalPullback F G} (f : X✝.Hom Y✝) (g : Y✝.Hom Z✝) {Z : C} (h : Z✝.snd Z) :
        @[simp]

        Naturality square for morphisms in the inverse direction.

        theorem CategoryTheory.Limits.CategoricalPullback.hom_ext {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {x y : CategoricalPullback F G} {f g : x y} (hₗ : f.fst = g.fst) (hᵣ : f.snd = g.snd) :
        f = g

        Extensionnality principle for morphisms in CategoricalPullback F G.

        theorem CategoryTheory.Limits.CategoricalPullback.hom_ext_iff {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {x y : CategoricalPullback F G} {f g : x y} :
        f = g f.fst = g.fst f.snd = g.snd

        CategoricalPullback.π₁ F G is the first projection CategoricalPullback F G ⥤ A.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[simp]
          theorem CategoryTheory.Limits.CategoricalPullback.π₁_map {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] (F : Functor A B) (G : Functor C B) {X✝ Y✝ : CategoricalPullback F G} (f : X✝ Y✝) :
          (π₁ F G).map f = f.fst

          CategoricalPullback.π₂ F G is the second projection CategoricalPullback F G ⥤ C.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            @[simp]
            theorem CategoryTheory.Limits.CategoricalPullback.π₂_map {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] (F : Functor A B) (G : Functor C B) {X✝ Y✝ : CategoricalPullback F G} (f : X✝ Y✝) :
            (π₂ F G).map f = f.snd

            The canonical categorical commutative square in which CategoricalPullback F G sits.

            Equations
            def CategoryTheory.Limits.CategoricalPullback.mkIso {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {x y : CategoricalPullback F G} (eₗ : x.fst y.fst) (eᵣ : x.snd y.snd) (w : CategoryStruct.comp (F.map eₗ.hom) y.iso.hom = CategoryStruct.comp x.iso.hom (G.map eᵣ.hom) := by aesop_cat) :
            x y

            Constructor for isomorphisms in CategoricalPullback F G.

            Equations
            Instances For
              @[simp]
              theorem CategoryTheory.Limits.CategoricalPullback.mkIso_inv_snd {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {x y : CategoricalPullback F G} (eₗ : x.fst y.fst) (eᵣ : x.snd y.snd) (w : CategoryStruct.comp (F.map eₗ.hom) y.iso.hom = CategoryStruct.comp x.iso.hom (G.map eᵣ.hom) := by aesop_cat) :
              (mkIso eₗ eᵣ w).inv.snd = eᵣ.inv
              @[simp]
              theorem CategoryTheory.Limits.CategoricalPullback.mkIso_inv_fst {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {x y : CategoricalPullback F G} (eₗ : x.fst y.fst) (eᵣ : x.snd y.snd) (w : CategoryStruct.comp (F.map eₗ.hom) y.iso.hom = CategoryStruct.comp x.iso.hom (G.map eᵣ.hom) := by aesop_cat) :
              (mkIso eₗ eᵣ w).inv.fst = eₗ.inv
              @[simp]
              theorem CategoryTheory.Limits.CategoricalPullback.mkIso_hom_fst {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {x y : CategoricalPullback F G} (eₗ : x.fst y.fst) (eᵣ : x.snd y.snd) (w : CategoryStruct.comp (F.map eₗ.hom) y.iso.hom = CategoryStruct.comp x.iso.hom (G.map eᵣ.hom) := by aesop_cat) :
              (mkIso eₗ eᵣ w).hom.fst = eₗ.hom
              @[simp]
              theorem CategoryTheory.Limits.CategoricalPullback.mkIso_hom_snd {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {x y : CategoricalPullback F G} (eₗ : x.fst y.fst) (eᵣ : x.snd y.snd) (w : CategoryStruct.comp (F.map eₗ.hom) y.iso.hom = CategoryStruct.comp x.iso.hom (G.map eᵣ.hom) := by aesop_cat) :
              (mkIso eₗ eᵣ w).hom.snd = eᵣ.hom
              @[simp]
              theorem CategoryTheory.Limits.CategoricalPullback.inv_fst {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] (F : Functor A B) (G : Functor C B) {x y : CategoricalPullback F G} (f : x y) [IsIso f] :
              (inv f).fst = inv f.fst
              @[simp]
              theorem CategoryTheory.Limits.CategoricalPullback.inv_snd {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] (F : Functor A B) (G : Functor C B) {x y : CategoricalPullback F G} (f : x y) [IsIso f] :
              (inv f).snd = inv f.snd
              @[reducible, inline]
              abbrev CategoryTheory.Limits.CategoricalPullback.CatCommSqOver {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] (F : Functor A B) (G : Functor C B) (X : Type u₄) [Category.{v₄, u₄} X] :
              Type (max (max (max (max (max u₁ u₄) v₁) v₄) (max (max u₃ u₄) v₃) v₄) u₄ v₂)

              The data of a categorical commutative square over a cospan F, G with cone point X is that of a functor T : X ⥤ A, a functor L : X ⥤ C, and a CatCommSqOver T L F G. Note that this is exactly what an object of ((whiskeringRight X A B).obj F) ⊡ ((whiskeringRight X C B).obj G) is, so CatCommSqOver F G X is in fact an abbreviation for ((whiskeringRight X A B).obj F) ⊡ ((whiskeringRight X C B).obj G).

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                @[simp]
                @[simp]
                theorem CategoryTheory.Limits.CategoricalPullback.CatCommSqOver.w_app {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} (X : Type u₄) [Category.{v₄, u₄} X] {S S' : CatCommSqOver F G X} (φ : S S') (x : X) :
                @[simp]
                theorem CategoryTheory.Limits.CategoricalPullback.CatCommSqOver.w_app_assoc {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} (X : Type u₄) [Category.{v₄, u₄} X] {S S' : CatCommSqOver F G X} (φ : S S') (x : X) {Z : B} (h : (((Functor.whiskeringRight X C B).obj G).obj S'.snd).obj x Z) :
                @[reducible, inline]

                The "first projection" of a CatCommSqOver as a functor.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  @[reducible, inline]

                  The "second projection" of a CatCommSqOver as a functor.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    @[reducible, inline]

                    The structure isompophism of a CatCommSqOver as a natural transformation.

                    Equations
                    Instances For

                      Interpret a functor to the categorical pullback as a CatCommSqOver.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        @[simp]
                        @[simp]
                        theorem CategoryTheory.Limits.CategoricalPullback.toCatCommSqOver_obj_fst_map {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] (F : Functor A B) (G : Functor C B) (X : Type u₄) [Category.{v₄, u₄} X] (J : Functor X (CategoricalPullback F G)) {X✝ Y✝ : X} (f : X✝ Y✝) :
                        ((toCatCommSqOver F G X).obj J).fst.map f = (J.map f).fst
                        @[simp]
                        theorem CategoryTheory.Limits.CategoricalPullback.toCatCommSqOver_map_snd_app {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] (F : Functor A B) (G : Functor C B) (X : Type u₄) [Category.{v₄, u₄} X] {J J' : Functor X (CategoricalPullback F G)} (F✝ : J J') (X✝ : X) :
                        ((toCatCommSqOver F G X).map F✝).snd.app X✝ = (F✝.app X✝).snd
                        @[simp]
                        theorem CategoryTheory.Limits.CategoricalPullback.toCatCommSqOver_obj_snd_map {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] (F : Functor A B) (G : Functor C B) (X : Type u₄) [Category.{v₄, u₄} X] (J : Functor X (CategoricalPullback F G)) {X✝ Y✝ : X} (f : X✝ Y✝) :
                        ((toCatCommSqOver F G X).obj J).snd.map f = (J.map f).snd
                        @[simp]
                        theorem CategoryTheory.Limits.CategoricalPullback.toCatCommSqOver_map_fst_app {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] (F : Functor A B) (G : Functor C B) (X : Type u₄) [Category.{v₄, u₄} X] {J J' : Functor X (CategoricalPullback F G)} (F✝ : J J') (X✝ : X) :
                        ((toCatCommSqOver F G X).map F✝).fst.app X✝ = (F✝.app X✝).fst
                        @[simp]

                        Interpret a CatCommSqOver as a functor to the categorical pullback.

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

                          The universal property of categorical pullbacks, stated as an equivalence of categories between functors X ⥤ (F ⊡ G) and categorical commutative squares over X.

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

                            A constructor for natural isomorphisms of functors X ⥤ CategoricalPullback: to construct such an isomorphism, it suffices to produce isomorphisms after whiskering with the projections, and compatible with the canonical 2-commutative square .

                            Equations
                            Instances For
                              @[simp]
                              theorem CategoryTheory.Limits.CategoricalPullback.mkNatIso_inv_app_snd {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {X : Type u₄} [Category.{v₄, u₄} X] {J K : Functor X (CategoricalPullback F G)} (e₁ : J.comp (π₁ F G) K.comp (π₁ F G)) (e₂ : J.comp (π₂ F G) K.comp (π₂ F G)) (coh : CategoryStruct.comp (Functor.whiskerRight e₁.hom F) (CategoryStruct.comp (K.associator (π₁ F G) F).hom (CategoryStruct.comp (K.whiskerLeft (CatCommSq.iso (π₁ F G) (π₂ F G) F G).hom) (K.associator (π₂ F G) G).inv)) = CategoryStruct.comp (J.associator (π₁ F G) F).hom (CategoryStruct.comp (J.whiskerLeft (CatCommSq.iso (π₁ F G) (π₂ F G) F G).hom) (CategoryStruct.comp (J.associator (π₂ F G) G).inv (Functor.whiskerRight e₂.hom G))) := by aesop_cat) (X✝ : X) :
                              ((mkNatIso e₁ e₂ coh).inv.app X✝).snd = e₂.inv.app X✝
                              @[simp]
                              theorem CategoryTheory.Limits.CategoricalPullback.mkNatIso_hom_app_fst {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {X : Type u₄} [Category.{v₄, u₄} X] {J K : Functor X (CategoricalPullback F G)} (e₁ : J.comp (π₁ F G) K.comp (π₁ F G)) (e₂ : J.comp (π₂ F G) K.comp (π₂ F G)) (coh : CategoryStruct.comp (Functor.whiskerRight e₁.hom F) (CategoryStruct.comp (K.associator (π₁ F G) F).hom (CategoryStruct.comp (K.whiskerLeft (CatCommSq.iso (π₁ F G) (π₂ F G) F G).hom) (K.associator (π₂ F G) G).inv)) = CategoryStruct.comp (J.associator (π₁ F G) F).hom (CategoryStruct.comp (J.whiskerLeft (CatCommSq.iso (π₁ F G) (π₂ F G) F G).hom) (CategoryStruct.comp (J.associator (π₂ F G) G).inv (Functor.whiskerRight e₂.hom G))) := by aesop_cat) (X✝ : X) :
                              ((mkNatIso e₁ e₂ coh).hom.app X✝).fst = e₁.hom.app X✝
                              @[simp]
                              theorem CategoryTheory.Limits.CategoricalPullback.mkNatIso_inv_app_fst {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {X : Type u₄} [Category.{v₄, u₄} X] {J K : Functor X (CategoricalPullback F G)} (e₁ : J.comp (π₁ F G) K.comp (π₁ F G)) (e₂ : J.comp (π₂ F G) K.comp (π₂ F G)) (coh : CategoryStruct.comp (Functor.whiskerRight e₁.hom F) (CategoryStruct.comp (K.associator (π₁ F G) F).hom (CategoryStruct.comp (K.whiskerLeft (CatCommSq.iso (π₁ F G) (π₂ F G) F G).hom) (K.associator (π₂ F G) G).inv)) = CategoryStruct.comp (J.associator (π₁ F G) F).hom (CategoryStruct.comp (J.whiskerLeft (CatCommSq.iso (π₁ F G) (π₂ F G) F G).hom) (CategoryStruct.comp (J.associator (π₂ F G) G).inv (Functor.whiskerRight e₂.hom G))) := by aesop_cat) (X✝ : X) :
                              ((mkNatIso e₁ e₂ coh).inv.app X✝).fst = e₁.inv.app X✝
                              @[simp]
                              theorem CategoryTheory.Limits.CategoricalPullback.mkNatIso_hom_app_snd {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {X : Type u₄} [Category.{v₄, u₄} X] {J K : Functor X (CategoricalPullback F G)} (e₁ : J.comp (π₁ F G) K.comp (π₁ F G)) (e₂ : J.comp (π₂ F G) K.comp (π₂ F G)) (coh : CategoryStruct.comp (Functor.whiskerRight e₁.hom F) (CategoryStruct.comp (K.associator (π₁ F G) F).hom (CategoryStruct.comp (K.whiskerLeft (CatCommSq.iso (π₁ F G) (π₂ F G) F G).hom) (K.associator (π₂ F G) G).inv)) = CategoryStruct.comp (J.associator (π₁ F G) F).hom (CategoryStruct.comp (J.whiskerLeft (CatCommSq.iso (π₁ F G) (π₂ F G) F G).hom) (CategoryStruct.comp (J.associator (π₂ F G) G).inv (Functor.whiskerRight e₂.hom G))) := by aesop_cat) (X✝ : X) :
                              ((mkNatIso e₁ e₂ coh).hom.app X✝).snd = e₂.hom.app X✝
                              theorem CategoryTheory.Limits.CategoricalPullback.natTrans_ext {A : Type u₁} {B : Type u₂} {C : Type u₃} [Category.{v₁, u₁} A] [Category.{v₂, u₂} B] [Category.{v₃, u₃} C] {F : Functor A B} {G : Functor C B} {X : Type u₄} [Category.{v₄, u₄} X] {J K : Functor X (CategoricalPullback F G)} {α β : J K} (e₁ : Functor.whiskerRight α (π₁ F G) = Functor.whiskerRight β (π₁ F G)) (e₂ : Functor.whiskerRight α (π₂ F G) = Functor.whiskerRight β (π₂ F G)) :
                              α = β

                              To check equality of two natural transformations of functors to a CategoricalPullback, it suffices to do so after whiskering with the projections.

                              Comparing mkNatIso with the corresponding construction one can deduce from functorEquiv.