Theorem: CategoryTheory.obj_μ_inv_app
File: Mathlib/CategoryTheory/Monoidal/End.lean

tactic: rw [← IsIso.inv_eq_inv]
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.obj m₃).map ((F.μIso m₁ m₂).inv.app X) =
    (F.μ (m₁ ⊗ m₂) m₃).app X ≫
      (F.map (α_ m₁ m₂ m₃).hom).app X ≫ (F.μIso m₁ (m₂ ⊗ m₃)).inv.app X ≫ (F.μIso m₂ m₃).inv.app ((F.obj m₁).obj X)
state_after: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ inv ((F.obj m₃).map ((F.μIso m₁ m₂).inv.app X)) =
    inv
      ((F.μ (m₁ ⊗ m₂) m₃).app X ≫
        (F.map (α_ m₁ m₂ m₃).hom).app X ≫ (F.μIso m₁ (m₂ ⊗ m₃)).inv.app X ≫ (F.μIso m₂ m₃).inv.app ((F.obj m₁).obj X))

tactic: convert obj_μ_app F m₁ m₂ m₃ X using 1
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ inv ((F.obj m₃).map ((F.μIso m₁ m₂).inv.app X)) =
    inv
      ((F.μ (m₁ ⊗ m₂) m₃).app X ≫
        (F.map (α_ m₁ m₂ m₃).hom).app X ≫ (F.μIso m₁ (m₂ ⊗ m₃)).inv.app X ≫ (F.μIso m₂ m₃).inv.app ((F.obj m₁).obj X))
state_after: case h.e'_2
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ inv ((F.obj m₃).map ((F.μIso m₁ m₂).inv.app X)) = (F.obj m₃).map ((F.μ m₁ m₂).app X)

case h.e'_3
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ inv
      ((F.μ (m₁ ⊗ m₂) m₃).app X ≫
        (F.map (α_ m₁ m₂ m₃).hom).app X ≫ (F.μIso m₁ (m₂ ⊗ m₃)).inv.app X ≫ (F.μIso m₂ m₃).inv.app ((F.obj m₁).obj X)) =
    (F.μ m₂ m₃).app ((F.obj m₁).obj X) ≫
      (F.μ m₁ (m₂ ⊗ m₃)).app X ≫ (F.map (α_ m₁ m₂ m₃).inv).app X ≫ (F.μIso (m₁ ⊗ m₂) m₃).inv.app X

tactic: refine IsIso.inv_eq_of_hom_inv_id ?_
state_before: case h.e'_2
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ inv ((F.obj m₃).map ((F.μIso m₁ m₂).inv.app X)) = (F.obj m₃).map ((F.μ m₁ m₂).app X)
state_after: case h.e'_2
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.obj m₃).map ((F.μIso m₁ m₂).inv.app X) ≫ (F.obj m₃).map ((F.μ m₁ m₂).app X) =
    𝟙 ((F.obj m₃).obj ((F.obj (m₁ ⊗ m₂)).obj X))

tactic: rw [← Functor.map_comp]
state_before: case h.e'_2
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.obj m₃).map ((F.μIso m₁ m₂).inv.app X) ≫ (F.obj m₃).map ((F.μ m₁ m₂).app X) =
    𝟙 ((F.obj m₃).obj ((F.obj (m₁ ⊗ m₂)).obj X))
state_after: case h.e'_2
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.obj m₃).map ((F.μIso m₁ m₂).inv.app X ≫ (F.μ m₁ m₂).app X) = 𝟙 ((F.obj m₃).obj ((F.obj (m₁ ⊗ m₂)).obj X))

tactic: simp
state_before: case h.e'_2
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.obj m₃).map ((F.μIso m₁ m₂).inv.app X ≫ (F.μ m₁ m₂).app X) = 𝟙 ((F.obj m₃).obj ((F.obj (m₁ ⊗ m₂)).obj X))
state_after: no goals

tactic: simp only [MonoidalFunctor.μIso_hom, Category.assoc, NatIso.inv_inv_app, IsIso.inv_comp]
state_before: case h.e'_3
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ inv
      ((F.μ (m₁ ⊗ m₂) m₃).app X ≫
        (F.map (α_ m₁ m₂ m₃).hom).app X ≫ (F.μIso m₁ (m₂ ⊗ m₃)).inv.app X ≫ (F.μIso m₂ m₃).inv.app ((F.obj m₁).obj X)) =
    (F.μ m₂ m₃).app ((F.obj m₁).obj X) ≫
      (F.μ m₁ (m₂ ⊗ m₃)).app X ≫ (F.map (α_ m₁ m₂ m₃).inv).app X ≫ (F.μIso (m₁ ⊗ m₂) m₃).inv.app X
state_after: case h.e'_3
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.μ m₂ m₃).app ((F.obj m₁).obj X) ≫
      (F.μ m₁ (m₂ ⊗ m₃)).app X ≫ inv ((F.map (α_ m₁ m₂ m₃).hom).app X) ≫ inv ((F.μ (m₁ ⊗ m₂) m₃).app X) =
    (F.μ m₂ m₃).app ((F.obj m₁).obj X) ≫
      (F.μ m₁ (m₂ ⊗ m₃)).app X ≫ (F.map (α_ m₁ m₂ m₃).inv).app X ≫ (F.μIso (m₁ ⊗ m₂) m₃).inv.app X

tactic: congr
state_before: case h.e'_3
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.μ m₂ m₃).app ((F.obj m₁).obj X) ≫
      (F.μ m₁ (m₂ ⊗ m₃)).app X ≫ inv ((F.map (α_ m₁ m₂ m₃).hom).app X) ≫ inv ((F.μ (m₁ ⊗ m₂) m₃).app X) =
    (F.μ m₂ m₃).app ((F.obj m₁).obj X) ≫
      (F.μ m₁ (m₂ ⊗ m₃)).app X ≫ (F.map (α_ m₁ m₂ m₃).inv).app X ≫ (F.μIso (m₁ ⊗ m₂) m₃).inv.app X
state_after: case h.e'_3.e_a.e_a.e_a
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ inv ((F.map (α_ m₁ m₂ m₃).hom).app X) = (F.map (α_ m₁ m₂ m₃).inv).app X

case h.e'_3.e_a.e_a.e_a
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ inv ((F.μ (m₁ ⊗ m₂) m₃).app X) = (F.μIso (m₁ ⊗ m₂) m₃).inv.app X

tactic: refine IsIso.inv_eq_of_hom_inv_id ?_
state_before: case h.e'_3.e_a.e_a.e_a
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ inv ((F.map (α_ m₁ m₂ m₃).hom).app X) = (F.map (α_ m₁ m₂ m₃).inv).app X
state_after: case h.e'_3.e_a.e_a.e_a
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.map (α_ m₁ m₂ m₃).hom).app X ≫ (F.map (α_ m₁ m₂ m₃).inv).app X = 𝟙 ((F.obj ((m₁ ⊗ m₂) ⊗ m₃)).obj X)

tactic: simp
state_before: case h.e'_3.e_a.e_a.e_a
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.map (α_ m₁ m₂ m₃).hom).app X ≫ (F.map (α_ m₁ m₂ m₃).inv).app X = 𝟙 ((F.obj ((m₁ ⊗ m₂) ⊗ m₃)).obj X)
state_after: no goals

tactic: refine IsIso.inv_eq_of_hom_inv_id ?_
state_before: case h.e'_3.e_a.e_a.e_a
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ inv ((F.μ (m₁ ⊗ m₂) m₃).app X) = (F.μIso (m₁ ⊗ m₂) m₃).inv.app X
state_after: case h.e'_3.e_a.e_a.e_a
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.μ (m₁ ⊗ m₂) m₃).app X ≫ (F.μIso (m₁ ⊗ m₂) m₃).inv.app X = 𝟙 ((F.obj m₃).obj ((F.obj (m₁ ⊗ m₂)).obj X))

tactic: simp
state_before: case h.e'_3.e_a.e_a.e_a
C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.μ (m₁ ⊗ m₂) m₃).app X ≫ (F.μIso (m₁ ⊗ m₂) m₃).inv.app X = 𝟙 ((F.obj m₃).obj ((F.obj (m₁ ⊗ m₂)).obj X))
state_after: no goals