Theorem: Mon_.Mon_tensor_mul_assoc
File: Mathlib/CategoryTheory/Monoidal/Mon_.lean

Proof steps:
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
M N : Mon_ C
⊢ (tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)) ▷ (M.X ⊗ N.X) ≫
      tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul) =
    (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ (tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)) ≫
        tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
M N : Mon_ C
⊢ tensor_μ C (M.X, N.X) (M.X, N.X) ▷ (M.X ⊗ N.X) ≫
      (M.mul ⊗ N.mul) ▷ (M.X ⊗ N.X) ≫ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul) =
    (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫
        (M.X ⊗ N.X) ◁ (M.mul ⊗ N.mul) ≫ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)
tactic: simp only [comp_whiskerRight_assoc, MonoidalCategory.whiskerLeft_comp_assoc]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
M N : Mon_ C
⊢ tensor_μ C (M.X, N.X) (M.X, N.X) ▷ (M.X ⊗ N.X) ≫
      (M.mul ⊗ N.mul) ▷ (M.X ⊗ N.X) ≫ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul) =
    (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫
        (M.X ⊗ N.X) ◁ (M.mul ⊗ N.mul) ≫ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
M N : Mon_ C
⊢ tensor_μ C (M.X, N.X) (M.X, N.X) ▷ (M.X ⊗ N.X) ≫
      (tensor_μ C (M.X ⊗ M.X, N.X ⊗ N.X) (M.X, N.X) ≫ (M.mul ▷ M.X ⊗ N.mul ▷ N.X)) ≫ (M.mul ⊗ N.mul) =
    (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫
        (M.X ⊗ N.X) ◁ (M.mul ⊗ N.mul) ≫ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)
tactic: slice_lhs 2 3 => rw [tensor_μ_natural_left]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
M N : Mon_ C
⊢ tensor_μ C (M.X, N.X) (M.X, N.X) ▷ (M.X ⊗ N.X) ≫
      (tensor_μ C (M.X ⊗ M.X, N.X ⊗ N.X) (M.X, N.X) ≫ (M.mul ▷ M.X ⊗ N.mul ▷ N.X)) ≫ (M.mul ⊗ N.mul) =
    (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫
        (M.X ⊗ N.X) ◁ (M.mul ⊗ N.mul) ≫ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
M N : Mon_ C
⊢ tensor_μ C (M.X, N.X) (M.X, N.X) ▷ (M.X ⊗ N.X) ≫
      tensor_μ C (M.X ⊗ M.X, N.X ⊗ N.X) (M.X, N.X) ≫
        ((α_ M.X M.X M.X).hom ⊗ (α_ N.X N.X N.X).hom) ≫ (M.X ◁ M.mul ⊗ N.X ◁ N.mul) ≫ (M.mul ⊗ N.mul) =
    (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫
        (M.X ⊗ N.X) ◁ (M.mul ⊗ N.mul) ≫ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)
tactic: slice_lhs 3 4 => rw [← tensor_comp, mul_assoc M, mul_assoc N, tensor_comp, tensor_comp]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
M N : Mon_ C
⊢ tensor_μ C (M.X, N.X) (M.X, N.X) ▷ (M.X ⊗ N.X) ≫
      tensor_μ C (M.X ⊗ M.X, N.X ⊗ N.X) (M.X, N.X) ≫
        ((α_ M.X M.X M.X).hom ⊗ (α_ N.X N.X N.X).hom) ≫ (M.X ◁ M.mul ⊗ N.X ◁ N.mul) ≫ (M.mul ⊗ N.mul) =
    (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫
        (M.X ⊗ N.X) ◁ (M.mul ⊗ N.mul) ≫ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
M N : Mon_ C
⊢ (((α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
          (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ tensor_μ C (M.X, N.X) (M.X ⊗ M.X, N.X ⊗ N.X)) ≫
        (M.X ◁ M.mul ⊗ N.X ◁ N.mul)) ≫
      (M.mul ⊗ N.mul) =
    (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫
        (M.X ⊗ N.X) ◁ (M.mul ⊗ N.mul) ≫ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)
tactic: slice_lhs 1 3 => rw [tensor_associativity]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
M N : Mon_ C
⊢ (((α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
          (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ tensor_μ C (M.X, N.X) (M.X ⊗ M.X, N.X ⊗ N.X)) ≫
        (M.X ◁ M.mul ⊗ N.X ◁ N.mul)) ≫
      (M.mul ⊗ N.mul) =
    (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫
        (M.X ⊗ N.X) ◁ (M.mul ⊗ N.mul) ≫ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
M N : Mon_ C
⊢ (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫
        ((M.X ⊗ N.X) ◁ (M.mul ⊗ N.mul) ≫ tensor_μ C (M.X, N.X) (M.X, N.X)) ≫ (M.mul ⊗ N.mul) =
    (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫
        (M.X ⊗ N.X) ◁ (M.mul ⊗ N.mul) ≫ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)
tactic: slice_lhs 3 4 => rw [← tensor_μ_natural_right]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
M N : Mon_ C
⊢ (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫
        ((M.X ⊗ N.X) ◁ (M.mul ⊗ N.mul) ≫ tensor_μ C (M.X, N.X) (M.X, N.X)) ≫ (M.mul ⊗ N.mul) =
    (α_ (M.X ⊗ N.X) (M.X ⊗ N.X) (M.X ⊗ N.X)).hom ≫
      (M.X ⊗ N.X) ◁ tensor_μ C (M.X, N.X) (M.X, N.X) ≫
        (M.X ⊗ N.X) ◁ (M.mul ⊗ N.mul) ≫ tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul)
state_after: no goals
tactic: simp