Theorem: CategoryTheory.Equivalence.toAdjunction_counit
File: Mathlib/CategoryTheory/Adjunction/Basic.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
⊢ whiskerRight e.unit e.functor ≫ (e.functor.associator e.inverse e.functor).hom ≫ whiskerLeft e.functor e.counit =
    NatTrans.id (𝟭 C ⋙ e.functor)
state_after: case w.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
x✝ : C
⊢ (whiskerRight e.unit e.functor ≫ (e.functor.associator e.inverse e.functor).hom ≫ whiskerLeft e.functor e.counit).app
      x✝ =
    (NatTrans.id (𝟭 C ⋙ e.functor)).app x✝
tactic: ext
state_before: case w.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
x✝ : C
⊢ (whiskerRight e.unit e.functor ≫ (e.functor.associator e.inverse e.functor).hom ≫ whiskerLeft e.functor e.counit).app
      x✝ =
    (NatTrans.id (𝟭 C ⋙ e.functor)).app x✝
state_after: case w.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
x✝ : C
⊢ e.functor.map (e.unit.app x✝) ≫
      𝟙 (e.functor.obj (e.inverse.obj (e.functor.obj x✝))) ≫ e.counit.app (e.functor.obj x✝) =
    𝟙 (e.functor.obj x✝)
tactic: dsimp
state_before: case w.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
x✝ : C
⊢ e.functor.map (e.unit.app x✝) ≫
      𝟙 (e.functor.obj (e.inverse.obj (e.functor.obj x✝))) ≫ e.counit.app (e.functor.obj x✝) =
    𝟙 (e.functor.obj x✝)
state_after: case w.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
x✝ : C
⊢ e.functor.map (e.unit.app x✝) ≫ e.counit.app (e.functor.obj x✝) = 𝟙 (e.functor.obj x✝)
tactic: simp only [id_comp]
state_before: case w.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
x✝ : C
⊢ e.functor.map (e.unit.app x✝) ≫ e.counit.app (e.functor.obj x✝) = 𝟙 (e.functor.obj x✝)
state_after: no goals
tactic: exact e.functor_unit_comp _
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
⊢ whiskerLeft e.inverse e.unit ≫ (e.inverse.associator e.functor e.inverse).inv ≫ whiskerRight e.counit e.inverse =
    NatTrans.id (e.inverse ⋙ 𝟭 C)
state_after: case w.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
x✝ : D
⊢ (whiskerLeft e.inverse e.unit ≫ (e.inverse.associator e.functor e.inverse).inv ≫ whiskerRight e.counit e.inverse).app
      x✝ =
    (NatTrans.id (e.inverse ⋙ 𝟭 C)).app x✝
tactic: ext
state_before: case w.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
x✝ : D
⊢ (whiskerLeft e.inverse e.unit ≫ (e.inverse.associator e.functor e.inverse).inv ≫ whiskerRight e.counit e.inverse).app
      x✝ =
    (NatTrans.id (e.inverse ⋙ 𝟭 C)).app x✝
state_after: case w.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
x✝ : D
⊢ e.unit.app (e.inverse.obj x✝) ≫
      𝟙 (e.inverse.obj (e.functor.obj (e.inverse.obj x✝))) ≫ e.inverse.map (e.counit.app x✝) =
    𝟙 (e.inverse.obj x✝)
tactic: dsimp
state_before: case w.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
x✝ : D
⊢ e.unit.app (e.inverse.obj x✝) ≫
      𝟙 (e.inverse.obj (e.functor.obj (e.inverse.obj x✝))) ≫ e.inverse.map (e.counit.app x✝) =
    𝟙 (e.inverse.obj x✝)
state_after: case w.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
x✝ : D
⊢ e.unit.app (e.inverse.obj x✝) ≫ e.inverse.map (e.counit.app x✝) = 𝟙 (e.inverse.obj x✝)
tactic: simp only [id_comp]
state_before: case w.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
e : C ≌ D
x✝ : D
⊢ e.unit.app (e.inverse.obj x✝) ≫ e.inverse.map (e.counit.app x✝) = 𝟙 (e.inverse.obj x✝)
state_after: no goals
tactic: exact e.unit_inverse_comp _