Theorem: CategoryTheory.mem_essImage_of_unit_isSplitMono
File: Mathlib/CategoryTheory/Adjunction/Reflective.lean

tactic: let η : 𝟭 C ⟶ leftAdjoint i ⋙ i := (ofRightAdjoint i).unit
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝⁴ : Category C
inst✝³ : Category D
inst✝² : Category E
i : D ⥤ C
inst✝¹ : Reflective i
A : C
inst✝ : IsSplitMono ((ofRightAdjoint i).unit.app A)
⊢ A ∈ Functor.essImage i

tactic: haveI : IsIso (η.app (i.obj ((leftAdjoint i).obj A))) :=
  Functor.essImage.unit_isIso ((i.obj_mem_essImage _))
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝⁴ : Category C
inst✝³ : Category D
inst✝² : Category E
i : D ⥤ C
inst✝¹ : Reflective i
A : C
inst✝ : IsSplitMono ((ofRightAdjoint i).unit.app A)
η : 𝟭 C ⟶ leftAdjoint i ⋙ i := (ofRightAdjoint i).unit
⊢ A ∈ Functor.essImage i

tactic: have : Epi (η.app A) := by
  refine @epi_of_epi _ _ _ _ _ (retraction (η.app A)) (η.app A) ?_
  rw [show retraction _ ≫ η.app A = _ from η.naturality (retraction (η.app A))]
  apply epi_comp (η.app (i.obj ((leftAdjoint i).obj A)))
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝⁴ : Category C
inst✝³ : Category D
inst✝² : Category E
i : D ⥤ C
inst✝¹ : Reflective i
A : C
inst✝ : IsSplitMono ((ofRightAdjoint i).unit.app A)
η : 𝟭 C ⟶ leftAdjoint i ⋙ i := (ofRightAdjoint i).unit
this : IsIso (η.app (i.obj ((leftAdjoint i).obj A)))
⊢ A ∈ Functor.essImage i

tactic: skip
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝⁴ : Category C
inst✝³ : Category D
inst✝² : Category E
i : D ⥤ C
inst✝¹ : Reflective i
A : C
inst✝ : IsSplitMono ((ofRightAdjoint i).unit.app A)
η : 𝟭 C ⟶ leftAdjoint i ⋙ i := (ofRightAdjoint i).unit
this✝ : IsIso (η.app (i.obj ((leftAdjoint i).obj A)))
this : Epi (η.app A)
⊢ A ∈ Functor.essImage i

tactic: haveI := isIso_of_epi_of_isSplitMono (η.app A)
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝⁴ : Category C
inst✝³ : Category D
inst✝² : Category E
i : D ⥤ C
inst✝¹ : Reflective i
A : C
inst✝ : IsSplitMono ((ofRightAdjoint i).unit.app A)
η : 𝟭 C ⟶ leftAdjoint i ⋙ i := (ofRightAdjoint i).unit
this✝ : IsIso (η.app (i.obj ((leftAdjoint i).obj A)))
this : Epi (η.app A)
⊢ A ∈ Functor.essImage i

tactic: exact mem_essImage_of_unit_isIso A
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝⁴ : Category C
inst✝³ : Category D
inst✝² : Category E
i : D ⥤ C
inst✝¹ : Reflective i
A : C
inst✝ : IsSplitMono ((ofRightAdjoint i).unit.app A)
η : 𝟭 C ⟶ leftAdjoint i ⋙ i := (ofRightAdjoint i).unit
this✝¹ : IsIso (η.app (i.obj ((leftAdjoint i).obj A)))
this✝ : Epi (η.app A)
this : IsIso (η.app A)
⊢ A ∈ Functor.essImage i

tactic: refine @epi_of_epi _ _ _ _ _ (retraction (η.app A)) (η.app A) ?_
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝⁴ : Category C
inst✝³ : Category D
inst✝² : Category E
i : D ⥤ C
inst✝¹ : Reflective i
A : C
inst✝ : IsSplitMono ((ofRightAdjoint i).unit.app A)
η : 𝟭 C ⟶ leftAdjoint i ⋙ i := (ofRightAdjoint i).unit
this : IsIso (η.app (i.obj ((leftAdjoint i).obj A)))
⊢ Epi (η.app A)

tactic: rw [show retraction _ ≫ η.app A = _ from η.naturality (retraction (η.app A))]
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝⁴ : Category C
inst✝³ : Category D
inst✝² : Category E
i : D ⥤ C
inst✝¹ : Reflective i
A : C
inst✝ : IsSplitMono ((ofRightAdjoint i).unit.app A)
η : 𝟭 C ⟶ leftAdjoint i ⋙ i := (ofRightAdjoint i).unit
this : IsIso (η.app (i.obj ((leftAdjoint i).obj A)))
⊢ Epi (retraction (η.app A) ≫ η.app A)

tactic: apply epi_comp (η.app (i.obj ((leftAdjoint i).obj A)))
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝⁴ : Category C
inst✝³ : Category D
inst✝² : Category E
i : D ⥤ C
inst✝¹ : Reflective i
A : C
inst✝ : IsSplitMono ((ofRightAdjoint i).unit.app A)
η : 𝟭 C ⟶ leftAdjoint i ⋙ i := (ofRightAdjoint i).unit
this : IsIso (η.app (i.obj ((leftAdjoint i).obj A)))
⊢ Epi (η.app ((leftAdjoint i ⋙ i).obj A) ≫ (leftAdjoint i ⋙ i).map (retraction (η.app A)))