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

Proof steps:
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
tensorObj : Mon_ C → Mon_ C → Mon_ C :=
  fun M N =>
    { X := M.X ⊗ N.X, one := (λ_ (𝟙_ C)).inv ≫ (M.one ⊗ N.one),
      mul := tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul), one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ }
X₁ Y₁ X₂ Y₂ : Mon_ C
f : X₁ ⟶ Y₁
g : X₂ ⟶ Y₂
⊢ (tensorObj X₁ X₂).one ≫ (f.hom ⊗ g.hom) = (tensorObj Y₁ Y₂).one
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
tensorObj : Mon_ C → Mon_ C → Mon_ C :=
  fun M N =>
    { X := M.X ⊗ N.X, one := (λ_ (𝟙_ C)).inv ≫ (M.one ⊗ N.one),
      mul := tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul), one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ }
X₁ Y₁ X₂ Y₂ : Mon_ C
f : X₁ ⟶ Y₁
g : X₂ ⟶ Y₂
⊢ ((λ_ (𝟙_ C)).inv ≫ (X₁.one ⊗ X₂.one)) ≫ (f.hom ⊗ g.hom) = (λ_ (𝟙_ C)).inv ≫ (Y₁.one ⊗ Y₂.one)
tactic: dsimp
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
tensorObj : Mon_ C → Mon_ C → Mon_ C :=
  fun M N =>
    { X := M.X ⊗ N.X, one := (λ_ (𝟙_ C)).inv ≫ (M.one ⊗ N.one),
      mul := tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul), one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ }
X₁ Y₁ X₂ Y₂ : Mon_ C
f : X₁ ⟶ Y₁
g : X₂ ⟶ Y₂
⊢ ((λ_ (𝟙_ C)).inv ≫ (X₁.one ⊗ X₂.one)) ≫ (f.hom ⊗ g.hom) = (λ_ (𝟙_ C)).inv ≫ (Y₁.one ⊗ Y₂.one)
state_after: no goals
tactic: slice_lhs 2 3 => rw [← tensor_comp, Hom.one_hom f, Hom.one_hom g]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
tensorObj : Mon_ C → Mon_ C → Mon_ C :=
  fun M N =>
    { X := M.X ⊗ N.X, one := (λ_ (𝟙_ C)).inv ≫ (M.one ⊗ N.one),
      mul := tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul), one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ }
X₁ Y₁ X₂ Y₂ : Mon_ C
f : X₁ ⟶ Y₁
g : X₂ ⟶ Y₂
⊢ (tensorObj X₁ X₂).mul ≫ (f.hom ⊗ g.hom) = ((f.hom ⊗ g.hom) ⊗ f.hom ⊗ g.hom) ≫ (tensorObj Y₁ Y₂).mul
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
tensorObj : Mon_ C → Mon_ C → Mon_ C :=
  fun M N =>
    { X := M.X ⊗ N.X, one := (λ_ (𝟙_ C)).inv ≫ (M.one ⊗ N.one),
      mul := tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul), one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ }
X₁ Y₁ X₂ Y₂ : Mon_ C
f : X₁ ⟶ Y₁
g : X₂ ⟶ Y₂
⊢ (tensor_μ C (X₁.X, X₂.X) (X₁.X, X₂.X) ≫ (X₁.mul ⊗ X₂.mul)) ≫ (f.hom ⊗ g.hom) =
    ((f.hom ⊗ g.hom) ⊗ f.hom ⊗ g.hom) ≫ tensor_μ C (Y₁.X, Y₂.X) (Y₁.X, Y₂.X) ≫ (Y₁.mul ⊗ Y₂.mul)
tactic: dsimp
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
tensorObj : Mon_ C → Mon_ C → Mon_ C :=
  fun M N =>
    { X := M.X ⊗ N.X, one := (λ_ (𝟙_ C)).inv ≫ (M.one ⊗ N.one),
      mul := tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul), one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ }
X₁ Y₁ X₂ Y₂ : Mon_ C
f : X₁ ⟶ Y₁
g : X₂ ⟶ Y₂
⊢ (tensor_μ C (X₁.X, X₂.X) (X₁.X, X₂.X) ≫ (X₁.mul ⊗ X₂.mul)) ≫ (f.hom ⊗ g.hom) =
    ((f.hom ⊗ g.hom) ⊗ f.hom ⊗ g.hom) ≫ tensor_μ C (Y₁.X, Y₂.X) (Y₁.X, Y₂.X) ≫ (Y₁.mul ⊗ Y₂.mul)
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
tensorObj : Mon_ C → Mon_ C → Mon_ C :=
  fun M N =>
    { X := M.X ⊗ N.X, one := (λ_ (𝟙_ C)).inv ≫ (M.one ⊗ N.one),
      mul := tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul), one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ }
X₁ Y₁ X₂ Y₂ : Mon_ C
f : X₁ ⟶ Y₁
g : X₂ ⟶ Y₂
⊢ (tensor_μ C (X₁.X, X₂.X) (X₁.X, X₂.X) ≫ (X₁.mul ⊗ X₂.mul)) ≫ (f.hom ⊗ g.hom) =
    (tensor_μ C (X₁.X, X₂.X) (X₁.X, X₂.X) ≫ ((f.hom ⊗ f.hom) ⊗ g.hom ⊗ g.hom)) ≫ (Y₁.mul ⊗ Y₂.mul)
tactic: slice_rhs 1 2 => rw [tensor_μ_natural]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
tensorObj : Mon_ C → Mon_ C → Mon_ C :=
  fun M N =>
    { X := M.X ⊗ N.X, one := (λ_ (𝟙_ C)).inv ≫ (M.one ⊗ N.one),
      mul := tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul), one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ }
X₁ Y₁ X₂ Y₂ : Mon_ C
f : X₁ ⟶ Y₁
g : X₂ ⟶ Y₂
⊢ (tensor_μ C (X₁.X, X₂.X) (X₁.X, X₂.X) ≫ (X₁.mul ⊗ X₂.mul)) ≫ (f.hom ⊗ g.hom) =
    (tensor_μ C (X₁.X, X₂.X) (X₁.X, X₂.X) ≫ ((f.hom ⊗ f.hom) ⊗ g.hom ⊗ g.hom)) ≫ (Y₁.mul ⊗ Y₂.mul)
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
tensorObj : Mon_ C → Mon_ C → Mon_ C :=
  fun M N =>
    { X := M.X ⊗ N.X, one := (λ_ (𝟙_ C)).inv ≫ (M.one ⊗ N.one),
      mul := tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul), one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ }
X₁ Y₁ X₂ Y₂ : Mon_ C
f : X₁ ⟶ Y₁
g : X₂ ⟶ Y₂
⊢ tensor_μ C (X₁.X, X₂.X) (X₁.X, X₂.X) ≫ ((f.hom ⊗ f.hom) ⊗ g.hom ⊗ g.hom) ≫ (Y₁.mul ⊗ Y₂.mul) =
    (tensor_μ C (X₁.X, X₂.X) (X₁.X, X₂.X) ≫ ((f.hom ⊗ f.hom) ⊗ g.hom ⊗ g.hom)) ≫ (Y₁.mul ⊗ Y₂.mul)
tactic: slice_lhs 2 3 => rw [← tensor_comp, Hom.mul_hom f, Hom.mul_hom g, tensor_comp]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
tensorObj : Mon_ C → Mon_ C → Mon_ C :=
  fun M N =>
    { X := M.X ⊗ N.X, one := (λ_ (𝟙_ C)).inv ≫ (M.one ⊗ N.one),
      mul := tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul), one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ }
X₁ Y₁ X₂ Y₂ : Mon_ C
f : X₁ ⟶ Y₁
g : X₂ ⟶ Y₂
⊢ tensor_μ C (X₁.X, X₂.X) (X₁.X, X₂.X) ≫ ((f.hom ⊗ f.hom) ⊗ g.hom ⊗ g.hom) ≫ (Y₁.mul ⊗ Y₂.mul) =
    (tensor_μ C (X₁.X, X₂.X) (X₁.X, X₂.X) ≫ ((f.hom ⊗ f.hom) ⊗ g.hom ⊗ g.hom)) ≫ (Y₁.mul ⊗ Y₂.mul)
state_after: no goals
tactic: simp only [Category.assoc]