Documentation

Mathlib.CategoryTheory.Limits.Shapes.Pullback.Assoc

Associativity of pullbacks #

This file shows that pullbacks (and pushouts) are associative up to natural isomorphism.

def CategoryTheory.Limits.pullbackPullbackLeftIsPullback {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] :

(X₁ ×[Y₁] X₂) ×[Y₂] X₃ is the pullback (X₁ ×[Y₁] X₂) ×[X₂] (X₂ ×[Y₂] X₃).

Equations
    Instances For
      def CategoryTheory.Limits.pullbackAssocIsPullback {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] :

      (X₁ ×[Y₁] X₂) ×[Y₂] X₃ is the pullback X₁ ×[Y₁] (X₂ ×[Y₂] X₃).

      Equations
        Instances For
          theorem CategoryTheory.Limits.hasPullback_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] :
          def CategoryTheory.Limits.pullbackPullbackRightIsPullback {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] :

          X₁ ×[Y₁] (X₂ ×[Y₂] X₃) is the pullback (X₁ ×[Y₁] X₂) ×[X₂] (X₂ ×[Y₂] X₃).

          Equations
            Instances For
              def CategoryTheory.Limits.pullbackAssocSymmIsPullback {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] :

              X₁ ×[Y₁] (X₂ ×[Y₂] X₃) is the pullback (X₁ ×[Y₁] X₂) ×[Y₂] X₃.

              Equations
                Instances For
                  theorem CategoryTheory.Limits.hasPullback_assoc_symm {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] :
                  noncomputable def CategoryTheory.Limits.pullbackAssoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] :
                  pullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄ pullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)

                  The canonical isomorphism (X₁ ×[Y₁] X₂) ×[Y₂] X₃ ≅ X₁ ×[Y₁] (X₂ ×[Y₂] X₃).

                  Equations
                    Instances For
                      @[simp]
                      theorem CategoryTheory.Limits.pullbackAssoc_inv_fst_fst {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] :
                      @[simp]
                      theorem CategoryTheory.Limits.pullbackAssoc_inv_fst_fst_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] {Z : C} (h : X₁ Z) :
                      @[simp]
                      theorem CategoryTheory.Limits.pullbackAssoc_hom_fst {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] :
                      @[simp]
                      theorem CategoryTheory.Limits.pullbackAssoc_hom_fst_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] {Z : C} (h : X₁ Z) :
                      @[simp]
                      theorem CategoryTheory.Limits.pullbackAssoc_hom_snd_fst {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] :
                      @[simp]
                      theorem CategoryTheory.Limits.pullbackAssoc_hom_snd_fst_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] {Z : C} (h : X₂ Z) :
                      @[simp]
                      theorem CategoryTheory.Limits.pullbackAssoc_hom_snd_snd {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] :
                      @[simp]
                      theorem CategoryTheory.Limits.pullbackAssoc_hom_snd_snd_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] {Z : C} (h : X₃ Z) :
                      @[simp]
                      theorem CategoryTheory.Limits.pullbackAssoc_inv_fst_snd {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] :
                      @[simp]
                      theorem CategoryTheory.Limits.pullbackAssoc_inv_fst_snd_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] {Z : C} (h : X₂ Z) :
                      @[simp]
                      theorem CategoryTheory.Limits.pullbackAssoc_inv_snd {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] :
                      @[simp]
                      theorem CategoryTheory.Limits.pullbackAssoc_inv_snd_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₁) (f₃ : X₂ Y₂) (f₄ : X₃ Y₂) [HasPullback f₁ f₂] [HasPullback f₃ f₄] [HasPullback (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄] [HasPullback f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)] {Z : C} (h : X₃ Z) :
                      def CategoryTheory.Limits.pushoutPushoutLeftIsPushout {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] :

                      (X₁ ⨿[Z₁] X₂) ⨿[Z₂] X₃ is the pushout (X₁ ⨿[Z₁] X₂) ×[X₂] (X₂ ⨿[Z₂] X₃).

                      Equations
                        Instances For
                          def CategoryTheory.Limits.pushoutAssocIsPushout {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] :

                          (X₁ ⨿[Z₁] X₂) ⨿[Z₂] X₃ is the pushout X₁ ⨿[Z₁] (X₂ ⨿[Z₂] X₃).

                          Equations
                            Instances For
                              theorem CategoryTheory.Limits.hasPushout_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] :
                              def CategoryTheory.Limits.pushoutPushoutRightIsPushout {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] :

                              X₁ ⨿[Z₁] (X₂ ⨿[Z₂] X₃) is the pushout (X₁ ⨿[Z₁] X₂) ×[X₂] (X₂ ⨿[Z₂] X₃).

                              Equations
                                Instances For
                                  def CategoryTheory.Limits.pushoutAssocSymmIsPushout {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] :

                                  X₁ ⨿[Z₁] (X₂ ⨿[Z₂] X₃) is the pushout (X₁ ⨿[Z₁] X₂) ⨿[Z₂] X₃.

                                  Equations
                                    Instances For
                                      theorem CategoryTheory.Limits.hasPushout_assoc_symm {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] :
                                      noncomputable def CategoryTheory.Limits.pushoutAssoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] :
                                      pushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄ pushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))

                                      The canonical isomorphism (X₁ ⨿[Z₁] X₂) ⨿[Z₂] X₃ ≅ X₁ ⨿[Z₁] (X₂ ⨿[Z₂] X₃).

                                      Equations
                                        Instances For
                                          @[simp]
                                          theorem CategoryTheory.Limits.inl_inl_pushoutAssoc_hom {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] :
                                          @[simp]
                                          theorem CategoryTheory.Limits.inl_inl_pushoutAssoc_hom_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] {Z : C} (h : pushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄)) Z) :
                                          @[simp]
                                          theorem CategoryTheory.Limits.inr_inl_pushoutAssoc_hom {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] :
                                          @[simp]
                                          theorem CategoryTheory.Limits.inr_inl_pushoutAssoc_hom_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] {Z : C} (h : pushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄)) Z) :
                                          @[simp]
                                          theorem CategoryTheory.Limits.inr_inr_pushoutAssoc_inv {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] :
                                          @[simp]
                                          theorem CategoryTheory.Limits.inr_inr_pushoutAssoc_inv_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] {Z : C} (h : pushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄ Z) :
                                          @[simp]
                                          theorem CategoryTheory.Limits.inl_pushoutAssoc_inv {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] :
                                          @[simp]
                                          theorem CategoryTheory.Limits.inl_pushoutAssoc_inv_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] {Z : C} (h : pushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄ Z) :
                                          @[simp]
                                          theorem CategoryTheory.Limits.inl_inr_pushoutAssoc_inv {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] :
                                          @[simp]
                                          theorem CategoryTheory.Limits.inl_inr_pushoutAssoc_inv_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] {Z : C} (h : pushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄ Z) :
                                          @[simp]
                                          theorem CategoryTheory.Limits.inr_pushoutAssoc_hom {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] :
                                          @[simp]
                                          theorem CategoryTheory.Limits.inr_pushoutAssoc_hom_assoc {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Z₁ Z₂ : C} (g₁ : Z₁ X₁) (g₂ : Z₁ X₂) (g₃ : Z₂ X₂) (g₄ : Z₂ X₃) [HasPushout g₁ g₂] [HasPushout g₃ g₄] [HasPushout (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄] [HasPushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))] {Z : C} (h : pushout g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄)) Z) :