-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
theorem whiskerRight_comp_bimod {W X Y Z : Mon_ C} {M M' : Bimod W X} (f : M ⟶ M') (N : Bimod X Y)
    (P : Bimod Y Z) :
    whiskerRight f (N.tensorBimod P) =
      (associatorBimod M N P).inv ≫
        whiskerRight (whiskerRight f N) P ≫ (associatorBimod M' N P).hom

Proof state:
case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
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)
W X Y Z : Mon_ C
M M' : Bimod W X
f : M ⟶ M'
N : Bimod X Y
P : Bimod Y Z
⊢ (whiskerRight f
        { X := TensorBimod.X N P, actLeft := TensorBimod.actLeft N P, one_actLeft := ⋯, left_assoc := ⋯,
          actRight := TensorBimod.actRight N P, actRight_one := ⋯, right_assoc := ⋯, middle_assoc := ⋯ }).hom =
    ((isoOfIso { hom := AssociatorBimod.hom M N P, inv := AssociatorBimod.inv M N P, hom_inv_id := ⋯, inv_hom_id := ⋯ }
            ⋯ ⋯).inv ≫
        whiskerRight (whiskerRight f N) P ≫
          (isoOfIso
              { hom := AssociatorBimod.hom M' N P, inv := AssociatorBimod.inv M' N P, hom_inv_id := ⋯, inv_hom_id := ⋯ }
              ⋯ ⋯).hom).hom

Tactic:
apply coequalizer.hom_ext

Result:
case h.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
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)
W X Y Z : Mon_ C
M M' : Bimod W X
f : M ⟶ M'
N : Bimod X Y
P : Bimod Y Z
⊢ coequalizer.π
        (M.actRight ▷
          { X := TensorBimod.X N P, actLeft := TensorBimod.actLeft N P, one_actLeft := ⋯, left_assoc := ⋯,
              actRight := TensorBimod.actRight N P, actRight_one := ⋯, right_assoc := ⋯, middle_assoc := ⋯ }.X)
        ((α_ M.X X.X
              { X := TensorBimod.X N P, actLeft := TensorBimod.actLeft N P, one_actLeft := ⋯, left_assoc := ⋯,
                  actRight := TensorBimod.actRight N P, actRight_one := ⋯, right_assoc := ⋯,
                  middle_assoc := ⋯ }.X).hom ≫
          M.X ◁
            { X := TensorBimod.X N P, actLeft := TensorBimod.actLeft N P, one_actLeft := ⋯, left_assoc := ⋯,
                actRight := TensorBimod.actRight N P, actRight_one := ⋯, right_assoc := ⋯,
                middle_assoc := ⋯ }.actLeft) ≫
      (whiskerRight f
          { X := TensorBimod.X N P, actLeft := TensorBimod.actLeft N P, one_actLeft := ⋯, left_assoc := ⋯,
            actRight := TensorBimod.actRight N P, actRight_one := ⋯, right_assoc := ⋯, middle_assoc := ⋯ }).hom =
    coequalizer.π
        (M.actRight ▷
          { X := TensorBimod.X N P, actLeft := TensorBimod.actLeft N P, one_actLeft := ⋯, left_assoc := ⋯,
              actRight := TensorBimod.actRight N P, actRight_one := ⋯, right_assoc := ⋯, middle_assoc := ⋯ }.X)
        ((α_ M.X X.X
              { X := TensorBimod.X N P, actLeft := TensorBimod.actLeft N P, one_actLeft := ⋯, left_assoc := ⋯,
                  actRight := TensorBimod.actRight N P, actRight_one := ⋯, right_assoc := ⋯,
                  middle_assoc := ⋯ }.X).hom ≫
          M.X ◁
            { X := TensorBimod.X N P, actLeft := TensorBimod.actLeft N P, one_actLeft := ⋯, left_assoc := ⋯,
                actRight := TensorBimod.actRight N P, actRight_one := ⋯, right_assoc := ⋯,
                middle_assoc := ⋯ }.actLeft) ≫
      ((isoOfIso
              { hom := AssociatorBimod.hom M N P, inv := AssociatorBimod.inv M N P, hom_inv_id := ⋯, inv_hom_id := ⋯ } ⋯
              ⋯).inv ≫
          whiskerRight (whiskerRight f N) P ≫
            (isoOfIso
                { hom := AssociatorBimod.hom M' N P, inv := AssociatorBimod.inv M' N P, hom_inv_id := ⋯,
                  inv_hom_id := ⋯ }
                ⋯ ⋯).hom).hom