Theorem: CategoryTheory.equivOfTensorIsoUnit_counitIso
File: Mathlib/CategoryTheory/Monoidal/End.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{?u.113036, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n : M
h₁ : m ⊗ n ≅ 𝟙_ M
h₂ : n ⊗ m ≅ 𝟙_ M
H : h₁.hom ▷ m ≫ (λ_ m).hom = (α_ m n m).hom ≫ m ◁ h₂.hom ≫ (ρ_ m).hom
⊢ ∀ (X : C),
    (F.obj m).map ((unitOfTensorIsoUnit F m n h₁).symm.hom.app X) ≫
        (unitOfTensorIsoUnit F n m h₂).hom.app ((F.obj m).obj X) =
      𝟙 ((F.obj m).obj X)
state_after: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{?u.113036, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n : M
h₁ : m ⊗ n ≅ 𝟙_ M
h₂ : n ⊗ m ≅ 𝟙_ M
H : h₁.hom ▷ m ≫ (λ_ m).hom = (α_ m n m).hom ≫ m ◁ h₂.hom ≫ (ρ_ m).hom
X : C
⊢ (F.obj m).map ((unitOfTensorIsoUnit F m n h₁).symm.hom.app X) ≫
      (unitOfTensorIsoUnit F n m h₂).hom.app ((F.obj m).obj X) =
    𝟙 ((F.obj m).obj X)
tactic: intro X
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{?u.113036, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n : M
h₁ : m ⊗ n ≅ 𝟙_ M
h₂ : n ⊗ m ≅ 𝟙_ M
H : h₁.hom ▷ m ≫ (λ_ m).hom = (α_ m n m).hom ≫ m ◁ h₂.hom ≫ (ρ_ m).hom
X : C
⊢ (F.obj m).map ((unitOfTensorIsoUnit F m n h₁).symm.hom.app X) ≫
      (unitOfTensorIsoUnit F n m h₂).hom.app ((F.obj m).obj X) =
    𝟙 ((F.obj m).obj X)
state_after: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{?u.113036, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n : M
h₁ : m ⊗ n ≅ 𝟙_ M
h₂ : n ⊗ m ≅ 𝟙_ M
H : h₁.hom ▷ m ≫ (λ_ m).hom = (α_ m n m).hom ≫ m ◁ h₂.hom ≫ (ρ_ m).hom
X : C
⊢ (F.obj m).map ((unitOfTensorIsoUnit F m n h₁).inv.app X) ≫
      (F.μ n m).app ((F.obj m).obj X) ≫ (F.map h₂.hom).app ((F.obj m).obj X) ≫ F.εIso.inv.app ((F.obj m).obj X) =
    𝟙 ((F.obj m).obj X)
tactic: dsimp
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{?u.113036, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n : M
h₁ : m ⊗ n ≅ 𝟙_ M
h₂ : n ⊗ m ≅ 𝟙_ M
H : h₁.hom ▷ m ≫ (λ_ m).hom = (α_ m n m).hom ≫ m ◁ h₂.hom ≫ (ρ_ m).hom
X : C
⊢ (F.obj m).map ((unitOfTensorIsoUnit F m n h₁).inv.app X) ≫
      (F.μ n m).app ((F.obj m).obj X) ≫ (F.map h₂.hom).app ((F.obj m).obj X) ≫ F.εIso.inv.app ((F.obj m).obj X) =
    𝟙 ((F.obj m).obj X)
state_after: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{?u.113036, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n : M
h₁ : m ⊗ n ≅ 𝟙_ M
h₂ : n ⊗ m ≅ 𝟙_ M
H : h₁.hom ▷ m ≫ (λ_ m).hom = (α_ m n m).hom ≫ m ◁ h₂.hom ≫ (ρ_ m).hom
X : C
⊢ (F.map (λ_ m).inv).app X ≫
      (F.map (h₁.inv ▷ m)).app X ≫
        (F.map (α_ m n m).hom).app X ≫ (F.map (m ◁ h₂.hom)).app X ≫ (F.map (ρ_ m).hom).app X =
    𝟙 ((F.obj m).obj X)
tactic: simp only [μ_naturalityᵣ_assoc, μ_naturalityₗ_assoc, ε_inv_app_obj, Category.assoc,
      obj_μ_inv_app, Functor.map_comp, μ_inv_hom_app_assoc, obj_ε_app,
      unitOfTensorIsoUnit_inv_app]
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{?u.113036, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n : M
h₁ : m ⊗ n ≅ 𝟙_ M
h₂ : n ⊗ m ≅ 𝟙_ M
H : h₁.hom ▷ m ≫ (λ_ m).hom = (α_ m n m).hom ≫ m ◁ h₂.hom ≫ (ρ_ m).hom
X : C
⊢ (F.map (λ_ m).inv).app X ≫
      (F.map (h₁.inv ▷ m)).app X ≫
        (F.map (α_ m n m).hom).app X ≫ (F.map (m ◁ h₂.hom)).app X ≫ (F.map (ρ_ m).hom).app X =
    𝟙 ((F.obj m).obj X)
state_after: no goals
tactic: simp [← NatTrans.comp_app, ← F.toFunctor.map_comp, ← H, -Functor.map_comp]