Theorem: CategoryTheory.Sheaf.isDiscrete_iff_isIso_counit_app
File: Mathlib/CategoryTheory/Sites/Discrete.lean

Proof steps:
state_before: C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝³ : Category.{u_3, u_2} A
inst✝² : HasWeakSheafify J A
inst✝¹ : (constantSheaf J A).Faithful
inst✝ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
L : A ⥤ Sheaf J A
adj : L ⊣ (sheafSections J A).obj (op t)
F : Sheaf J A
⊢ IsDiscrete J ht F ↔ IsIso (adj.counit.app F)
state_after: C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝³ : Category.{u_3, u_2} A
inst✝² : HasWeakSheafify J A
inst✝¹ : (constantSheaf J A).Faithful
inst✝ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
L : A ⥤ Sheaf J A
adj : L ⊣ (sheafSections J A).obj (op t)
F : Sheaf J A
this : L.Faithful
⊢ IsDiscrete J ht F ↔ IsIso (adj.counit.app F)
tactic: have : L.Faithful := Functor.Faithful.of_iso (adj.leftAdjointUniq (constantSheafAdj _ _ ht)).symm
state_before: C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝³ : Category.{u_3, u_2} A
inst✝² : HasWeakSheafify J A
inst✝¹ : (constantSheaf J A).Faithful
inst✝ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
L : A ⥤ Sheaf J A
adj : L ⊣ (sheafSections J A).obj (op t)
F : Sheaf J A
this : L.Faithful
⊢ IsDiscrete J ht F ↔ IsIso (adj.counit.app F)
state_after: C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝³ : Category.{u_3, u_2} A
inst✝² : HasWeakSheafify J A
inst✝¹ : (constantSheaf J A).Faithful
inst✝ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
L : A ⥤ Sheaf J A
adj : L ⊣ (sheafSections J A).obj (op t)
F : Sheaf J A
this✝ : L.Faithful
this : L.Full
⊢ IsDiscrete J ht F ↔ IsIso (adj.counit.app F)
tactic: have : L.Full := Functor.Full.of_iso (adj.leftAdjointUniq (constantSheafAdj _ _ ht)).symm
state_before: C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝³ : Category.{u_3, u_2} A
inst✝² : HasWeakSheafify J A
inst✝¹ : (constantSheaf J A).Faithful
inst✝ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
L : A ⥤ Sheaf J A
adj : L ⊣ (sheafSections J A).obj (op t)
F : Sheaf J A
this✝ : L.Faithful
this : L.Full
⊢ IsDiscrete J ht F ↔ IsIso (adj.counit.app F)
state_after: C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝³ : Category.{u_3, u_2} A
inst✝² : HasWeakSheafify J A
inst✝¹ : (constantSheaf J A).Faithful
inst✝ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
L : A ⥤ Sheaf J A
adj : L ⊣ (sheafSections J A).obj (op t)
F : Sheaf J A
this✝ : L.Faithful
this : L.Full
⊢ IsDiscrete J ht F ↔ F ∈ L.essImage
tactic: rw [isIso_counit_app_iff_mem_essImage]
state_before: C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝³ : Category.{u_3, u_2} A
inst✝² : HasWeakSheafify J A
inst✝¹ : (constantSheaf J A).Faithful
inst✝ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
L : A ⥤ Sheaf J A
adj : L ⊣ (sheafSections J A).obj (op t)
F : Sheaf J A
this✝ : L.Faithful
this : L.Full
⊢ IsDiscrete J ht F ↔ F ∈ L.essImage
state_after: no goals
tactic: exact isDiscrete_iff_mem_essImage' _ _ adj _