Theorem: CategoryTheory.Ran.reflective
File: Mathlib/CategoryTheory/Limits/KanExtension.lean

tactic: suffices : ∀ (X : S ⥤ D), IsIso (NatTrans.app (adjunction D ι).counit X)
state_before: S : Type u₁
L : Type u₂
D : Type u₃
inst✝⁵ : Category S
inst✝⁴ : Category L
inst✝³ : Category D
ι : S ⥤ L
inst✝² : Full ι
inst✝¹ : Faithful ι
inst✝ : ∀ (X : L), HasLimitsOfShape (StructuredArrow X ι) D
⊢ IsIso (adjunction D ι).counit

tactic: intro F
state_before: case this
S : Type u₁
L : Type u₂
D : Type u₃
inst✝⁵ : Category S
inst✝⁴ : Category L
inst✝³ : Category D
ι : S ⥤ L
inst✝² : Full ι
inst✝¹ : Faithful ι
inst✝ : ∀ (X : L), HasLimitsOfShape (StructuredArrow X ι) D
⊢ ∀ (X : S ⥤ D), IsIso ((adjunction D ι).counit.app X)

tactic: suffices : ∀ (X : S), IsIso (NatTrans.app (NatTrans.app (adjunction D ι).counit F) X)
state_before: case this
S : Type u₁
L : Type u₂
D : Type u₃
inst✝⁵ : Category S
inst✝⁴ : Category L
inst✝³ : Category D
ι : S ⥤ L
inst✝² : Full ι
inst✝¹ : Faithful ι
inst✝ : ∀ (X : L), HasLimitsOfShape (StructuredArrow X ι) D
F : S ⥤ D
⊢ IsIso ((adjunction D ι).counit.app F)

tactic: intro X
state_before: case this
S : Type u₁
L : Type u₂
D : Type u₃
inst✝⁵ : Category S
inst✝⁴ : Category L
inst✝³ : Category D
ι : S ⥤ L
inst✝² : Full ι
inst✝¹ : Faithful ι
inst✝ : ∀ (X : L), HasLimitsOfShape (StructuredArrow X ι) D
F : S ⥤ D
⊢ ∀ (X : S), IsIso (((adjunction D ι).counit.app F).app X)

tactic: dsimp [adjunction, equiv]
state_before: case this
S : Type u₁
L : Type u₂
D : Type u₃
inst✝⁵ : Category S
inst✝⁴ : Category L
inst✝³ : Category D
ι : S ⥤ L
inst✝² : Full ι
inst✝¹ : Faithful ι
inst✝ : ∀ (X : L), HasLimitsOfShape (StructuredArrow X ι) D
F : S ⥤ D
X : S
⊢ IsIso (((adjunction D ι).counit.app F).app X)

tactic: simp only [Category.id_comp]
state_before: case this
S : Type u₁
L : Type u₂
D : Type u₃
inst✝⁵ : Category S
inst✝⁴ : Category L
inst✝³ : Category D
ι : S ⥤ L
inst✝² : Full ι
inst✝¹ : Faithful ι
inst✝ : ∀ (X : L), HasLimitsOfShape (StructuredArrow X ι) D
F : S ⥤ D
X : S
⊢ IsIso (𝟙 (limit (diagram ι F (ι.obj X))) ≫ limit.π (diagram ι F (ι.obj X)) (StructuredArrow.mk (𝟙 (ι.obj X))))

tactic: exact
  IsIso.of_iso
    ((limit.isLimit _).conePointUniqueUpToIso
      (limitOfDiagramInitial StructuredArrow.mkIdInitial _))
state_before: case this
S : Type u₁
L : Type u₂
D : Type u₃
inst✝⁵ : Category S
inst✝⁴ : Category L
inst✝³ : Category D
ι : S ⥤ L
inst✝² : Full ι
inst✝¹ : Faithful ι
inst✝ : ∀ (X : L), HasLimitsOfShape (StructuredArrow X ι) D
F : S ⥤ D
X : S
⊢ IsIso (limit.π (diagram ι F (ι.obj X)) (StructuredArrow.mk (𝟙 (ι.obj X))))

tactic: apply NatIso.isIso_of_isIso_app
state_before: S : Type u₁
L : Type u₂
D : Type u₃
inst✝⁵ : Category S
inst✝⁴ : Category L
inst✝³ : Category D
ι : S ⥤ L
inst✝² : Full ι
inst✝¹ : Faithful ι
inst✝ : ∀ (X : L), HasLimitsOfShape (StructuredArrow X ι) D
this : ∀ (X : S ⥤ D), IsIso ((adjunction D ι).counit.app X)
⊢ IsIso (adjunction D ι).counit

tactic: apply NatIso.isIso_of_isIso_app
state_before: case this
S : Type u₁
L : Type u₂
D : Type u₃
inst✝⁵ : Category S
inst✝⁴ : Category L
inst✝³ : Category D
ι : S ⥤ L
inst✝² : Full ι
inst✝¹ : Faithful ι
inst✝ : ∀ (X : L), HasLimitsOfShape (StructuredArrow X ι) D
F : S ⥤ D
this : ∀ (X : S), IsIso (((adjunction D ι).counit.app F).app X)
⊢ IsIso ((adjunction D ι).counit.app F)