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
  • One or more equations did not get rendered due to their size.
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
    • One or more equations did not get rendered due to their size.
    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
      • One or more equations did not get rendered due to their size.
      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
        • One or more equations did not get rendered due to their size.
        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
          • One or more equations did not get rendered due to their size.
          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₂)] :
            CategoryStruct.comp (pullbackAssoc f₁ f₂ f₃ f₄).inv (CategoryStruct.comp (pullback.fst (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄) (pullback.fst f₁ f₂)) = pullback.fst 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₂)] :
            CategoryStruct.comp (pullbackAssoc f₁ f₂ f₃ f₄).hom (pullback.fst f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)) = CategoryStruct.comp (pullback.fst (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄) (pullback.fst 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₂)] :
            CategoryStruct.comp (pullbackAssoc f₁ f₂ f₃ f₄).hom (CategoryStruct.comp (pullback.snd f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)) (pullback.snd f₃ f₄)) = pullback.snd (CategoryStruct.comp (pullback.snd f₁ 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₂)] :
            CategoryStruct.comp (pullbackAssoc f₁ f₂ f₃ f₄).inv (pullback.snd (CategoryStruct.comp (pullback.snd f₁ f₂) f₃) f₄) = CategoryStruct.comp (pullback.snd f₁ (CategoryStruct.comp (pullback.fst f₃ f₄) f₂)) (pullback.snd 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
            • One or more equations did not get rendered due to their size.
            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
              • One or more equations did not get rendered due to their size.
              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
                • One or more equations did not get rendered due to their size.
                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
                  • One or more equations did not get rendered due to their size.
                  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
                    • One or more equations did not get rendered due to their size.
                    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₄))] :
                      CategoryStruct.comp (pushout.inl g₁ g₂) (CategoryStruct.comp (pushout.inl (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄) (pushoutAssoc g₁ g₂ g₃ g₄).hom) = pushout.inl 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₄))] :
                      CategoryStruct.comp (pushout.inr g₁ g₂) (CategoryStruct.comp (pushout.inl (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄) (pushoutAssoc g₁ g₂ g₃ g₄).hom) = CategoryStruct.comp (pushout.inl g₃ g₄) (pushout.inr 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₄))] :
                      CategoryStruct.comp (pushout.inr g₃ g₄) (CategoryStruct.comp (pushout.inr g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))) (pushoutAssoc g₁ g₂ g₃ g₄).inv) = pushout.inr (CategoryStruct.comp g₃ (pushout.inr g₁ 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₄))] :
                      CategoryStruct.comp (pushout.inl g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))) (pushoutAssoc g₁ g₂ g₃ g₄).inv = CategoryStruct.comp (pushout.inl g₁ g₂) (pushout.inl (CategoryStruct.comp g₃ (pushout.inr g₁ 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₄))] :
                      CategoryStruct.comp (pushout.inl g₃ g₄) (CategoryStruct.comp (pushout.inr g₁ (CategoryStruct.comp g₂ (pushout.inl g₃ g₄))) (pushoutAssoc g₁ g₂ g₃ g₄).inv) = CategoryStruct.comp (pushout.inr g₁ g₂) (pushout.inl (CategoryStruct.comp g₃ (pushout.inr g₁ 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₄))] :
                      CategoryStruct.comp (pushout.inr (CategoryStruct.comp g₃ (pushout.inr g₁ g₂)) g₄) (pushoutAssoc g₁ g₂ g₃ g₄).hom = CategoryStruct.comp (pushout.inr g₃ g₄) (pushout.inr 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) :