-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
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))) ⋯