Documentation

Mathlib.CategoryTheory.Limits.Shapes.Pullback.PullbackCone

PullbackCone #

This file provides API for interacting with cones (resp. cocones) in the case of pullbacks (resp. pushouts).

Main definitions #

t.pt ---t.snd---> Y
  |               |
 t.fst            g
  |               |
  v               v
  X -----f------> Z

The type PullbackCone f g is implemented as an abbreviation for Cone (cospan f g), so general results about cones are also available for PullbackCone f g.

  X -----f------> Y
  |               |
  g               t.inr
  |               |
  v               v
  Z ---t.inl---> t.pt

Similar to PullbackCone, PushoutCone f g is implemented as an abbreviation for Cocone (span f g), so general results about cocones are also available for PushoutCone f g.

API #

We summarize the most important parts of the API for pullback cones here. The dual notions for pushout cones is also available in this file.

Various ways of constructing pullback cones:

Interaction with IsLimit:

References #

@[reducible, inline]
abbrev CategoryTheory.Limits.PullbackCone {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Z) (g : Y Z) :
Type (max (max 0 u) v)

A pullback cone is just a cone on the cospan formed by two morphisms f : X ⟶ Z and g : Y ⟶ Z.

Equations
Instances For
    @[reducible, inline]
    abbrev CategoryTheory.Limits.PullbackCone.fst {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} (t : CategoryTheory.Limits.PullbackCone f g) :
    t.pt X

    The first projection of a pullback cone.

    Equations
    Instances For
      @[reducible, inline]
      abbrev CategoryTheory.Limits.PullbackCone.snd {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} (t : CategoryTheory.Limits.PullbackCone f g) :
      t.pt Y

      The second projection of a pullback cone.

      Equations
      Instances For
        def CategoryTheory.Limits.PullbackCone.mk {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} {W : C} (fst : W X) (snd : W Y) (eq : CategoryTheory.CategoryStruct.comp fst f = CategoryTheory.CategoryStruct.comp snd g) :

        A pullback cone on f and g is determined by morphisms fst : W ⟶ X and snd : W ⟶ Y such that fst ≫ f = snd ≫ g.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[simp]
          theorem CategoryTheory.Limits.PullbackCone.mk_pt {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} {W : C} (fst : W X) (snd : W Y) (eq : CategoryTheory.CategoryStruct.comp fst f = CategoryTheory.CategoryStruct.comp snd g) :
          @[simp]
          theorem CategoryTheory.Limits.PullbackCone.mk_fst {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} {W : C} (fst : W X) (snd : W Y) (eq : CategoryTheory.CategoryStruct.comp fst f = CategoryTheory.CategoryStruct.comp snd g) :
          @[simp]
          theorem CategoryTheory.Limits.PullbackCone.mk_snd {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} {W : C} (fst : W X) (snd : W Y) (eq : CategoryTheory.CategoryStruct.comp fst f = CategoryTheory.CategoryStruct.comp snd g) :

          To check whether two morphisms are equalized by the maps of a pullback cone, it suffices to check it for fst t and snd t

          def CategoryTheory.Limits.PullbackCone.ext {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} {s : CategoryTheory.Limits.PullbackCone f g} {t : CategoryTheory.Limits.PullbackCone f g} (i : s.pt t.pt) (w₁ : autoParam (s.fst = CategoryTheory.CategoryStruct.comp i.hom t.fst) _auto✝) (w₂ : autoParam (s.snd = CategoryTheory.CategoryStruct.comp i.hom t.snd) _auto✝) :
          s t

          To construct an isomorphism of pullback cones, it suffices to construct an isomorphism of the cone points and check it commutes with fst and snd.

          Equations
          Instances For

            The natural isomorphism between a pullback cone and the corresponding pullback cone reconstructed using PullbackCone.mk.

            Equations
            Instances For
              @[simp]
              @[simp]
              def CategoryTheory.Limits.PullbackCone.isLimitAux {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} (t : CategoryTheory.Limits.PullbackCone f g) (lift : (s : CategoryTheory.Limits.PullbackCone f g) → s.pt t.pt) (fac_left : ∀ (s : CategoryTheory.Limits.PullbackCone f g), CategoryTheory.CategoryStruct.comp (lift s) t.fst = s.fst) (fac_right : ∀ (s : CategoryTheory.Limits.PullbackCone f g), CategoryTheory.CategoryStruct.comp (lift s) t.snd = s.snd) (uniq : ∀ (s : CategoryTheory.Limits.PullbackCone f g) (m : s.pt t.pt), (∀ (j : CategoryTheory.Limits.WalkingCospan), CategoryTheory.CategoryStruct.comp m (t.app j) = s.app j)m = lift s) :

              This is a slightly more convenient method to verify that a pullback cone is a limit cone. It only asks for a proof of facts that carry any mathematical content

              Equations
              • t.isLimitAux lift fac_left fac_right uniq = { lift := lift, fac := , uniq := uniq }
              Instances For
                def CategoryTheory.Limits.PullbackCone.isLimitAux' {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} (t : CategoryTheory.Limits.PullbackCone f g) (create : (s : CategoryTheory.Limits.PullbackCone f g) → { l : s.pt t.pt // CategoryTheory.CategoryStruct.comp l t.fst = s.fst CategoryTheory.CategoryStruct.comp l t.snd = s.snd ∀ {m : s.pt t.pt}, CategoryTheory.CategoryStruct.comp m t.fst = s.fstCategoryTheory.CategoryStruct.comp m t.snd = s.sndm = l }) :

                This is another convenient method to verify that a pullback cone is a limit cone. It only asks for a proof of facts that carry any mathematical content, and allows access to the same s for all parts.

                Equations
                Instances For
                  def CategoryTheory.Limits.PullbackCone.IsLimit.mk {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} {W : C} {fst : W X} {snd : W Y} (eq : CategoryTheory.CategoryStruct.comp fst f = CategoryTheory.CategoryStruct.comp snd g) (lift : (s : CategoryTheory.Limits.PullbackCone f g) → s.pt W) (fac_left : ∀ (s : CategoryTheory.Limits.PullbackCone f g), CategoryTheory.CategoryStruct.comp (lift s) fst = s.fst) (fac_right : ∀ (s : CategoryTheory.Limits.PullbackCone f g), CategoryTheory.CategoryStruct.comp (lift s) snd = s.snd) (uniq : ∀ (s : CategoryTheory.Limits.PullbackCone f g) (m : s.pt W), CategoryTheory.CategoryStruct.comp m fst = s.fstCategoryTheory.CategoryStruct.comp m snd = s.sndm = lift s) :

                  This is a more convenient formulation to show that a PullbackCone constructed using PullbackCone.mk is a limit cone.

                  Equations
                  Instances For

                    If t is a limit pullback cone over f and g and h : W ⟶ X and k : W ⟶ Y are such that h ≫ f = k ≫ g, then we get l : W ⟶ t.pt, which satisfies l ≫ fst t = h and l ≫ snd t = k, see IsLimit.lift_fst and IsLimit.lift_snd.

                    Equations
                    Instances For

                      If t is a limit pullback cone over f and g and h : W ⟶ X and k : W ⟶ Y are such that h ≫ f = k ≫ g, then we have l : W ⟶ t.pt satisfying l ≫ fst t = h and l ≫ snd t = k.

                      Equations
                      Instances For

                        The pullback cone reconstructed using PullbackCone.mk from a pullback cone that is a limit, is also a limit.

                        Equations
                        Instances For

                          The pullback cone obtained by flipping fst and snd.

                          Equations
                          Instances For
                            @[simp]
                            theorem CategoryTheory.Limits.PullbackCone.flip_pt {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} (t : CategoryTheory.Limits.PullbackCone f g) :
                            t.flip.pt = t.pt
                            @[simp]
                            theorem CategoryTheory.Limits.PullbackCone.flip_fst {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} (t : CategoryTheory.Limits.PullbackCone f g) :
                            t.flip.fst = t.snd
                            @[simp]
                            theorem CategoryTheory.Limits.PullbackCone.flip_snd {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} (t : CategoryTheory.Limits.PullbackCone f g) :
                            t.flip.snd = t.fst
                            def CategoryTheory.Limits.PullbackCone.flipFlipIso {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} (t : CategoryTheory.Limits.PullbackCone f g) :
                            t.flip.flip t

                            Flipping a pullback cone twice gives an isomorphic cone.

                            Equations
                            Instances For

                              The flip of a pullback square is a pullback square.

                              Equations
                              Instances For

                                A square is a pullback square if its flip is.

                                Equations
                                Instances For

                                  This is a helper construction that can be useful when verifying that a category has all pullbacks. Given F : WalkingCospan ⥤ C, which is really the same as cospan (F.map inl) (F.map inr), and a pullback cone on F.map inl and F.map inr, we get a cone on F.

                                  If you're thinking about using this, have a look at hasPullbacks_of_hasLimit_cospan, which you may find to be an easier way of achieving your goal.

                                  Equations
                                  Instances For

                                    Given F : WalkingCospan ⥤ C, which is really the same as cospan (F.map inl) (F.map inr), and a cone on F, we get a pullback cone on F.map inl and F.map inr.

                                    Equations
                                    Instances For

                                      A diagram WalkingCospan ⥤ C is isomorphic to some PullbackCone.mk after composing with diagramIsoCospan.

                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        @[reducible, inline]
                                        abbrev CategoryTheory.Limits.PushoutCocone {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Y) (g : X Z) :
                                        Type (max (max 0 u) v)

                                        A pushout cocone is just a cocone on the span formed by two morphisms f : X ⟶ Y and g : X ⟶ Z.

                                        Equations
                                        Instances For
                                          @[reducible, inline]
                                          abbrev CategoryTheory.Limits.PushoutCocone.inl {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} (t : CategoryTheory.Limits.PushoutCocone f g) :
                                          Y t.pt

                                          The first inclusion of a pushout cocone.

                                          Equations
                                          Instances For
                                            @[reducible, inline]
                                            abbrev CategoryTheory.Limits.PushoutCocone.inr {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} (t : CategoryTheory.Limits.PushoutCocone f g) :
                                            Z t.pt

                                            The second inclusion of a pushout cocone.

                                            Equations
                                            Instances For
                                              def CategoryTheory.Limits.PushoutCocone.mk {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} {W : C} (inl : Y W) (inr : Z W) (eq : CategoryTheory.CategoryStruct.comp f inl = CategoryTheory.CategoryStruct.comp g inr) :

                                              A pushout cocone on f and g is determined by morphisms inl : Y ⟶ W and inr : Z ⟶ W such that f ≫ inl = g ↠ inr.

                                              Equations
                                              • One or more equations did not get rendered due to their size.
                                              Instances For
                                                @[simp]
                                                theorem CategoryTheory.Limits.PushoutCocone.mk_pt {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} {W : C} (inl : Y W) (inr : Z W) (eq : CategoryTheory.CategoryStruct.comp f inl = CategoryTheory.CategoryStruct.comp g inr) :
                                                @[simp]
                                                theorem CategoryTheory.Limits.PushoutCocone.mk_inl {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} {W : C} (inl : Y W) (inr : Z W) (eq : CategoryTheory.CategoryStruct.comp f inl = CategoryTheory.CategoryStruct.comp g inr) :
                                                @[simp]
                                                theorem CategoryTheory.Limits.PushoutCocone.mk_inr {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} {W : C} (inl : Y W) (inr : Z W) (eq : CategoryTheory.CategoryStruct.comp f inl = CategoryTheory.CategoryStruct.comp g inr) :

                                                To check whether a morphism is coequalized by the maps of a pushout cocone, it suffices to check it for inl t and inr t

                                                def CategoryTheory.Limits.PushoutCocone.ext {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} {s : CategoryTheory.Limits.PushoutCocone f g} {t : CategoryTheory.Limits.PushoutCocone f g} (i : s.pt t.pt) (w₁ : autoParam (CategoryTheory.CategoryStruct.comp s.inl i.hom = t.inl) _auto✝) (w₂ : autoParam (CategoryTheory.CategoryStruct.comp s.inr i.hom = t.inr) _auto✝) :
                                                s t

                                                To construct an isomorphism of pushout cocones, it suffices to construct an isomorphism of the cocone points and check it commutes with inl and inr.

                                                Equations
                                                Instances For

                                                  The natural isomorphism between a pushout cocone and the corresponding pushout cocone reconstructed using PushoutCocone.mk.

                                                  Equations
                                                  Instances For
                                                    @[simp]
                                                    @[simp]
                                                    def CategoryTheory.Limits.PushoutCocone.isColimitAux {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} (t : CategoryTheory.Limits.PushoutCocone f g) (desc : (s : CategoryTheory.Limits.PushoutCocone f g) → t.pt s.pt) (fac_left : ∀ (s : CategoryTheory.Limits.PushoutCocone f g), CategoryTheory.CategoryStruct.comp t.inl (desc s) = s.inl) (fac_right : ∀ (s : CategoryTheory.Limits.PushoutCocone f g), CategoryTheory.CategoryStruct.comp t.inr (desc s) = s.inr) (uniq : ∀ (s : CategoryTheory.Limits.PushoutCocone f g) (m : t.pt s.pt), (∀ (j : CategoryTheory.Limits.WalkingSpan), CategoryTheory.CategoryStruct.comp (t.app j) m = s.app j)m = desc s) :

                                                    This is a slightly more convenient method to verify that a pushout cocone is a colimit cocone. It only asks for a proof of facts that carry any mathematical content

                                                    Equations
                                                    • t.isColimitAux desc fac_left fac_right uniq = { desc := desc, fac := , uniq := uniq }
                                                    Instances For

                                                      This is another convenient method to verify that a pushout cocone is a colimit cocone. It only asks for a proof of facts that carry any mathematical content, and allows access to the same s for all parts.

                                                      Equations
                                                      Instances For

                                                        If t is a colimit pushout cocone over f and g and h : Y ⟶ W and k : Z ⟶ W are morphisms satisfying f ≫ h = g ≫ k, then we have a factorization l : t.pt ⟶ W such that inl t ≫ l = h and inr t ≫ l = k, see IsColimit.inl_desc and IsColimit.inr_desc

                                                        Equations
                                                        Instances For

                                                          If t is a colimit pushout cocone over f and g and h : Y ⟶ W and k : Z ⟶ W are morphisms satisfying f ≫ h = g ≫ k, then we have a factorization l : t.pt ⟶ W such that inl t ≫ l = h and inr t ≫ l = k.

                                                          Equations
                                                          Instances For
                                                            def CategoryTheory.Limits.PushoutCocone.IsColimit.mk {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} {W : C} {inl : Y W} {inr : Z W} (eq : CategoryTheory.CategoryStruct.comp f inl = CategoryTheory.CategoryStruct.comp g inr) (desc : (s : CategoryTheory.Limits.PushoutCocone f g) → W s.pt) (fac_left : ∀ (s : CategoryTheory.Limits.PushoutCocone f g), CategoryTheory.CategoryStruct.comp inl (desc s) = s.inl) (fac_right : ∀ (s : CategoryTheory.Limits.PushoutCocone f g), CategoryTheory.CategoryStruct.comp inr (desc s) = s.inr) (uniq : ∀ (s : CategoryTheory.Limits.PushoutCocone f g) (m : W s.pt), CategoryTheory.CategoryStruct.comp inl m = s.inlCategoryTheory.CategoryStruct.comp inr m = s.inrm = desc s) :

                                                            This is a more convenient formulation to show that a PushoutCocone constructed using PushoutCocone.mk is a colimit cocone.

                                                            Equations
                                                            Instances For

                                                              The pushout cocone reconstructed using PushoutCocone.mk from a pushout cocone that is a colimit, is also a colimit.

                                                              Equations
                                                              Instances For

                                                                The pushout cocone obtained by flipping inl and inr.

                                                                Equations
                                                                Instances For
                                                                  @[simp]
                                                                  theorem CategoryTheory.Limits.PushoutCocone.flip_pt {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} (t : CategoryTheory.Limits.PushoutCocone f g) :
                                                                  t.flip.pt = t.pt
                                                                  @[simp]
                                                                  theorem CategoryTheory.Limits.PushoutCocone.flip_inl {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} (t : CategoryTheory.Limits.PushoutCocone f g) :
                                                                  t.flip.inl = t.inr
                                                                  @[simp]
                                                                  theorem CategoryTheory.Limits.PushoutCocone.flip_inr {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} (t : CategoryTheory.Limits.PushoutCocone f g) :
                                                                  t.flip.inr = t.inl
                                                                  def CategoryTheory.Limits.PushoutCocone.flipFlipIso {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} (t : CategoryTheory.Limits.PushoutCocone f g) :
                                                                  t.flip.flip t

                                                                  Flipping a pushout cocone twice gives an isomorphic cocone.

                                                                  Equations
                                                                  Instances For

                                                                    The flip of a pushout square is a pushout square.

                                                                    Equations
                                                                    Instances For

                                                                      A square is a pushout square if its flip is.

                                                                      Equations
                                                                      Instances For

                                                                        This is a helper construction that can be useful when verifying that a category has all pushout. Given F : WalkingSpan ⥤ C, which is really the same as span (F.map fst) (F.map snd), and a pushout cocone on F.map fst and F.map snd, we get a cocone on F.

                                                                        If you're thinking about using this, have a look at hasPushouts_of_hasColimit_span, which you may find to be an easier way of achieving your goal.

                                                                        Equations
                                                                        Instances For

                                                                          Given F : WalkingSpan ⥤ C, which is really the same as span (F.map fst) (F.map snd), and a cocone on F, we get a pushout cocone on F.map fst and F.map snd.

                                                                          Equations
                                                                          Instances For

                                                                            A diagram WalkingSpan ⥤ C is isomorphic to some PushoutCocone.mk after composing with diagramIsoSpan.

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