Documentation

Mathlib.CategoryTheory.Limits.Shapes.Pullback.HasPullback

HasPullback #

HasPullback f g and pullback f g provides API for HasLimit and limit in the case of pullacks.

Main definitions #

  pullback f g ---pullback.snd f g---> Y
      |                                |
      |                                |
pullback.snd f g                       g
      |                                |
      v                                v
      X --------------f--------------> Z
      X --------------f--------------> Y
      |                                |
      g                          pushout.inr f g
      |                                |
      v                                v
      Z ---pushout.inl f g---> pushout f g

Main results & API #

(The dual results for pushouts are also available)

NOTE: golfed some proofs also

References #

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

HasPullback f g represents a particular choice of limiting cone for the pair of morphisms f : X ⟶ Z and g : Y ⟶ Z.

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

    HasPushout f g represents a particular choice of colimiting cocone for the pair of morphisms f : X ⟶ Y and g : X ⟶ Z.

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

      pullback f g computes the pullback of a pair of morphisms with the same target.

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

        pushout f g computes the pushout of a pair of morphisms with the same source.

        Equations
        Instances For
          @[reducible, inline]

          The first projection of the pullback of f and g.

          Equations
          Instances For
            @[reducible, inline]

            The second projection of the pullback of f and g.

            Equations
            Instances For
              @[reducible, inline]

              The first inclusion into the pushout of f and g.

              Equations
              Instances For
                @[reducible, inline]

                The second inclusion into the pushout of f and g.

                Equations
                Instances For
                  @[reducible, inline]

                  A pair of morphisms h : W ⟶ X and k : W ⟶ Y satisfying h ≫ f = k ≫ g induces a morphism pullback.lift : W ⟶ pullback f g.

                  Equations
                  Instances For
                    @[reducible, inline]

                    A pair of morphisms h : Y ⟶ W and k : Z ⟶ W satisfying f ≫ h = g ≫ k induces a morphism pushout.desc : pushout f g ⟶ W.

                    Equations
                    Instances For
                      def CategoryTheory.Limits.pullback.lift' {C : Type u} [CategoryTheory.Category.{v, u} C] {W : C} {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} [CategoryTheory.Limits.HasPullback f g] (h : W X) (k : W Y) (w : CategoryTheory.CategoryStruct.comp h f = CategoryTheory.CategoryStruct.comp k g) :
                      { l : W CategoryTheory.Limits.pullback f g // CategoryTheory.CategoryStruct.comp l CategoryTheory.Limits.pullback.fst = h CategoryTheory.CategoryStruct.comp l CategoryTheory.Limits.pullback.snd = k }

                      A pair of morphisms h : W ⟶ X and k : W ⟶ Y satisfying h ≫ f = k ≫ g induces a morphism l : W ⟶ pullback f g such that l ≫ pullback.fst = h and l ≫ pullback.snd = k.

                      Equations
                      Instances For
                        def CategoryTheory.Limits.pullback.desc' {C : Type u} [CategoryTheory.Category.{v, u} C] {W : C} {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} [CategoryTheory.Limits.HasPushout f g] (h : Y W) (k : Z W) (w : CategoryTheory.CategoryStruct.comp f h = CategoryTheory.CategoryStruct.comp g k) :
                        { l : CategoryTheory.Limits.pushout f g W // CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pushout.inl l = h CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pushout.inr l = k }

                        A pair of morphisms h : Y ⟶ W and k : Z ⟶ W satisfying f ≫ h = g ≫ k induces a morphism l : pushout f g ⟶ W such that pushout.inl ≫ l = h and pushout.inr ≫ l = k.

                        Equations
                        Instances For
                          theorem CategoryTheory.Limits.pullback.condition_assoc {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z✝} {g : Y Z✝} [CategoryTheory.Limits.HasPullback f g] {Z : C} (h : Z✝ Z) :
                          theorem CategoryTheory.Limits.pullback.condition {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} [CategoryTheory.Limits.HasPullback f g] :
                          CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst f = CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.snd g
                          theorem CategoryTheory.Limits.pushout.condition {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} [CategoryTheory.Limits.HasPushout f g] :
                          CategoryTheory.CategoryStruct.comp f CategoryTheory.Limits.pushout.inl = CategoryTheory.CategoryStruct.comp g CategoryTheory.Limits.pushout.inr
                          @[reducible, inline]
                          abbrev CategoryTheory.Limits.pullback.map {C : Type u} [CategoryTheory.Category.{v, u} C] {W : C} {X : C} {Y : C} {Z : C} {S : C} {T : C} (f₁ : W S) (f₂ : X S) [CategoryTheory.Limits.HasPullback f₁ f₂] (g₁ : Y T) (g₂ : Z T) [CategoryTheory.Limits.HasPullback g₁ g₂] (i₁ : W Y) (i₂ : X Z) (i₃ : S T) (eq₁ : CategoryTheory.CategoryStruct.comp f₁ i₃ = CategoryTheory.CategoryStruct.comp i₁ g₁) (eq₂ : CategoryTheory.CategoryStruct.comp f₂ i₃ = CategoryTheory.CategoryStruct.comp i₂ g₂) :

                          Given such a diagram, then there is a natural morphism W ×ₛ X ⟶ Y ×ₜ Z.

                          W ⟶ Y ↘ ↘ S ⟶ T ↗ ↗ X ⟶ Z

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

                            The canonical map X ×ₛ Y ⟶ X ×ₜ Y given S ⟶ T.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              @[reducible, inline]
                              abbrev CategoryTheory.Limits.pushout.map {C : Type u} [CategoryTheory.Category.{v, u} C] {W : C} {X : C} {Y : C} {Z : C} {S : C} {T : C} (f₁ : S W) (f₂ : S X) [CategoryTheory.Limits.HasPushout f₁ f₂] (g₁ : T Y) (g₂ : T Z) [CategoryTheory.Limits.HasPushout g₁ g₂] (i₁ : W Y) (i₂ : X Z) (i₃ : S T) (eq₁ : CategoryTheory.CategoryStruct.comp f₁ i₁ = CategoryTheory.CategoryStruct.comp i₃ g₁) (eq₂ : CategoryTheory.CategoryStruct.comp f₂ i₂ = CategoryTheory.CategoryStruct.comp i₃ g₂) :

                              Given such a diagram, then there is a natural morphism W ⨿ₛ X ⟶ Y ⨿ₜ Z.

                              W ⟶ Y
                              

                              ↗ ↗ S ⟶ T ↘ ↘ X ⟶ Z

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

                                The canonical map X ⨿ₛ Y ⟶ X ⨿ₜ Y given S ⟶ T.

                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For
                                  theorem CategoryTheory.Limits.pullback.hom_ext {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Z} {g : Y Z} [CategoryTheory.Limits.HasPullback f g] {W : C} {k : W CategoryTheory.Limits.pullback f g} {l : W CategoryTheory.Limits.pullback f g} (h₀ : CategoryTheory.CategoryStruct.comp k CategoryTheory.Limits.pullback.fst = CategoryTheory.CategoryStruct.comp l CategoryTheory.Limits.pullback.fst) (h₁ : CategoryTheory.CategoryStruct.comp k CategoryTheory.Limits.pullback.snd = CategoryTheory.CategoryStruct.comp l CategoryTheory.Limits.pullback.snd) :
                                  k = l

                                  Two morphisms into a pullback are equal if their compositions with the pullback morphisms are equal

                                  def CategoryTheory.Limits.pullbackIsPullback {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Z) (g : Y Z) [CategoryTheory.Limits.HasPullback f g] :
                                  CategoryTheory.Limits.IsLimit (CategoryTheory.Limits.PullbackCone.mk CategoryTheory.Limits.pullback.fst CategoryTheory.Limits.pullback.snd )

                                  The pullback cone built from the pullback projections is a pullback.

                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For
                                    theorem CategoryTheory.Limits.pushout.hom_ext {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f : X Y} {g : X Z} [CategoryTheory.Limits.HasPushout f g] {W : C} {k : CategoryTheory.Limits.pushout f g W} {l : CategoryTheory.Limits.pushout f g W} (h₀ : CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pushout.inl k = CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pushout.inl l) (h₁ : CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pushout.inr k = CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pushout.inr l) :
                                    k = l

                                    Two morphisms out of a pushout are equal if their compositions with the pushout morphisms are equal

                                    def CategoryTheory.Limits.pushoutIsPushout {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Y) (g : X Z) [CategoryTheory.Limits.HasPushout f g] :
                                    CategoryTheory.Limits.IsColimit (CategoryTheory.Limits.PushoutCocone.mk CategoryTheory.Limits.pushout.inl CategoryTheory.Limits.pushout.inr )

                                    The pushout cocone built from the pushout coprojections is a pushout.

                                    Equations
                                    • One or more equations did not get rendered due to their size.
                                    Instances For
                                      instance CategoryTheory.Limits.pullback.map_isIso {C : Type u} [CategoryTheory.Category.{v, u} C] {W : C} {X : C} {Y : C} {Z : C} {S : C} {T : C} (f₁ : W S) (f₂ : X S) [CategoryTheory.Limits.HasPullback f₁ f₂] (g₁ : Y T) (g₂ : Z T) [CategoryTheory.Limits.HasPullback g₁ g₂] (i₁ : W Y) (i₂ : X Z) (i₃ : S T) (eq₁ : CategoryTheory.CategoryStruct.comp f₁ i₃ = CategoryTheory.CategoryStruct.comp i₁ g₁) (eq₂ : CategoryTheory.CategoryStruct.comp f₂ i₃ = CategoryTheory.CategoryStruct.comp i₂ g₂) [CategoryTheory.IsIso i₁] [CategoryTheory.IsIso i₂] [CategoryTheory.IsIso i₃] :
                                      CategoryTheory.IsIso (CategoryTheory.Limits.pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂)
                                      Equations
                                      • =
                                      @[simp]
                                      theorem CategoryTheory.Limits.pullback.congrHom_hom {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f₁ : X Z} {f₂ : X Z} {g₁ : Y Z} {g₂ : Y Z} (h₁ : f₁ = f₂) (h₂ : g₁ = g₂) [CategoryTheory.Limits.HasPullback f₁ g₁] [CategoryTheory.Limits.HasPullback f₂ g₂] :
                                      def CategoryTheory.Limits.pullback.congrHom {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f₁ : X Z} {f₂ : X Z} {g₁ : Y Z} {g₂ : Y Z} (h₁ : f₁ = f₂) (h₂ : g₁ = g₂) [CategoryTheory.Limits.HasPullback f₁ g₁] [CategoryTheory.Limits.HasPullback f₂ g₂] :

                                      If f₁ = f₂ and g₁ = g₂, we may construct a canonical isomorphism pullback f₁ g₁ ≅ pullback f₂ g₂

                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        @[simp]
                                        theorem CategoryTheory.Limits.pullback.congrHom_inv {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f₁ : X Z} {f₂ : X Z} {g₁ : Y Z} {g₂ : Y Z} (h₁ : f₁ = f₂) (h₂ : g₁ = g₂) [CategoryTheory.Limits.HasPullback f₁ g₁] [CategoryTheory.Limits.HasPullback f₂ g₂] :
                                        instance CategoryTheory.Limits.pushout.map_isIso {C : Type u} [CategoryTheory.Category.{v, u} C] {W : C} {X : C} {Y : C} {Z : C} {S : C} {T : C} (f₁ : S W) (f₂ : S X) [CategoryTheory.Limits.HasPushout f₁ f₂] (g₁ : T Y) (g₂ : T Z) [CategoryTheory.Limits.HasPushout g₁ g₂] (i₁ : W Y) (i₂ : X Z) (i₃ : S T) (eq₁ : CategoryTheory.CategoryStruct.comp f₁ i₁ = CategoryTheory.CategoryStruct.comp i₃ g₁) (eq₂ : CategoryTheory.CategoryStruct.comp f₂ i₂ = CategoryTheory.CategoryStruct.comp i₃ g₂) [CategoryTheory.IsIso i₁] [CategoryTheory.IsIso i₂] [CategoryTheory.IsIso i₃] :
                                        CategoryTheory.IsIso (CategoryTheory.Limits.pushout.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂)
                                        Equations
                                        • =
                                        @[simp]
                                        theorem CategoryTheory.Limits.pushout.congrHom_hom {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f₁ : X Y} {f₂ : X Y} {g₁ : X Z} {g₂ : X Z} (h₁ : f₁ = f₂) (h₂ : g₁ = g₂) [CategoryTheory.Limits.HasPushout f₁ g₁] [CategoryTheory.Limits.HasPushout f₂ g₂] :
                                        def CategoryTheory.Limits.pushout.congrHom {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f₁ : X Y} {f₂ : X Y} {g₁ : X Z} {g₂ : X Z} (h₁ : f₁ = f₂) (h₂ : g₁ = g₂) [CategoryTheory.Limits.HasPushout f₁ g₁] [CategoryTheory.Limits.HasPushout f₂ g₂] :

                                        If f₁ = f₂ and g₁ = g₂, we may construct a canonical isomorphism pushout f₁ g₁ ≅ pullback f₂ g₂

                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For
                                          @[simp]
                                          theorem CategoryTheory.Limits.pushout.congrHom_inv {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {f₁ : X Y} {f₂ : X Y} {g₁ : X Z} {g₂ : X Z} (h₁ : f₁ = f₂) (h₂ : g₁ = g₂) [CategoryTheory.Limits.HasPushout f₁ g₁] [CategoryTheory.Limits.HasPushout f₂ g₂] :

                                          The comparison morphism for the pullback of f,g. This is an isomorphism iff G preserves the pullback of f,g; see Mathlib/CategoryTheory/Limits/Preserves/Shapes/Pullbacks.lean

                                          Equations
                                          Instances For
                                            @[simp]
                                            theorem CategoryTheory.Limits.pullbackComparison_comp_fst_assoc {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] (G : CategoryTheory.Functor C D) (f : X Z✝) (g : Y Z✝) [CategoryTheory.Limits.HasPullback f g] [CategoryTheory.Limits.HasPullback (G.map f) (G.map g)] {Z : D} (h : G.obj X Z) :
                                            CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.pullbackComparison G f g) (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.fst h) = CategoryTheory.CategoryStruct.comp (G.map CategoryTheory.Limits.pullback.fst) h
                                            @[simp]
                                            theorem CategoryTheory.Limits.pullbackComparison_comp_fst {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] (G : CategoryTheory.Functor C D) (f : X Z) (g : Y Z) [CategoryTheory.Limits.HasPullback f g] [CategoryTheory.Limits.HasPullback (G.map f) (G.map g)] :
                                            CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.pullbackComparison G f g) CategoryTheory.Limits.pullback.fst = G.map CategoryTheory.Limits.pullback.fst
                                            @[simp]
                                            theorem CategoryTheory.Limits.pullbackComparison_comp_snd_assoc {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] (G : CategoryTheory.Functor C D) (f : X Z✝) (g : Y Z✝) [CategoryTheory.Limits.HasPullback f g] [CategoryTheory.Limits.HasPullback (G.map f) (G.map g)] {Z : D} (h : G.obj Y Z) :
                                            CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.pullbackComparison G f g) (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pullback.snd h) = CategoryTheory.CategoryStruct.comp (G.map CategoryTheory.Limits.pullback.snd) h
                                            @[simp]
                                            theorem CategoryTheory.Limits.pullbackComparison_comp_snd {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] (G : CategoryTheory.Functor C D) (f : X Z) (g : Y Z) [CategoryTheory.Limits.HasPullback f g] [CategoryTheory.Limits.HasPullback (G.map f) (G.map g)] :
                                            CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.pullbackComparison G f g) CategoryTheory.Limits.pullback.snd = G.map CategoryTheory.Limits.pullback.snd

                                            The comparison morphism for the pushout of f,g. This is an isomorphism iff G preserves the pushout of f,g; see Mathlib/CategoryTheory/Limits/Preserves/Shapes/Pullbacks.lean

                                            Equations
                                            Instances For
                                              @[simp]
                                              theorem CategoryTheory.Limits.inl_comp_pushoutComparison {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] (G : CategoryTheory.Functor C D) (f : X Y) (g : X Z) [CategoryTheory.Limits.HasPushout f g] [CategoryTheory.Limits.HasPushout (G.map f) (G.map g)] :
                                              CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pushout.inl (CategoryTheory.Limits.pushoutComparison G f g) = G.map CategoryTheory.Limits.pushout.inl
                                              @[simp]
                                              theorem CategoryTheory.Limits.inr_comp_pushoutComparison {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] (G : CategoryTheory.Functor C D) (f : X Y) (g : X Z) [CategoryTheory.Limits.HasPushout f g] [CategoryTheory.Limits.HasPushout (G.map f) (G.map g)] :
                                              CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pushout.inr (CategoryTheory.Limits.pushoutComparison G f g) = G.map CategoryTheory.Limits.pushout.inr

                                              Making this a global instance would make the typeclass search go in an infinite loop.

                                              The isomorphism X ×[Z] Y ≅ Y ×[Z] X.

                                              Equations
                                              • One or more equations did not get rendered due to their size.
                                              Instances For
                                                @[simp]
                                                theorem CategoryTheory.Limits.pullbackSymmetry_hom_comp_fst_assoc {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Z✝) (g : Y Z✝) [CategoryTheory.Limits.HasPullback f g] {Z : C} (h : Y Z) :
                                                @[simp]
                                                theorem CategoryTheory.Limits.pullbackSymmetry_hom_comp_fst {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Z) (g : Y Z) [CategoryTheory.Limits.HasPullback f g] :
                                                CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.pullbackSymmetry f g).hom CategoryTheory.Limits.pullback.fst = CategoryTheory.Limits.pullback.snd
                                                @[simp]
                                                theorem CategoryTheory.Limits.pullbackSymmetry_hom_comp_snd_assoc {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Z✝) (g : Y Z✝) [CategoryTheory.Limits.HasPullback f g] {Z : C} (h : X Z) :
                                                @[simp]
                                                theorem CategoryTheory.Limits.pullbackSymmetry_hom_comp_snd {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Z) (g : Y Z) [CategoryTheory.Limits.HasPullback f g] :
                                                CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.pullbackSymmetry f g).hom CategoryTheory.Limits.pullback.snd = CategoryTheory.Limits.pullback.fst
                                                @[simp]
                                                theorem CategoryTheory.Limits.pullbackSymmetry_inv_comp_fst_assoc {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Z✝) (g : Y Z✝) [CategoryTheory.Limits.HasPullback f g] {Z : C} (h : X Z) :
                                                @[simp]
                                                theorem CategoryTheory.Limits.pullbackSymmetry_inv_comp_fst {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Z) (g : Y Z) [CategoryTheory.Limits.HasPullback f g] :
                                                CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.pullbackSymmetry f g).inv CategoryTheory.Limits.pullback.fst = CategoryTheory.Limits.pullback.snd
                                                @[simp]
                                                theorem CategoryTheory.Limits.pullbackSymmetry_inv_comp_snd_assoc {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Z✝) (g : Y Z✝) [CategoryTheory.Limits.HasPullback f g] {Z : C} (h : Y Z) :
                                                @[simp]
                                                theorem CategoryTheory.Limits.pullbackSymmetry_inv_comp_snd {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Z) (g : Y Z) [CategoryTheory.Limits.HasPullback f g] :
                                                CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.pullbackSymmetry f g).inv CategoryTheory.Limits.pullback.snd = CategoryTheory.Limits.pullback.fst

                                                Making this a global instance would make the typeclass search go in an infinite loop.

                                                The isomorphism Y ⨿[X] Z ≅ Z ⨿[X] Y.

                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  @[simp]
                                                  theorem CategoryTheory.Limits.inl_comp_pushoutSymmetry_hom {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Y) (g : X Z) [CategoryTheory.Limits.HasPushout f g] :
                                                  CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pushout.inl (CategoryTheory.Limits.pushoutSymmetry f g).hom = CategoryTheory.Limits.pushout.inr
                                                  @[simp]
                                                  theorem CategoryTheory.Limits.inr_comp_pushoutSymmetry_hom {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Y) (g : X Z) [CategoryTheory.Limits.HasPushout f g] :
                                                  CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pushout.inr (CategoryTheory.Limits.pushoutSymmetry f g).hom = CategoryTheory.Limits.pushout.inl
                                                  @[simp]
                                                  theorem CategoryTheory.Limits.inl_comp_pushoutSymmetry_inv {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Y) (g : X Z) [CategoryTheory.Limits.HasPushout f g] :
                                                  CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pushout.inl (CategoryTheory.Limits.pushoutSymmetry f g).inv = CategoryTheory.Limits.pushout.inr
                                                  @[simp]
                                                  theorem CategoryTheory.Limits.inr_comp_pushoutSymmetry_inv {C : Type u} [CategoryTheory.Category.{v, u} C] {X : C} {Y : C} {Z : C} (f : X Y) (g : X Z) [CategoryTheory.Limits.HasPushout f g] :
                                                  CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.pushout.inr (CategoryTheory.Limits.pushoutSymmetry f g).inv = CategoryTheory.Limits.pushout.inl
                                                  @[reducible, inline]

                                                  HasPushouts represents a choice of pushout for every pair of morphisms

                                                  Equations
                                                  Instances For

                                                    If C has all limits of diagrams cospan f g, then it has all pullbacks

                                                    If C has all colimits of diagrams span f g, then it has all pushouts

                                                    @[instance 100]

                                                    Having wide pullback at any universe level implies having binary pullbacks.

                                                    Equations
                                                    • =
                                                    @[instance 100]

                                                    Having wide pushout at any universe level implies having binary pushouts.

                                                    Equations
                                                    • =