Theorem: CategoryTheory.leftUnitor_monoidal
File: Mathlib/CategoryTheory/Monoidal/Braided/Basic.lean

Proof steps:
state_before: C : Type u₁
inst✝⁸ : Category.{v₁, u₁} C
inst✝⁷ : MonoidalCategory C
inst✝⁶ : BraidedCategory C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : MonoidalCategory D
inst✝³ : BraidedCategory D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
inst✝¹ : MonoidalCategory E
inst✝ : BraidedCategory E
X₁ X₂ : C
⊢ (λ_ X₁).hom ⊗ (λ_ X₂).hom = tensor_μ C (𝟙_ C, X₁) (𝟙_ C, X₂) ≫ (λ_ (𝟙_ C)).hom ▷ (X₁ ⊗ X₂) ≫ (λ_ (X₁ ⊗ X₂)).hom
state_after: C : Type u₁
inst✝⁸ : Category.{v₁, u₁} C
inst✝⁷ : MonoidalCategory C
inst✝⁶ : BraidedCategory C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : MonoidalCategory D
inst✝³ : BraidedCategory D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
inst✝¹ : MonoidalCategory E
inst✝ : BraidedCategory E
X₁ X₂ : C
⊢ (λ_ X₁).hom ⊗ (λ_ X₂).hom =
    ((α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
        𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫
          𝟙_ C ◁ (β_ X₁ (𝟙_ C)).hom ▷ X₂ ≫ 𝟙_ C ◁ (α_ (𝟙_ C) X₁ X₂).hom ≫ (α_ (𝟙_ C) (𝟙_ C) (X₁ ⊗ X₂)).inv) ≫
      (λ_ (𝟙_ C)).hom ▷ (X₁ ⊗ X₂) ≫ (λ_ (X₁ ⊗ X₂)).hom
tactic: dsimp only [tensor_μ]
state_before: C : Type u₁
inst✝⁸ : Category.{v₁, u₁} C
inst✝⁷ : MonoidalCategory C
inst✝⁶ : BraidedCategory C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : MonoidalCategory D
inst✝³ : BraidedCategory D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
inst✝¹ : MonoidalCategory E
inst✝ : BraidedCategory E
X₁ X₂ : C
⊢ (λ_ X₁).hom ⊗ (λ_ X₂).hom =
    ((α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
        𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫
          𝟙_ C ◁ (β_ X₁ (𝟙_ C)).hom ▷ X₂ ≫ 𝟙_ C ◁ (α_ (𝟙_ C) X₁ X₂).hom ≫ (α_ (𝟙_ C) (𝟙_ C) (X₁ ⊗ X₂)).inv) ≫
      (λ_ (𝟙_ C)).hom ▷ (X₁ ⊗ X₂) ≫ (λ_ (X₁ ⊗ X₂)).hom
state_after: C : Type u₁
inst✝⁸ : Category.{v₁, u₁} C
inst✝⁷ : MonoidalCategory C
inst✝⁶ : BraidedCategory C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : MonoidalCategory D
inst✝³ : BraidedCategory D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
inst✝¹ : MonoidalCategory E
inst✝ : BraidedCategory E
X₁ X₂ : C
this :
  (λ_ X₁).hom ⊗ (λ_ X₂).hom =
    (α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫ 𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫ (λ_ ((X₁ ⊗ 𝟙_ C) ⊗ X₂)).hom ≫ (ρ_ X₁).hom ▷ X₂
⊢ (λ_ X₁).hom ⊗ (λ_ X₂).hom =
    ((α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
        𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫
          𝟙_ C ◁ (β_ X₁ (𝟙_ C)).hom ▷ X₂ ≫ 𝟙_ C ◁ (α_ (𝟙_ C) X₁ X₂).hom ≫ (α_ (𝟙_ C) (𝟙_ C) (X₁ ⊗ X₂)).inv) ≫
      (λ_ (𝟙_ C)).hom ▷ (X₁ ⊗ X₂) ≫ (λ_ (X₁ ⊗ X₂)).hom
tactic: have :
    (λ_ X₁).hom ⊗ (λ_ X₂).hom =
      (α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
        (𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv) ≫ (λ_ ((X₁ ⊗ 𝟙_ C) ⊗ X₂)).hom ≫ ((ρ_ X₁).hom ▷ X₂) := by
    coherence
state_before: C : Type u₁
inst✝⁸ : Category.{v₁, u₁} C
inst✝⁷ : MonoidalCategory C
inst✝⁶ : BraidedCategory C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : MonoidalCategory D
inst✝³ : BraidedCategory D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
inst✝¹ : MonoidalCategory E
inst✝ : BraidedCategory E
X₁ X₂ : C
this :
  (λ_ X₁).hom ⊗ (λ_ X₂).hom =
    (α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫ 𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫ (λ_ ((X₁ ⊗ 𝟙_ C) ⊗ X₂)).hom ≫ (ρ_ X₁).hom ▷ X₂
⊢ (λ_ X₁).hom ⊗ (λ_ X₂).hom =
    ((α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
        𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫
          𝟙_ C ◁ (β_ X₁ (𝟙_ C)).hom ▷ X₂ ≫ 𝟙_ C ◁ (α_ (𝟙_ C) X₁ X₂).hom ≫ (α_ (𝟙_ C) (𝟙_ C) (X₁ ⊗ X₂)).inv) ≫
      (λ_ (𝟙_ C)).hom ▷ (X₁ ⊗ X₂) ≫ (λ_ (X₁ ⊗ X₂)).hom
state_after: C : Type u₁
inst✝⁸ : Category.{v₁, u₁} C
inst✝⁷ : MonoidalCategory C
inst✝⁶ : BraidedCategory C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : MonoidalCategory D
inst✝³ : BraidedCategory D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
inst✝¹ : MonoidalCategory E
inst✝ : BraidedCategory E
X₁ X₂ : C
this :
  (λ_ X₁).hom ⊗ (λ_ X₂).hom =
    (α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫ 𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫ (λ_ ((X₁ ⊗ 𝟙_ C) ⊗ X₂)).hom ≫ (ρ_ X₁).hom ▷ X₂
⊢ (α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫ 𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫ (λ_ ((X₁ ⊗ 𝟙_ C) ⊗ X₂)).hom ≫ (ρ_ X₁).hom ▷ X₂ =
    ((α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
        𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫
          𝟙_ C ◁ (β_ X₁ (𝟙_ C)).hom ▷ X₂ ≫ 𝟙_ C ◁ (α_ (𝟙_ C) X₁ X₂).hom ≫ (α_ (𝟙_ C) (𝟙_ C) (X₁ ⊗ X₂)).inv) ≫
      (λ_ (𝟙_ C)).hom ▷ (X₁ ⊗ X₂) ≫ (λ_ (X₁ ⊗ X₂)).hom
tactic: rw [this]
state_before: C : Type u₁
inst✝⁸ : Category.{v₁, u₁} C
inst✝⁷ : MonoidalCategory C
inst✝⁶ : BraidedCategory C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : MonoidalCategory D
inst✝³ : BraidedCategory D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
inst✝¹ : MonoidalCategory E
inst✝ : BraidedCategory E
X₁ X₂ : C
this :
  (λ_ X₁).hom ⊗ (λ_ X₂).hom =
    (α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫ 𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫ (λ_ ((X₁ ⊗ 𝟙_ C) ⊗ X₂)).hom ≫ (ρ_ X₁).hom ▷ X₂
⊢ (α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫ 𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫ (λ_ ((X₁ ⊗ 𝟙_ C) ⊗ X₂)).hom ≫ (ρ_ X₁).hom ▷ X₂ =
    ((α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
        𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫
          𝟙_ C ◁ (β_ X₁ (𝟙_ C)).hom ▷ X₂ ≫ 𝟙_ C ◁ (α_ (𝟙_ C) X₁ X₂).hom ≫ (α_ (𝟙_ C) (𝟙_ C) (X₁ ⊗ X₂)).inv) ≫
      (λ_ (𝟙_ C)).hom ▷ (X₁ ⊗ X₂) ≫ (λ_ (X₁ ⊗ X₂)).hom
state_after: C : Type u₁
inst✝⁸ : Category.{v₁, u₁} C
inst✝⁷ : MonoidalCategory C
inst✝⁶ : BraidedCategory C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : MonoidalCategory D
inst✝³ : BraidedCategory D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
inst✝¹ : MonoidalCategory E
inst✝ : BraidedCategory E
X₁ X₂ : C
⊢ (α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫ 𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫ (λ_ ((X₁ ⊗ 𝟙_ C) ⊗ X₂)).hom ≫ (ρ_ X₁).hom ▷ X₂ =
    ((α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
        𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫
          𝟙_ C ◁ (β_ X₁ (𝟙_ C)).hom ▷ X₂ ≫ 𝟙_ C ◁ (α_ (𝟙_ C) X₁ X₂).hom ≫ (α_ (𝟙_ C) (𝟙_ C) (X₁ ⊗ X₂)).inv) ≫
      (λ_ (𝟙_ C)).hom ▷ (X₁ ⊗ X₂) ≫ (λ_ (X₁ ⊗ X₂)).hom
tactic: clear this
state_before: C : Type u₁
inst✝⁸ : Category.{v₁, u₁} C
inst✝⁷ : MonoidalCategory C
inst✝⁶ : BraidedCategory C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : MonoidalCategory D
inst✝³ : BraidedCategory D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
inst✝¹ : MonoidalCategory E
inst✝ : BraidedCategory E
X₁ X₂ : C
⊢ (α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫ 𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫ (λ_ ((X₁ ⊗ 𝟙_ C) ⊗ X₂)).hom ≫ (ρ_ X₁).hom ▷ X₂ =
    ((α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
        𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫
          𝟙_ C ◁ (β_ X₁ (𝟙_ C)).hom ▷ X₂ ≫ 𝟙_ C ◁ (α_ (𝟙_ C) X₁ X₂).hom ≫ (α_ (𝟙_ C) (𝟙_ C) (X₁ ⊗ X₂)).inv) ≫
      (λ_ (𝟙_ C)).hom ▷ (X₁ ⊗ X₂) ≫ (λ_ (X₁ ⊗ X₂)).hom
state_after: C : Type u₁
inst✝⁸ : Category.{v₁, u₁} C
inst✝⁷ : MonoidalCategory C
inst✝⁶ : BraidedCategory C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : MonoidalCategory D
inst✝³ : BraidedCategory D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
inst✝¹ : MonoidalCategory E
inst✝ : BraidedCategory E
X₁ X₂ : C
⊢ (α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
      𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫ (λ_ ((X₁ ⊗ 𝟙_ C) ⊗ X₂)).hom ≫ ((β_ X₁ (𝟙_ C)).hom ≫ (λ_ X₁).hom) ▷ X₂ =
    ((α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
        𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫
          𝟙_ C ◁ (β_ X₁ (𝟙_ C)).hom ▷ X₂ ≫ 𝟙_ C ◁ (α_ (𝟙_ C) X₁ X₂).hom ≫ (α_ (𝟙_ C) (𝟙_ C) (X₁ ⊗ X₂)).inv) ≫
      (λ_ (𝟙_ C)).hom ▷ (X₁ ⊗ X₂) ≫ (λ_ (X₁ ⊗ X₂)).hom
tactic: rw [← braiding_leftUnitor]
state_before: C : Type u₁
inst✝⁸ : Category.{v₁, u₁} C
inst✝⁷ : MonoidalCategory C
inst✝⁶ : BraidedCategory C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : MonoidalCategory D
inst✝³ : BraidedCategory D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
inst✝¹ : MonoidalCategory E
inst✝ : BraidedCategory E
X₁ X₂ : C
⊢ (α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
      𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫ (λ_ ((X₁ ⊗ 𝟙_ C) ⊗ X₂)).hom ≫ ((β_ X₁ (𝟙_ C)).hom ≫ (λ_ X₁).hom) ▷ X₂ =
    ((α_ (𝟙_ C) X₁ (𝟙_ C ⊗ X₂)).hom ≫
        𝟙_ C ◁ (α_ X₁ (𝟙_ C) X₂).inv ≫
          𝟙_ C ◁ (β_ X₁ (𝟙_ C)).hom ▷ X₂ ≫ 𝟙_ C ◁ (α_ (𝟙_ C) X₁ X₂).hom ≫ (α_ (𝟙_ C) (𝟙_ C) (X₁ ⊗ X₂)).inv) ≫
      (λ_ (𝟙_ C)).hom ▷ (X₁ ⊗ X₂) ≫ (λ_ (X₁ ⊗ X₂)).hom
state_after: no goals
tactic: coherence