Theorem: Bimod.pentagon_bimod
File: Mathlib/CategoryTheory/Monoidal/Bimod.lean

tactic: dsimp [associatorBimod]
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ whiskerRight (M.associatorBimod N P).hom Q ≫
      (M.associatorBimod (N.tensorBimod P) Q).hom ≫ M.whiskerLeft (N.associatorBimod P Q).hom =
    ((M.tensorBimod N).associatorBimod P Q).hom ≫ (M.associatorBimod N (P.tensorBimod Q)).hom
state_after: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ whiskerRight
        (isoOfIso
            { hom := AssociatorBimod.hom M N P, inv := AssociatorBimod.inv M N P, hom_inv_id := ⋯, inv_hom_id := ⋯ } ⋯
            ⋯).hom
        Q ≫
      (isoOfIso
            { hom := AssociatorBimod.hom M (N.tensorBimod P) Q, inv := AssociatorBimod.inv M (N.tensorBimod P) Q,
              hom_inv_id := ⋯, inv_hom_id := ⋯ }
            ⋯ ⋯).hom ≫
        M.whiskerLeft
          (isoOfIso
              { hom := AssociatorBimod.hom N P Q, inv := AssociatorBimod.inv N P Q, hom_inv_id := ⋯, inv_hom_id := ⋯ } ⋯
              ⋯).hom =
    (isoOfIso
          { hom := AssociatorBimod.hom (M.tensorBimod N) P Q, inv := AssociatorBimod.inv (M.tensorBimod N) P Q,
            hom_inv_id := ⋯, inv_hom_id := ⋯ }
          ⋯ ⋯).hom ≫
      (isoOfIso
          { hom := AssociatorBimod.hom M N (P.tensorBimod Q), inv := AssociatorBimod.inv M N (P.tensorBimod Q),
            hom_inv_id := ⋯, inv_hom_id := ⋯ }
          ⋯ ⋯).hom

tactic: ext
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ whiskerRight
        (isoOfIso
            { hom := AssociatorBimod.hom M N P, inv := AssociatorBimod.inv M N P, hom_inv_id := ⋯, inv_hom_id := ⋯ } ⋯
            ⋯).hom
        Q ≫
      (isoOfIso
            { hom := AssociatorBimod.hom M (N.tensorBimod P) Q, inv := AssociatorBimod.inv M (N.tensorBimod P) Q,
              hom_inv_id := ⋯, inv_hom_id := ⋯ }
            ⋯ ⋯).hom ≫
        M.whiskerLeft
          (isoOfIso
              { hom := AssociatorBimod.hom N P Q, inv := AssociatorBimod.inv N P Q, hom_inv_id := ⋯, inv_hom_id := ⋯ } ⋯
              ⋯).hom =
    (isoOfIso
          { hom := AssociatorBimod.hom (M.tensorBimod N) P Q, inv := AssociatorBimod.inv (M.tensorBimod N) P Q,
            hom_inv_id := ⋯, inv_hom_id := ⋯ }
          ⋯ ⋯).hom ≫
      (isoOfIso
          { hom := AssociatorBimod.hom M N (P.tensorBimod Q), inv := AssociatorBimod.inv M N (P.tensorBimod Q),
            hom_inv_id := ⋯, inv_hom_id := ⋯ }
          ⋯ ⋯).hom
state_after: case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (whiskerRight
          (isoOfIso
              { hom := AssociatorBimod.hom M N P, inv := AssociatorBimod.inv M N P, hom_inv_id := ⋯, inv_hom_id := ⋯ } ⋯
              ⋯).hom
          Q ≫
        (isoOfIso
              { hom := AssociatorBimod.hom M (N.tensorBimod P) Q, inv := AssociatorBimod.inv M (N.tensorBimod P) Q,
                hom_inv_id := ⋯, inv_hom_id := ⋯ }
              ⋯ ⋯).hom ≫
          M.whiskerLeft
            (isoOfIso
                { hom := AssociatorBimod.hom N P Q, inv := AssociatorBimod.inv N P Q, hom_inv_id := ⋯, inv_hom_id := ⋯ }
                ⋯ ⋯).hom).hom =
    ((isoOfIso
            { hom := AssociatorBimod.hom (M.tensorBimod N) P Q, inv := AssociatorBimod.inv (M.tensorBimod N) P Q,
              hom_inv_id := ⋯, inv_hom_id := ⋯ }
            ⋯ ⋯).hom ≫
        (isoOfIso
            { hom := AssociatorBimod.hom M N (P.tensorBimod Q), inv := AssociatorBimod.inv M N (P.tensorBimod Q),
              hom_inv_id := ⋯, inv_hom_id := ⋯ }
            ⋯ ⋯).hom).hom

tactic: apply coequalizer.hom_ext
state_before: case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (whiskerRight
          (isoOfIso
              { hom := AssociatorBimod.hom M N P, inv := AssociatorBimod.inv M N P, hom_inv_id := ⋯, inv_hom_id := ⋯ } ⋯
              ⋯).hom
          Q ≫
        (isoOfIso
              { hom := AssociatorBimod.hom M (N.tensorBimod P) Q, inv := AssociatorBimod.inv M (N.tensorBimod P) Q,
                hom_inv_id := ⋯, inv_hom_id := ⋯ }
              ⋯ ⋯).hom ≫
          M.whiskerLeft
            (isoOfIso
                { hom := AssociatorBimod.hom N P Q, inv := AssociatorBimod.inv N P Q, hom_inv_id := ⋯, inv_hom_id := ⋯ }
                ⋯ ⋯).hom).hom =
    ((isoOfIso
            { hom := AssociatorBimod.hom (M.tensorBimod N) P Q, inv := AssociatorBimod.inv (M.tensorBimod N) P Q,
              hom_inv_id := ⋯, inv_hom_id := ⋯ }
            ⋯ ⋯).hom ≫
        (isoOfIso
            { hom := AssociatorBimod.hom M N (P.tensorBimod Q), inv := AssociatorBimod.inv M N (P.tensorBimod Q),
              hom_inv_id := ⋯, inv_hom_id := ⋯ }
            ⋯ ⋯).hom).hom
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.π (((M.tensorBimod N).tensorBimod P).actRight ▷ Q.X)
        ((α_ ((M.tensorBimod N).tensorBimod P).X Y.X Q.X).hom ≫ ((M.tensorBimod N).tensorBimod P).X ◁ Q.actLeft) ≫
      (whiskerRight
            (isoOfIso
                { hom := AssociatorBimod.hom M N P, inv := AssociatorBimod.inv M N P, hom_inv_id := ⋯, inv_hom_id := ⋯ }
                ⋯ ⋯).hom
            Q ≫
          (isoOfIso
                { hom := AssociatorBimod.hom M (N.tensorBimod P) Q, inv := AssociatorBimod.inv M (N.tensorBimod P) Q,
                  hom_inv_id := ⋯, inv_hom_id := ⋯ }
                ⋯ ⋯).hom ≫
            M.whiskerLeft
              (isoOfIso
                  { hom := AssociatorBimod.hom N P Q, inv := AssociatorBimod.inv N P Q, hom_inv_id := ⋯,
                    inv_hom_id := ⋯ }
                  ⋯ ⋯).hom).hom =
    coequalizer.π (((M.tensorBimod N).tensorBimod P).actRight ▷ Q.X)
        ((α_ ((M.tensorBimod N).tensorBimod P).X Y.X Q.X).hom ≫ ((M.tensorBimod N).tensorBimod P).X ◁ Q.actLeft) ≫
      ((isoOfIso
              { hom := AssociatorBimod.hom (M.tensorBimod N) P Q, inv := AssociatorBimod.inv (M.tensorBimod N) P Q,
                hom_inv_id := ⋯, inv_hom_id := ⋯ }
              ⋯ ⋯).hom ≫
          (isoOfIso
              { hom := AssociatorBimod.hom M N (P.tensorBimod Q), inv := AssociatorBimod.inv M N (P.tensorBimod Q),
                hom_inv_id := ⋯, inv_hom_id := ⋯ }
              ⋯ ⋯).hom).hom

tactic: dsimp
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.π (((M.tensorBimod N).tensorBimod P).actRight ▷ Q.X)
        ((α_ ((M.tensorBimod N).tensorBimod P).X Y.X Q.X).hom ≫ ((M.tensorBimod N).tensorBimod P).X ◁ Q.actLeft) ≫
      (whiskerRight
            (isoOfIso
                { hom := AssociatorBimod.hom M N P, inv := AssociatorBimod.inv M N P, hom_inv_id := ⋯, inv_hom_id := ⋯ }
                ⋯ ⋯).hom
            Q ≫
          (isoOfIso
                { hom := AssociatorBimod.hom M (N.tensorBimod P) Q, inv := AssociatorBimod.inv M (N.tensorBimod P) Q,
                  hom_inv_id := ⋯, inv_hom_id := ⋯ }
                ⋯ ⋯).hom ≫
            M.whiskerLeft
              (isoOfIso
                  { hom := AssociatorBimod.hom N P Q, inv := AssociatorBimod.inv N P Q, hom_inv_id := ⋯,
                    inv_hom_id := ⋯ }
                  ⋯ ⋯).hom).hom =
    coequalizer.π (((M.tensorBimod N).tensorBimod P).actRight ▷ Q.X)
        ((α_ ((M.tensorBimod N).tensorBimod P).X Y.X Q.X).hom ≫ ((M.tensorBimod N).tensorBimod P).X ◁ Q.actLeft) ≫
      ((isoOfIso
              { hom := AssociatorBimod.hom (M.tensorBimod N) P Q, inv := AssociatorBimod.inv (M.tensorBimod N) P Q,
                hom_inv_id := ⋯, inv_hom_id := ⋯ }
              ⋯ ⋯).hom ≫
          (isoOfIso
              { hom := AssociatorBimod.hom M N (P.tensorBimod Q), inv := AssociatorBimod.inv M N (P.tensorBimod Q),
                hom_inv_id := ⋯, inv_hom_id := ⋯ }
              ⋯ ⋯).hom).hom
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.π (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
        ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft) ≫
      colimMap
          (parallelPairHom (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
            ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft)
            (TensorBimod.actRight M (N.tensorBimod P) ▷ Q.X)
            ((α_ (TensorBimod.X M (N.tensorBimod P)) Y.X Q.X).hom ≫ TensorBimod.X M (N.tensorBimod P) ◁ Q.actLeft)
            (AssociatorBimod.hom M N P ▷ Y.X ▷ Q.X) (AssociatorBimod.hom M N P ▷ Q.X) ⋯ ⋯) ≫
        AssociatorBimod.hom M (N.tensorBimod P) Q ≫
          colimMap
            (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
              ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
              (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
              ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
              ((M.X ⊗ W.X) ◁ AssociatorBimod.hom N P Q) (M.X ◁ AssociatorBimod.hom N P Q) ⋯ ⋯) =
    coequalizer.π (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
        ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft) ≫
      AssociatorBimod.hom (M.tensorBimod N) P Q ≫ AssociatorBimod.hom M N (P.tensorBimod Q)

tactic: dsimp only [AssociatorBimod.hom]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.π (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
        ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft) ≫
      colimMap
          (parallelPairHom (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
            ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft)
            (TensorBimod.actRight M (N.tensorBimod P) ▷ Q.X)
            ((α_ (TensorBimod.X M (N.tensorBimod P)) Y.X Q.X).hom ≫ TensorBimod.X M (N.tensorBimod P) ◁ Q.actLeft)
            (AssociatorBimod.hom M N P ▷ Y.X ▷ Q.X) (AssociatorBimod.hom M N P ▷ Q.X) ⋯ ⋯) ≫
        AssociatorBimod.hom M (N.tensorBimod P) Q ≫
          colimMap
            (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
              ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
              (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
              ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
              ((M.X ⊗ W.X) ◁ AssociatorBimod.hom N P Q) (M.X ◁ AssociatorBimod.hom N P Q) ⋯ ⋯) =
    coequalizer.π (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
        ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft) ≫
      AssociatorBimod.hom (M.tensorBimod N) P Q ≫ AssociatorBimod.hom M N (P.tensorBimod Q)
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.π (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
        ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft) ≫
      colimMap
          (parallelPairHom (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
            ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft)
            (TensorBimod.actRight M (N.tensorBimod P) ▷ Q.X)
            ((α_ (TensorBimod.X M (N.tensorBimod P)) Y.X Q.X).hom ≫ TensorBimod.X M (N.tensorBimod P) ◁ Q.actLeft)
            (coequalizer.desc (AssociatorBimod.homAux M N P) ⋯ ▷ Y.X ▷ Q.X)
            (coequalizer.desc (AssociatorBimod.homAux M N P) ⋯ ▷ Q.X) ⋯ ⋯) ≫
        coequalizer.desc (AssociatorBimod.homAux M (N.tensorBimod P) Q) ⋯ ≫
          colimMap
            (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
              ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
              (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
              ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
              ((M.X ⊗ W.X) ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯)
              (M.X ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯) ⋯ ⋯) =
    coequalizer.π (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
        ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft) ≫
      coequalizer.desc (AssociatorBimod.homAux (M.tensorBimod N) P Q) ⋯ ≫
        coequalizer.desc (AssociatorBimod.homAux M N (P.tensorBimod Q)) ⋯

tactic: slice_lhs 1 2 => rw [ι_colimMap, parallelPairHom_app_one]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.π (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
        ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft) ≫
      colimMap
          (parallelPairHom (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
            ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft)
            (TensorBimod.actRight M (N.tensorBimod P) ▷ Q.X)
            ((α_ (TensorBimod.X M (N.tensorBimod P)) Y.X Q.X).hom ≫ TensorBimod.X M (N.tensorBimod P) ◁ Q.actLeft)
            (coequalizer.desc (AssociatorBimod.homAux M N P) ⋯ ▷ Y.X ▷ Q.X)
            (coequalizer.desc (AssociatorBimod.homAux M N P) ⋯ ▷ Q.X) ⋯ ⋯) ≫
        coequalizer.desc (AssociatorBimod.homAux M (N.tensorBimod P) Q) ⋯ ≫
          colimMap
            (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
              ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
              (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
              ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
              ((M.X ⊗ W.X) ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯)
              (M.X ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯) ⋯ ⋯) =
    coequalizer.π (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
        ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft) ≫
      coequalizer.desc (AssociatorBimod.homAux (M.tensorBimod N) P Q) ⋯ ≫
        coequalizer.desc (AssociatorBimod.homAux M N (P.tensorBimod Q)) ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ ((coequalizer.desc (AssociatorBimod.homAux M N P) ⋯ ▷ Q.X ≫
          colimit.ι
            (parallelPair (TensorBimod.actRight M (N.tensorBimod P) ▷ Q.X)
              ((α_ (TensorBimod.X M (N.tensorBimod P)) Y.X Q.X).hom ≫ TensorBimod.X M (N.tensorBimod P) ◁ Q.actLeft))
            WalkingParallelPair.one) ≫
        coequalizer.desc (AssociatorBimod.homAux M (N.tensorBimod P) Q) ⋯) ≫
      colimMap
        (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
          ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
          (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
          ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
          ((M.X ⊗ W.X) ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯)
          (M.X ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯) ⋯ ⋯) =
    coequalizer.π (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
        ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft) ≫
      coequalizer.desc (AssociatorBimod.homAux (M.tensorBimod N) P Q) ⋯ ≫
        coequalizer.desc (AssociatorBimod.homAux M N (P.tensorBimod Q)) ⋯

tactic: slice_lhs 2 3 => rw [coequalizer.π_desc]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ ((coequalizer.desc (AssociatorBimod.homAux M N P) ⋯ ▷ Q.X ≫
          colimit.ι
            (parallelPair (TensorBimod.actRight M (N.tensorBimod P) ▷ Q.X)
              ((α_ (TensorBimod.X M (N.tensorBimod P)) Y.X Q.X).hom ≫ TensorBimod.X M (N.tensorBimod P) ◁ Q.actLeft))
            WalkingParallelPair.one) ≫
        coequalizer.desc (AssociatorBimod.homAux M (N.tensorBimod P) Q) ⋯) ≫
      colimMap
        (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
          ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
          (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
          ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
          ((M.X ⊗ W.X) ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯)
          (M.X ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯) ⋯ ⋯) =
    coequalizer.π (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
        ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft) ≫
      coequalizer.desc (AssociatorBimod.homAux (M.tensorBimod N) P Q) ⋯ ≫
        coequalizer.desc (AssociatorBimod.homAux M N (P.tensorBimod Q)) ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.desc (AssociatorBimod.homAux M N P) ⋯ ▷ Q.X ≫
      AssociatorBimod.homAux M (N.tensorBimod P) Q ≫
        colimMap
          (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
            ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
            (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
            ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
            ((M.X ⊗ W.X) ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯)
            (M.X ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯) ⋯ ⋯) =
    coequalizer.π (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
        ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft) ≫
      coequalizer.desc (AssociatorBimod.homAux (M.tensorBimod N) P Q) ⋯ ≫
        coequalizer.desc (AssociatorBimod.homAux M N (P.tensorBimod Q)) ⋯

tactic: slice_rhs 1 2 => rw [coequalizer.π_desc]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.desc (AssociatorBimod.homAux M N P) ⋯ ▷ Q.X ≫
      AssociatorBimod.homAux M (N.tensorBimod P) Q ≫
        colimMap
          (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
            ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
            (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
            ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
            ((M.X ⊗ W.X) ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯)
            (M.X ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯) ⋯ ⋯) =
    coequalizer.π (TensorBimod.actRight (M.tensorBimod N) P ▷ Q.X)
        ((α_ (TensorBimod.X (M.tensorBimod N) P) Y.X Q.X).hom ≫ TensorBimod.X (M.tensorBimod N) P ◁ Q.actLeft) ≫
      coequalizer.desc (AssociatorBimod.homAux (M.tensorBimod N) P Q) ⋯ ≫
        coequalizer.desc (AssociatorBimod.homAux M N (P.tensorBimod Q)) ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.desc (AssociatorBimod.homAux M N P) ⋯ ▷ Q.X ≫
      AssociatorBimod.homAux M (N.tensorBimod P) Q ≫
        colimMap
          (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
            ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
            (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
            ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
            ((M.X ⊗ W.X) ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯)
            (M.X ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯) ⋯ ⋯) =
    AssociatorBimod.homAux (M.tensorBimod N) P Q ≫ coequalizer.desc (AssociatorBimod.homAux M N (P.tensorBimod Q)) ⋯

tactic: dsimp [AssociatorBimod.homAux]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.desc (AssociatorBimod.homAux M N P) ⋯ ▷ Q.X ≫
      AssociatorBimod.homAux M (N.tensorBimod P) Q ≫
        colimMap
          (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
            ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
            (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
            ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
            ((M.X ⊗ W.X) ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯)
            (M.X ◁ coequalizer.desc (AssociatorBimod.homAux N P Q) ⋯) ⋯ ⋯) =
    AssociatorBimod.homAux (M.tensorBimod N) P Q ≫ coequalizer.desc (AssociatorBimod.homAux M N (P.tensorBimod Q)) ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.desc
          ((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X P.X).hom ≫
                M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                    ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
              ⋯)
          ⋯ ▷
        Q.X ≫
      ((PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
              ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv ≫
          coequalizer.desc
            ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
              M.X ◁
                  coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                    ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
                coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                  ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫
                    M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
            ⋯) ≫
        colimMap
          (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
            ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
            (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
            ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
            ((M.X ⊗ W.X) ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                          ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            (M.X ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                          ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            ⋯ ⋯) =
    ((PreservesCoequalizer.iso (tensorRight Q.X) (TensorBimod.actRight M N ▷ P.X)
            ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft)).inv ≫
        coequalizer.desc
          ((α_ (TensorBimod.X M N) P.X Q.X).hom ≫
            TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
              coequalizer.π (TensorBimod.actRight M N ▷ TensorBimod.X P Q)
                ((α_ (TensorBimod.X M N) X.X (TensorBimod.X P Q)).hom ≫ TensorBimod.X M N ◁ TensorBimod.actLeft P Q))
          ⋯) ≫
      coequalizer.desc
        ((PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
              ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
          coequalizer.desc
            ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
              M.X ◁
                  coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                    ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                  ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                    M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            ⋯)
        ⋯

tactic: refine (cancel_epi ((tensorRight _).map (coequalizer.π _ _))).1 ?_
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.desc
          ((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X P.X).hom ≫
                M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                    ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
              ⋯)
          ⋯ ▷
        Q.X ≫
      ((PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
              ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv ≫
          coequalizer.desc
            ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
              M.X ◁
                  coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                    ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
                coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                  ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫
                    M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
            ⋯) ≫
        colimMap
          (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
            ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
            (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
            ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
            ((M.X ⊗ W.X) ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                          ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            (M.X ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                          ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            ⋯ ⋯) =
    ((PreservesCoequalizer.iso (tensorRight Q.X) (TensorBimod.actRight M N ▷ P.X)
            ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft)).inv ≫
        coequalizer.desc
          ((α_ (TensorBimod.X M N) P.X Q.X).hom ≫
            TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
              coequalizer.π (TensorBimod.actRight M N ▷ TensorBimod.X P Q)
                ((α_ (TensorBimod.X M N) X.X (TensorBimod.X P Q)).hom ≫ TensorBimod.X M N ◁ TensorBimod.actLeft P Q))
          ⋯) ≫
      coequalizer.desc
        ((PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
              ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
          coequalizer.desc
            ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
              M.X ◁
                  coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                    ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                  ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                    M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            ⋯)
        ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (tensorRight Q.X).map
        (coequalizer.π ((M.tensorBimod N).actRight ▷ P.X)
          ((α_ (M.tensorBimod N).X X.X P.X).hom ≫ (M.tensorBimod N).X ◁ P.actLeft)) ≫
      coequalizer.desc
            ((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X)
                  ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
              coequalizer.desc
                ((α_ M.X N.X P.X).hom ≫
                  M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                    coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                      ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                ⋯)
            ⋯ ▷
          Q.X ≫
        ((PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
                ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv ≫
            coequalizer.desc
              ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
                M.X ◁
                    coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                      ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                    ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫
                      M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
              ⋯) ≫
          colimMap
            (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
              ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
              (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
              ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
              ((M.X ⊗ W.X) ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                            ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              (M.X ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                            ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              ⋯ ⋯) =
    (tensorRight Q.X).map
        (coequalizer.π ((M.tensorBimod N).actRight ▷ P.X)
          ((α_ (M.tensorBimod N).X X.X P.X).hom ≫ (M.tensorBimod N).X ◁ P.actLeft)) ≫
      ((PreservesCoequalizer.iso (tensorRight Q.X) (TensorBimod.actRight M N ▷ P.X)
              ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft)).inv ≫
          coequalizer.desc
            ((α_ (TensorBimod.X M N) P.X Q.X).hom ≫
              TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                coequalizer.π (TensorBimod.actRight M N ▷ TensorBimod.X P Q)
                  ((α_ (TensorBimod.X M N) X.X (TensorBimod.X P Q)).hom ≫ TensorBimod.X M N ◁ TensorBimod.actLeft P Q))
            ⋯) ≫
        coequalizer.desc
          ((PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯)
          ⋯

tactic: dsimp
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (tensorRight Q.X).map
        (coequalizer.π ((M.tensorBimod N).actRight ▷ P.X)
          ((α_ (M.tensorBimod N).X X.X P.X).hom ≫ (M.tensorBimod N).X ◁ P.actLeft)) ≫
      coequalizer.desc
            ((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X)
                  ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
              coequalizer.desc
                ((α_ M.X N.X P.X).hom ≫
                  M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                    coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                      ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                ⋯)
            ⋯ ▷
          Q.X ≫
        ((PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
                ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv ≫
            coequalizer.desc
              ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
                M.X ◁
                    coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                      ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                    ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫
                      M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
              ⋯) ≫
          colimMap
            (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
              ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
              (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
              ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
              ((M.X ⊗ W.X) ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                            ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              (M.X ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                            ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              ⋯ ⋯) =
    (tensorRight Q.X).map
        (coequalizer.π ((M.tensorBimod N).actRight ▷ P.X)
          ((α_ (M.tensorBimod N).X X.X P.X).hom ≫ (M.tensorBimod N).X ◁ P.actLeft)) ≫
      ((PreservesCoequalizer.iso (tensorRight Q.X) (TensorBimod.actRight M N ▷ P.X)
              ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft)).inv ≫
          coequalizer.desc
            ((α_ (TensorBimod.X M N) P.X Q.X).hom ≫
              TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                coequalizer.π (TensorBimod.actRight M N ▷ TensorBimod.X P Q)
                  ((α_ (TensorBimod.X M N) X.X (TensorBimod.X P Q)).hom ≫ TensorBimod.X M N ◁ TensorBimod.actLeft P Q))
            ⋯) ≫
        coequalizer.desc
          ((PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯)
          ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.π (TensorBimod.actRight M N ▷ P.X)
          ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft) ▷
        Q.X ≫
      coequalizer.desc
            ((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X)
                  ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
              coequalizer.desc
                ((α_ M.X N.X P.X).hom ≫
                  M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                    coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                      ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                ⋯)
            ⋯ ▷
          Q.X ≫
        ((PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
                ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv ≫
            coequalizer.desc
              ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
                M.X ◁
                    coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                      ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                    ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫
                      M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
              ⋯) ≫
          colimMap
            (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
              ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
              (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
              ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
              ((M.X ⊗ W.X) ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                            ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              (M.X ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                            ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              ⋯ ⋯) =
    coequalizer.π (TensorBimod.actRight M N ▷ P.X)
          ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft) ▷
        Q.X ≫
      ((PreservesCoequalizer.iso (tensorRight Q.X) (TensorBimod.actRight M N ▷ P.X)
              ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft)).inv ≫
          coequalizer.desc
            ((α_ (TensorBimod.X M N) P.X Q.X).hom ≫
              TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                coequalizer.π (TensorBimod.actRight M N ▷ TensorBimod.X P Q)
                  ((α_ (TensorBimod.X M N) X.X (TensorBimod.X P Q)).hom ≫ TensorBimod.X M N ◁ TensorBimod.actLeft P Q))
            ⋯) ≫
        coequalizer.desc
          ((PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯)
          ⋯

tactic: slice_lhs 1 2 => rw [← comp_whiskerRight, coequalizer.π_desc]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.π (TensorBimod.actRight M N ▷ P.X)
          ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft) ▷
        Q.X ≫
      coequalizer.desc
            ((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X)
                  ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
              coequalizer.desc
                ((α_ M.X N.X P.X).hom ≫
                  M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                    coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                      ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                ⋯)
            ⋯ ▷
          Q.X ≫
        ((PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
                ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv ≫
            coequalizer.desc
              ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
                M.X ◁
                    coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                      ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                    ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫
                      M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
              ⋯) ≫
          colimMap
            (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
              ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
              (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
              ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
              ((M.X ⊗ W.X) ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                            ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              (M.X ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                            ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              ⋯ ⋯) =
    coequalizer.π (TensorBimod.actRight M N ▷ P.X)
          ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft) ▷
        Q.X ≫
      ((PreservesCoequalizer.iso (tensorRight Q.X) (TensorBimod.actRight M N ▷ P.X)
              ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft)).inv ≫
          coequalizer.desc
            ((α_ (TensorBimod.X M N) P.X Q.X).hom ≫
              TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                coequalizer.π (TensorBimod.actRight M N ▷ TensorBimod.X P Q)
                  ((α_ (TensorBimod.X M N) X.X (TensorBimod.X P Q)).hom ≫ TensorBimod.X M N ◁ TensorBimod.actLeft P Q))
            ⋯) ≫
        coequalizer.desc
          ((PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯)
          ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ ((((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
              coequalizer.desc
                ((α_ M.X N.X P.X).hom ≫
                  M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                    coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                      ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                ⋯) ▷
            Q.X ≫
          (PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
              ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv) ≫
        coequalizer.desc
          ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
            M.X ◁
                coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                  ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
              coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
          ⋯) ≫
      colimMap
        (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
          ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
          (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
          ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
          ((M.X ⊗ W.X) ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          (M.X ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          ⋯ ⋯) =
    coequalizer.π (TensorBimod.actRight M N ▷ P.X)
          ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft) ▷
        Q.X ≫
      ((PreservesCoequalizer.iso (tensorRight Q.X) (TensorBimod.actRight M N ▷ P.X)
              ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft)).inv ≫
          coequalizer.desc
            ((α_ (TensorBimod.X M N) P.X Q.X).hom ≫
              TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                coequalizer.π (TensorBimod.actRight M N ▷ TensorBimod.X P Q)
                  ((α_ (TensorBimod.X M N) X.X (TensorBimod.X P Q)).hom ≫ TensorBimod.X M N ◁ TensorBimod.actLeft P Q))
            ⋯) ≫
        coequalizer.desc
          ((PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯)
          ⋯

tactic: slice_rhs 1 3 => rw [π_tensor_id_preserves_coequalizer_inv_desc]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ ((((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
              coequalizer.desc
                ((α_ M.X N.X P.X).hom ≫
                  M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                    coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                      ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                ⋯) ▷
            Q.X ≫
          (PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
              ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv) ≫
        coequalizer.desc
          ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
            M.X ◁
                coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                  ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
              coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
          ⋯) ≫
      colimMap
        (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
          ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
          (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
          ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
          ((M.X ⊗ W.X) ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          (M.X ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          ⋯ ⋯) =
    coequalizer.π (TensorBimod.actRight M N ▷ P.X)
          ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft) ▷
        Q.X ≫
      ((PreservesCoequalizer.iso (tensorRight Q.X) (TensorBimod.actRight M N ▷ P.X)
              ((α_ (TensorBimod.X M N) X.X P.X).hom ≫ TensorBimod.X M N ◁ P.actLeft)).inv ≫
          coequalizer.desc
            ((α_ (TensorBimod.X M N) P.X Q.X).hom ≫
              TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                coequalizer.π (TensorBimod.actRight M N ▷ TensorBimod.X P Q)
                  ((α_ (TensorBimod.X M N) X.X (TensorBimod.X P Q)).hom ≫ TensorBimod.X M N ◁ TensorBimod.actLeft P Q))
            ⋯) ≫
        coequalizer.desc
          ((PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯)
          ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ ((((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
              coequalizer.desc
                ((α_ M.X N.X P.X).hom ≫
                  M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                    coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                      ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                ⋯) ▷
            Q.X ≫
          (PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
              ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv) ≫
        coequalizer.desc
          ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
            M.X ◁
                coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                  ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
              coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
          ⋯) ≫
      colimMap
        (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
          ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
          (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
          ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
          ((M.X ⊗ W.X) ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          (M.X ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          ⋯ ⋯) =
    ((α_ (TensorBimod.X M N) P.X Q.X).hom ≫
        TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          coequalizer.π (TensorBimod.actRight M N ▷ TensorBimod.X P Q)
            ((α_ (TensorBimod.X M N) X.X (TensorBimod.X P Q)).hom ≫ TensorBimod.X M N ◁ TensorBimod.actLeft P Q)) ≫
      coequalizer.desc
        ((PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
              ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
          coequalizer.desc
            ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
              M.X ◁
                  coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                    ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                  ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                    M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            ⋯)
        ⋯

tactic: slice_rhs 3 4 => rw [coequalizer.π_desc]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ ((((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
              coequalizer.desc
                ((α_ M.X N.X P.X).hom ≫
                  M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                    coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                      ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                ⋯) ▷
            Q.X ≫
          (PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
              ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv) ≫
        coequalizer.desc
          ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
            M.X ◁
                coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                  ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
              coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
          ⋯) ≫
      colimMap
        (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
          ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
          (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
          ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
          ((M.X ⊗ W.X) ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          (M.X ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          ⋯ ⋯) =
    ((α_ (TensorBimod.X M N) P.X Q.X).hom ≫
        TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          coequalizer.π (TensorBimod.actRight M N ▷ TensorBimod.X P Q)
            ((α_ (TensorBimod.X M N) X.X (TensorBimod.X P Q)).hom ≫ TensorBimod.X M N ◁ TensorBimod.actLeft P Q)) ≫
      coequalizer.desc
        ((PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
              ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
          coequalizer.desc
            ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
              M.X ◁
                  coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                    ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                  ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                    M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            ⋯)
        ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ ((((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
              coequalizer.desc
                ((α_ M.X N.X P.X).hom ≫
                  M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                    coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                      ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                ⋯) ▷
            Q.X ≫
          (PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
              ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv) ≫
        coequalizer.desc
          ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
            M.X ◁
                coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                  ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
              coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
          ⋯) ≫
      colimMap
        (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
          ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
          (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
          ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
          ((M.X ⊗ W.X) ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          (M.X ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          ⋯ ⋯) =
    (α_ (TensorBimod.X M N) P.X Q.X).hom ≫
      TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
        (PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
              ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
          coequalizer.desc
            ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
              M.X ◁
                  coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                    ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                  ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                    M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            ⋯

tactic: refine (cancel_epi ((tensorRight _ ⋙ tensorRight _).map (coequalizer.π _ _))).1 ?_
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ ((((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
              coequalizer.desc
                ((α_ M.X N.X P.X).hom ≫
                  M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                    coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                      ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                ⋯) ▷
            Q.X ≫
          (PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
              ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv) ≫
        coequalizer.desc
          ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
            M.X ◁
                coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                  ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
              coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
          ⋯) ≫
      colimMap
        (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
          ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
          (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
          ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
          ((M.X ⊗ W.X) ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          (M.X ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          ⋯ ⋯) =
    (α_ (TensorBimod.X M N) P.X Q.X).hom ≫
      TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
        (PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
              ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
          coequalizer.desc
            ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
              M.X ◁
                  coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                    ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                  ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                    M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (tensorRight P.X ⋙ tensorRight Q.X).map (coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) ≫
      ((((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ M.X N.X P.X).hom ≫
                    M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                      coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                        ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                  ⋯) ▷
              Q.X ≫
            (PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
                ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv) ≫
          coequalizer.desc
            ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
              M.X ◁
                  coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                    ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
                coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                  ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫
                    M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
            ⋯) ≫
        colimMap
          (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
            ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
            (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
            ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
            ((M.X ⊗ W.X) ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                          ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            (M.X ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                          ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            ⋯ ⋯) =
    (tensorRight P.X ⋙ tensorRight Q.X).map
        (coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) ≫
      (α_ (TensorBimod.X M N) P.X Q.X).hom ≫
        TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯

tactic: dsimp
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (tensorRight P.X ⋙ tensorRight Q.X).map (coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) ≫
      ((((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ M.X N.X P.X).hom ≫
                    M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                      coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                        ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                  ⋯) ▷
              Q.X ≫
            (PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
                ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv) ≫
          coequalizer.desc
            ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
              M.X ◁
                  coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                    ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
                coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                  ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫
                    M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
            ⋯) ≫
        colimMap
          (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
            ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
            (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
            ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
            ((M.X ⊗ W.X) ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                          ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            (M.X ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                          ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            ⋯ ⋯) =
    (tensorRight P.X ⋙ tensorRight Q.X).map
        (coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) ≫
      (α_ (TensorBimod.X M N) P.X Q.X).hom ≫
        TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      ((((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ M.X N.X P.X).hom ≫
                    M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                      coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                        ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                  ⋯) ▷
              Q.X ≫
            (PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
                ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv) ≫
          coequalizer.desc
            ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
              M.X ◁
                  coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                    ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
                coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                  ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫
                    M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
            ⋯) ≫
        colimMap
          (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
            ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
            (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
            ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
            ((M.X ⊗ W.X) ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                          ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            (M.X ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                          ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            ⋯ ⋯) =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (TensorBimod.X M N) P.X Q.X).hom ≫
        TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯

tactic: slice_lhs 1 2 =>
  rw [← comp_whiskerRight, π_tensor_id_preserves_coequalizer_inv_desc, comp_whiskerRight,
    comp_whiskerRight]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      ((((PreservesCoequalizer.iso (tensorRight P.X) (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ M.X N.X P.X).hom ≫
                    M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ≫
                      coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                        ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P))
                  ⋯) ▷
              Q.X ≫
            (PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
                ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv) ≫
          coequalizer.desc
            ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
              M.X ◁
                  coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                    ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
                coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                  ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫
                    M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
            ⋯) ≫
        colimMap
          (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
            ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
            (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
            ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
            ((M.X ⊗ W.X) ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                          ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            (M.X ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                          ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            ⋯ ⋯) =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (TensorBimod.X M N) P.X Q.X).hom ≫
        TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ ((((α_ M.X N.X P.X).hom ▷ Q.X ≫
            (M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) ▷ Q.X ≫
              coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                  ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P) ▷
                Q.X) ≫
          (PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
              ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv) ≫
        coequalizer.desc
          ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
            M.X ◁
                coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                  ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
              coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
          ⋯) ≫
      colimMap
        (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
          ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
          (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
          ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
          ((M.X ⊗ W.X) ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          (M.X ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          ⋯ ⋯) =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (TensorBimod.X M N) P.X Q.X).hom ≫
        TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯

tactic: slice_lhs 3 5 => rw [π_tensor_id_preserves_coequalizer_inv_desc]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ ((((α_ M.X N.X P.X).hom ▷ Q.X ≫
            (M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) ▷ Q.X ≫
              coequalizer.π (M.actRight ▷ TensorBimod.X N P)
                  ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P) ▷
                Q.X) ≫
          (PreservesCoequalizer.iso (tensorRight Q.X) (M.actRight ▷ TensorBimod.X N P)
              ((α_ M.X W.X (TensorBimod.X N P)).hom ≫ M.X ◁ TensorBimod.actLeft N P)).inv) ≫
        coequalizer.desc
          ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
            M.X ◁
                coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                  ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
              coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q))
          ⋯) ≫
      colimMap
        (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
          ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
          (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
          ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
          ((M.X ⊗ W.X) ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          (M.X ◁
            coequalizer.desc
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                        ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                  ⋯)
              ⋯)
          ⋯ ⋯) =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (TensorBimod.X M N) P.X Q.X).hom ≫
        TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) ▷ Q.X ≫
        ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
            M.X ◁
                coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                  ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
              coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫
                  M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)) ≫
          colimMap
            (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
              ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
              (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
              ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
              ((M.X ⊗ W.X) ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                            ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              (M.X ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                            ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              ⋯ ⋯) =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (TensorBimod.X M N) P.X Q.X).hom ≫
        TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯

tactic: dsimp only [TensorBimod.X]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) ▷ Q.X ≫
        ((α_ M.X (TensorBimod.X N P) Q.X).hom ≫
            M.X ◁
                coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                  ((α_ (TensorBimod.X N P) Y.X Q.X).hom ≫ TensorBimod.X N P ◁ Q.actLeft) ≫
              coequalizer.π (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
                ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫
                  M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)) ≫
          colimMap
            (parallelPairHom (M.actRight ▷ TensorBimod.X (N.tensorBimod P) Q)
              ((α_ M.X W.X (TensorBimod.X (N.tensorBimod P) Q)).hom ≫ M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
              (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
              ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫ M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
              ((M.X ⊗ W.X) ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                            ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              (M.X ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                            ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              ⋯ ⋯) =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (TensorBimod.X M N) P.X Q.X).hom ≫
        TensorBimod.X M N ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso (tensorRight (TensorBimod.X P Q)) (M.actRight ▷ N.X)
                ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (TensorBimod.X P Q)).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ TensorBimod.X P Q)
                      ((α_ N.X X.X (TensorBimod.X P Q)).hom ≫ N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π (M.actRight ▷ TensorBimod.X N (P.tensorBimod Q))
                    ((α_ M.X W.X (TensorBimod.X N (P.tensorBimod Q))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) ▷ Q.X ≫
        ((α_ M.X (coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) Q.X).hom ≫
            M.X ◁
                coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                  ((α_ (coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) Y.X Q.X).hom ≫
                    coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ◁ Q.actLeft) ≫
              coequalizer.π
                (M.actRight ▷
                  coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                    ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))
                ((α_ M.X W.X
                      (coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                        ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))).hom ≫
                  M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)) ≫
          colimMap
            (parallelPairHom
              (M.actRight ▷
                coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                  ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))
              ((α_ M.X W.X
                    (coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                      ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
              ((M.X ⊗ W.X) ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π
                            (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                            ((α_ N.X X.X
                                  (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                              N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              (M.X ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π
                            (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                            ((α_ N.X X.X
                                  (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                              N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              ⋯ ⋯) =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) P.X Q.X).hom ≫
        coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ◁
            coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso
                (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)))
                (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                      ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                        N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π
                    (M.actRight ▷
                      coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                    ((α_ M.X W.X
                          (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                            ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯

tactic: slice_lhs 2 3 => rw [associator_naturality_middle]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) ▷ Q.X ≫
        ((α_ M.X (coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) Q.X).hom ≫
            M.X ◁
                coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                  ((α_ (coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) Y.X Q.X).hom ≫
                    coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ◁ Q.actLeft) ≫
              coequalizer.π
                (M.actRight ▷
                  coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                    ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))
                ((α_ M.X W.X
                      (coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                        ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))).hom ≫
                  M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)) ≫
          colimMap
            (parallelPairHom
              (M.actRight ▷
                coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                  ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))
              ((α_ M.X W.X
                    (coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                      ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
              ((M.X ⊗ W.X) ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π
                            (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                            ((α_ N.X X.X
                                  (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                              N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              (M.X ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π
                            (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                            ((α_ N.X X.X
                                  (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                              N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯)
              ⋯ ⋯) =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) P.X Q.X).hom ≫
        coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ◁
            coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso
                (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)))
                (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                      ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                        N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π
                    (M.actRight ▷
                      coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                    ((α_ M.X W.X
                          (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                            ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      ((((α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
              M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ▷ Q.X) ≫
            M.X ◁
              coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                ((α_ (coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) Y.X Q.X).hom ≫
                  coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ◁ Q.actLeft)) ≫
          coequalizer.π
            (M.actRight ▷
              coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))
            ((α_ M.X W.X
                  (coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                    ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))).hom ≫
              M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)) ≫
        colimMap
          (parallelPairHom
            (M.actRight ▷
              coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))
            ((α_ M.X W.X
                  (coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                    ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))).hom ≫
              M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
            (M.actRight ▷
              coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
            ((α_ M.X W.X
                  (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                    ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
              M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
            ((M.X ⊗ W.X) ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π
                          (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                          ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                            N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            (M.X ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π
                          (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                          ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                            N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            ⋯ ⋯) =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) P.X Q.X).hom ≫
        coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ◁
            coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso
                (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)))
                (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                      ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                        N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π
                    (M.actRight ▷
                      coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                    ((α_ M.X W.X
                          (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                            ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯

tactic: slice_lhs 5 6 => rw [ι_colimMap, parallelPairHom_app_one]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      ((((α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
              M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ▷ Q.X) ≫
            M.X ◁
              coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                ((α_ (coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) Y.X Q.X).hom ≫
                  coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ◁ Q.actLeft)) ≫
          coequalizer.π
            (M.actRight ▷
              coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))
            ((α_ M.X W.X
                  (coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                    ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))).hom ≫
              M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)) ≫
        colimMap
          (parallelPairHom
            (M.actRight ▷
              coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))
            ((α_ M.X W.X
                  (coequalizer ((N.tensorBimod P).actRight ▷ Q.X)
                    ((α_ (N.tensorBimod P).X Y.X Q.X).hom ≫ (N.tensorBimod P).X ◁ Q.actLeft))).hom ≫
              M.X ◁ TensorBimod.actLeft (N.tensorBimod P) Q)
            (M.actRight ▷
              coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
            ((α_ M.X W.X
                  (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                    ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
              M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
            ((M.X ⊗ W.X) ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π
                          (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                          ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                            N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            (M.X ◁
              coequalizer.desc
                ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                      ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                  coequalizer.desc
                    ((α_ N.X P.X Q.X).hom ≫
                      N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                        coequalizer.π
                          (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                          ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                            N.X ◁ TensorBimod.actLeft P Q))
                    ⋯)
                ⋯)
            ⋯ ⋯) =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) P.X Q.X).hom ≫
        coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ◁
            coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso
                (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)))
                (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                      ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                        N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π
                    (M.actRight ▷
                      coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                    ((α_ M.X W.X
                          (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                            ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ▷ Q.X ≫
          M.X ◁
              coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                ((α_ (coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) Y.X Q.X).hom ≫
                  coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ◁ Q.actLeft) ≫
            M.X ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π
                            (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                            ((α_ N.X X.X
                                  (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                              N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯ ≫
              colimit.ι
                (parallelPair
                  (M.actRight ▷
                    coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                  ((α_ M.X W.X
                        (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                          ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                    M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
                WalkingParallelPair.one =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) P.X Q.X).hom ≫
        coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ◁
            coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso
                (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)))
                (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                      ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                        N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π
                    (M.actRight ▷
                      coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                    ((α_ M.X W.X
                          (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                            ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯

tactic: slice_lhs 4 5 => rw [← MonoidalCategory.whiskerLeft_comp, coequalizer.π_desc]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ▷ Q.X ≫
          M.X ◁
              coequalizer.π (TensorBimod.actRight N P ▷ Q.X)
                ((α_ (coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)) Y.X Q.X).hom ≫
                  coequalizer (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ◁ Q.actLeft) ≫
            M.X ◁
                coequalizer.desc
                  ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                        ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                    coequalizer.desc
                      ((α_ N.X P.X Q.X).hom ≫
                        N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                          coequalizer.π
                            (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                            ((α_ N.X X.X
                                  (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                              N.X ◁ TensorBimod.actLeft P Q))
                      ⋯)
                  ⋯ ≫
              colimit.ι
                (parallelPair
                  (M.actRight ▷
                    coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                  ((α_ M.X W.X
                        (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                          ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                    M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
                WalkingParallelPair.one =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) P.X Q.X).hom ≫
        coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ◁
            coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso
                (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)))
                (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                      ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                        N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π
                    (M.actRight ▷
                      coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                    ((α_ M.X W.X
                          (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                            ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ▷ Q.X ≫
          M.X ◁
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π
                        (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                        ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                          N.X ◁ TensorBimod.actLeft P Q))
                  ⋯) ≫
            colimit.ι
              (parallelPair
                (M.actRight ▷
                  coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                    ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                ((α_ M.X W.X
                      (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                  M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              WalkingParallelPair.one =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) P.X Q.X).hom ≫
        coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ◁
            coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso
                (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)))
                (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                      ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                        N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π
                    (M.actRight ▷
                      coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                    ((α_ M.X W.X
                          (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                            ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯

tactic: slice_lhs 3 4 =>
  rw [← MonoidalCategory.whiskerLeft_comp, π_tensor_id_preserves_coequalizer_inv_desc,
    MonoidalCategory.whiskerLeft_comp, MonoidalCategory.whiskerLeft_comp]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        M.X ◁ coequalizer.π (N.actRight ▷ P.X) ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft) ▷ Q.X ≫
          M.X ◁
              ((PreservesCoequalizer.iso (tensorRight Q.X) (N.actRight ▷ P.X)
                    ((α_ N.X X.X P.X).hom ≫ N.X ◁ P.actLeft)).inv ≫
                coequalizer.desc
                  ((α_ N.X P.X Q.X).hom ≫
                    N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
                      coequalizer.π
                        (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                        ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                          N.X ◁ TensorBimod.actLeft P Q))
                  ⋯) ≫
            colimit.ι
              (parallelPair
                (M.actRight ▷
                  coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                    ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                ((α_ M.X W.X
                      (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                  M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              WalkingParallelPair.one =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) P.X Q.X).hom ≫
        coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ◁
            coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso
                (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)))
                (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                      ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                        N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π
                    (M.actRight ▷
                      coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                    ((α_ M.X W.X
                          (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                            ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        (M.X ◁ (α_ N.X P.X Q.X).hom ≫
            M.X ◁ N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
              M.X ◁
                coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                  ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                    N.X ◁ TensorBimod.actLeft P Q)) ≫
          colimit.ι
            (parallelPair
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            WalkingParallelPair.one =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) P.X Q.X).hom ≫
        coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ◁
            coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso
                (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)))
                (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                      ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                        N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π
                    (M.actRight ▷
                      coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                    ((α_ M.X W.X
                          (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                            ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯

tactic: slice_rhs 1 2 => rw [associator_naturality_left]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        (M.X ◁ (α_ N.X P.X Q.X).hom ≫
            M.X ◁ N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
              M.X ◁
                coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                  ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                    N.X ◁ TensorBimod.actLeft P Q)) ≫
          colimit.ι
            (parallelPair
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            WalkingParallelPair.one =
    coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ P.X ▷ Q.X ≫
      (α_ (coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)) P.X Q.X).hom ≫
        coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ◁
            coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
          (PreservesCoequalizer.iso
                (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)))
                (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv ≫
            coequalizer.desc
              ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                M.X ◁
                    coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                      ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                        N.X ◁ TensorBimod.actLeft P Q) ≫
                  coequalizer.π
                    (M.actRight ▷
                      coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                    ((α_ M.X W.X
                          (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                            ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                      M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
              ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        (M.X ◁ (α_ N.X P.X Q.X).hom ≫
            M.X ◁ N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
              M.X ◁
                coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                  ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                    N.X ◁ TensorBimod.actLeft P Q)) ≫
          colimit.ι
            (parallelPair
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            WalkingParallelPair.one =
    ((((α_ (M.X ⊗ N.X) P.X Q.X).hom ≫
            coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ (P.X ⊗ Q.X)) ≫
          coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ◁
            coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)) ≫
        (PreservesCoequalizer.iso
            (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))) (M.actRight ▷ N.X)
            ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv) ≫
      coequalizer.desc
        ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
          M.X ◁
              coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                  N.X ◁ TensorBimod.actLeft P Q) ≫
            coequalizer.π
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
        ⋯

tactic: slice_rhs 2 3 =>
  rw [← whisker_exchange]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        (M.X ◁ (α_ N.X P.X Q.X).hom ≫
            M.X ◁ N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
              M.X ◁
                coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                  ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                    N.X ◁ TensorBimod.actLeft P Q)) ≫
          colimit.ι
            (parallelPair
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            WalkingParallelPair.one =
    ((((α_ (M.X ⊗ N.X) P.X Q.X).hom ≫
            coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷ (P.X ⊗ Q.X)) ≫
          coequalizer (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ◁
            coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)) ≫
        (PreservesCoequalizer.iso
            (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))) (M.actRight ▷ N.X)
            ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv) ≫
      coequalizer.desc
        ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
          M.X ◁
              coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                  N.X ◁ TensorBimod.actLeft P Q) ≫
            coequalizer.π
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
        ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        (M.X ◁ (α_ N.X P.X Q.X).hom ≫
            M.X ◁ N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
              M.X ◁
                coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                  ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                    N.X ◁ TensorBimod.actLeft P Q)) ≫
          colimit.ι
            (parallelPair
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            WalkingParallelPair.one =
    (α_ (M.X ⊗ N.X) P.X Q.X).hom ≫
      (((M.X ⊗ N.X) ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
            coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷
              coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)) ≫
          (PreservesCoequalizer.iso
              (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))) (M.actRight ▷ N.X)
              ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv) ≫
        coequalizer.desc
          ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
            M.X ◁
                coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                  ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                    N.X ◁ TensorBimod.actLeft P Q) ≫
              coequalizer.π
                (M.actRight ▷
                  coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                    ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                ((α_ M.X W.X
                      (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                  M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
          ⋯

tactic: slice_rhs 3 5 => rw [π_tensor_id_preserves_coequalizer_inv_desc]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        (M.X ◁ (α_ N.X P.X Q.X).hom ≫
            M.X ◁ N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
              M.X ◁
                coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                  ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                    N.X ◁ TensorBimod.actLeft P Q)) ≫
          colimit.ι
            (parallelPair
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            WalkingParallelPair.one =
    (α_ (M.X ⊗ N.X) P.X Q.X).hom ≫
      (((M.X ⊗ N.X) ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
            coequalizer.π (M.actRight ▷ N.X) ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft) ▷
              coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)) ≫
          (PreservesCoequalizer.iso
              (tensorRight (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))) (M.actRight ▷ N.X)
              ((α_ M.X W.X N.X).hom ≫ M.X ◁ N.actLeft)).inv) ≫
        coequalizer.desc
          ((α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
            M.X ◁
                coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                  ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                    N.X ◁ TensorBimod.actLeft P Q) ≫
              coequalizer.π
                (M.actRight ▷
                  coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                    ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
                ((α_ M.X W.X
                      (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                        ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                  M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
          ⋯
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        (M.X ◁ (α_ N.X P.X Q.X).hom ≫
            M.X ◁ N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
              M.X ◁
                coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                  ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                    N.X ◁ TensorBimod.actLeft P Q)) ≫
          colimit.ι
            (parallelPair
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            WalkingParallelPair.one =
    (α_ (M.X ⊗ N.X) P.X Q.X).hom ≫
      (M.X ⊗ N.X) ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
        (α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
          M.X ◁
              coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                  N.X ◁ TensorBimod.actLeft P Q) ≫
            coequalizer.π
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))

tactic: slice_rhs 2 3 => rw [associator_naturality_right]
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        (M.X ◁ (α_ N.X P.X Q.X).hom ≫
            M.X ◁ N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
              M.X ◁
                coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                  ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                    N.X ◁ TensorBimod.actLeft P Q)) ≫
          colimit.ι
            (parallelPair
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            WalkingParallelPair.one =
    (α_ (M.X ⊗ N.X) P.X Q.X).hom ≫
      (M.X ⊗ N.X) ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
        (α_ M.X N.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
          M.X ◁
              coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                  N.X ◁ TensorBimod.actLeft P Q) ≫
            coequalizer.π
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
state_after: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        (M.X ◁ (α_ N.X P.X Q.X).hom ≫
            M.X ◁ N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
              M.X ◁
                coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                  ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                    N.X ◁ TensorBimod.actLeft P Q)) ≫
          colimit.ι
            (parallelPair
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            WalkingParallelPair.one =
    (α_ (M.X ⊗ N.X) P.X Q.X).hom ≫
      (((α_ M.X N.X (P.X ⊗ Q.X)).hom ≫
            M.X ◁ N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)) ≫
          M.X ◁
            coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
              ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                N.X ◁ TensorBimod.actLeft P Q)) ≫
        coequalizer.π
          (M.actRight ▷
            coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
              ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
          ((α_ M.X W.X
                (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
            M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))

tactic: coherence
state_before: case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M✝ : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
V W X Y Z : Mon_ C
M : Bimod V W
N : Bimod W X
P : Bimod X Y
Q : Bimod Y Z
⊢ (α_ M.X N.X P.X).hom ▷ Q.X ≫
      (α_ M.X (N.X ⊗ P.X) Q.X).hom ≫
        (M.X ◁ (α_ N.X P.X Q.X).hom ≫
            M.X ◁ N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft) ≫
              M.X ◁
                coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
                  ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                    N.X ◁ TensorBimod.actLeft P Q)) ≫
          colimit.ι
            (parallelPair
              (M.actRight ▷
                coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
              ((α_ M.X W.X
                    (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                      ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
                M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q)))
            WalkingParallelPair.one =
    (α_ (M.X ⊗ N.X) P.X Q.X).hom ≫
      (((α_ M.X N.X (P.X ⊗ Q.X)).hom ≫
            M.X ◁ N.X ◁ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft)) ≫
          M.X ◁
            coequalizer.π (N.actRight ▷ coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))
              ((α_ N.X X.X (coequalizer (P.actRight ▷ Q.X) ((α_ P.X Y.X Q.X).hom ≫ P.X ◁ Q.actLeft))).hom ≫
                N.X ◁ TensorBimod.actLeft P Q)) ≫
        coequalizer.π
          (M.actRight ▷
            coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
              ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))
          ((α_ M.X W.X
                (coequalizer (N.actRight ▷ (P.tensorBimod Q).X)
                  ((α_ N.X X.X (P.tensorBimod Q).X).hom ≫ N.X ◁ (P.tensorBimod Q).actLeft))).hom ≫
            M.X ◁ TensorBimod.actLeft N (P.tensorBimod Q))
state_after: no goals