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

Proof steps:
state_before: C : Type u_1
inst✝¹⁵ : Category.{u_6, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹⁴ : Category.{u_4, u_2} A
inst✝¹³ : HasWeakSheafify J A
inst✝¹² : (constantSheaf J A).Faithful
inst✝¹¹ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
B : Type u_3
inst✝¹⁰ : Category.{u_5, u_3} B
U : A ⥤ B
inst✝⁹ : HasWeakSheafify J A
inst✝⁸ : HasWeakSheafify J B
inst✝⁷ : (constantSheaf J A).Faithful
inst✝⁶ : (constantSheaf J A).Full
inst✝⁵ : (constantSheaf J B).Faithful
inst✝⁴ : (constantSheaf J B).Full
inst✝³ : J.PreservesSheafification U
inst✝² : J.HasSheafCompose U
F : Sheaf J A
inst✝¹ : (sheafCompose J U).ReflectsIsomorphisms
inst✝ : IsDiscrete J ht ((sheafCompose J U).obj F)
⊢ IsDiscrete J ht F
state_after: C : Type u_1
inst✝¹⁵ : Category.{u_6, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹⁴ : Category.{u_4, u_2} A
inst✝¹³ : HasWeakSheafify J A
inst✝¹² : (constantSheaf J A).Faithful
inst✝¹¹ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
B : Type u_3
inst✝¹⁰ : Category.{u_5, u_3} B
U : A ⥤ B
inst✝⁹ : HasWeakSheafify J A
inst✝⁸ : HasWeakSheafify J B
inst✝⁷ : (constantSheaf J A).Faithful
inst✝⁶ : (constantSheaf J A).Full
inst✝⁵ : (constantSheaf J B).Faithful
inst✝⁴ : (constantSheaf J B).Full
inst✝³ : J.PreservesSheafification U
inst✝² : J.HasSheafCompose U
F : Sheaf J A
inst✝¹ : (sheafCompose J U).ReflectsIsomorphisms
inst✝ : IsDiscrete J ht ((sheafCompose J U).obj F)
f : (sheafCompose J U).obj (((sheafSections J A).obj (op t) ⋙ constantSheaf J A).obj F) ⟶
  (sheafCompose J U).obj ((𝟭 (Sheaf J A)).obj F) :=
  (sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F)
⊢ IsDiscrete J ht F
tactic: let f := (sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F)
state_before: C : Type u_1
inst✝¹⁵ : Category.{u_6, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹⁴ : Category.{u_4, u_2} A
inst✝¹³ : HasWeakSheafify J A
inst✝¹² : (constantSheaf J A).Faithful
inst✝¹¹ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
B : Type u_3
inst✝¹⁰ : Category.{u_5, u_3} B
U : A ⥤ B
inst✝⁹ : HasWeakSheafify J A
inst✝⁸ : HasWeakSheafify J B
inst✝⁷ : (constantSheaf J A).Faithful
inst✝⁶ : (constantSheaf J A).Full
inst✝⁵ : (constantSheaf J B).Faithful
inst✝⁴ : (constantSheaf J B).Full
inst✝³ : J.PreservesSheafification U
inst✝² : J.HasSheafCompose U
F : Sheaf J A
inst✝¹ : (sheafCompose J U).ReflectsIsomorphisms
inst✝ : IsDiscrete J ht ((sheafCompose J U).obj F)
f : (sheafCompose J U).obj (((sheafSections J A).obj (op t) ⋙ constantSheaf J A).obj F) ⟶
  (sheafCompose J U).obj ((𝟭 (Sheaf J A)).obj F) :=
  (sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F)
⊢ IsDiscrete J ht F
state_after: C : Type u_1
inst✝¹⁵ : Category.{u_6, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹⁴ : Category.{u_4, u_2} A
inst✝¹³ : HasWeakSheafify J A
inst✝¹² : (constantSheaf J A).Faithful
inst✝¹¹ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
B : Type u_3
inst✝¹⁰ : Category.{u_5, u_3} B
U : A ⥤ B
inst✝⁹ : HasWeakSheafify J A
inst✝⁸ : HasWeakSheafify J B
inst✝⁷ : (constantSheaf J A).Faithful
inst✝⁶ : (constantSheaf J A).Full
inst✝⁵ : (constantSheaf J B).Faithful
inst✝⁴ : (constantSheaf J B).Full
inst✝³ : J.PreservesSheafification U
inst✝² : J.HasSheafCompose U
F : Sheaf J A
inst✝¹ : (sheafCompose J U).ReflectsIsomorphisms
inst✝ : IsDiscrete J ht ((sheafCompose J U).obj F)
f : (sheafCompose J U).obj (((sheafSections J A).obj (op t) ⋙ constantSheaf J A).obj F) ⟶
  (sheafCompose J U).obj ((𝟭 (Sheaf J A)).obj F) :=
  (sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F)
this : IsIso ((sheafToPresheaf J B).map f)
⊢ IsDiscrete J ht F
tactic: have : IsIso ((sheafToPresheaf J B).map f) := by
    simp only [comp_obj, flip_obj_obj, sheafToPresheaf_obj, sheafCompose_obj_val, id_obj,
      sheafToPresheaf_map, f, ← constantSheafAdj_counit_w]
    exact inferInstanceAs (IsIso (_ ≫ ((sheafToPresheaf J B).map
      ((constantSheafAdj J B ht).counit.app ((sheafCompose J U).obj F)))))
state_before: C : Type u_1
inst✝¹⁵ : Category.{u_6, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹⁴ : Category.{u_4, u_2} A
inst✝¹³ : HasWeakSheafify J A
inst✝¹² : (constantSheaf J A).Faithful
inst✝¹¹ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
B : Type u_3
inst✝¹⁰ : Category.{u_5, u_3} B
U : A ⥤ B
inst✝⁹ : HasWeakSheafify J A
inst✝⁸ : HasWeakSheafify J B
inst✝⁷ : (constantSheaf J A).Faithful
inst✝⁶ : (constantSheaf J A).Full
inst✝⁵ : (constantSheaf J B).Faithful
inst✝⁴ : (constantSheaf J B).Full
inst✝³ : J.PreservesSheafification U
inst✝² : J.HasSheafCompose U
F : Sheaf J A
inst✝¹ : (sheafCompose J U).ReflectsIsomorphisms
inst✝ : IsDiscrete J ht ((sheafCompose J U).obj F)
f : (sheafCompose J U).obj (((sheafSections J A).obj (op t) ⋙ constantSheaf J A).obj F) ⟶
  (sheafCompose J U).obj ((𝟭 (Sheaf J A)).obj F) :=
  (sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F)
this : IsIso ((sheafToPresheaf J B).map f)
⊢ IsDiscrete J ht F
state_after: C : Type u_1
inst✝¹⁵ : Category.{u_6, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹⁴ : Category.{u_4, u_2} A
inst✝¹³ : HasWeakSheafify J A
inst✝¹² : (constantSheaf J A).Faithful
inst✝¹¹ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
B : Type u_3
inst✝¹⁰ : Category.{u_5, u_3} B
U : A ⥤ B
inst✝⁹ : HasWeakSheafify J A
inst✝⁸ : HasWeakSheafify J B
inst✝⁷ : (constantSheaf J A).Faithful
inst✝⁶ : (constantSheaf J A).Full
inst✝⁵ : (constantSheaf J B).Faithful
inst✝⁴ : (constantSheaf J B).Full
inst✝³ : J.PreservesSheafification U
inst✝² : J.HasSheafCompose U
F : Sheaf J A
inst✝¹ : (sheafCompose J U).ReflectsIsomorphisms
inst✝ : IsDiscrete J ht ((sheafCompose J U).obj F)
f : (sheafCompose J U).obj (((sheafSections J A).obj (op t) ⋙ constantSheaf J A).obj F) ⟶
  (sheafCompose J U).obj ((𝟭 (Sheaf J A)).obj F) :=
  (sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F)
this✝ : IsIso ((sheafToPresheaf J B).map f)
this : IsIso f
⊢ IsDiscrete J ht F
tactic: have : IsIso f := by
    apply ReflectsIsomorphisms.reflects (sheafToPresheaf J B) _
state_before: C : Type u_1
inst✝¹⁵ : Category.{u_6, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹⁴ : Category.{u_4, u_2} A
inst✝¹³ : HasWeakSheafify J A
inst✝¹² : (constantSheaf J A).Faithful
inst✝¹¹ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
B : Type u_3
inst✝¹⁰ : Category.{u_5, u_3} B
U : A ⥤ B
inst✝⁹ : HasWeakSheafify J A
inst✝⁸ : HasWeakSheafify J B
inst✝⁷ : (constantSheaf J A).Faithful
inst✝⁶ : (constantSheaf J A).Full
inst✝⁵ : (constantSheaf J B).Faithful
inst✝⁴ : (constantSheaf J B).Full
inst✝³ : J.PreservesSheafification U
inst✝² : J.HasSheafCompose U
F : Sheaf J A
inst✝¹ : (sheafCompose J U).ReflectsIsomorphisms
inst✝ : IsDiscrete J ht ((sheafCompose J U).obj F)
f : (sheafCompose J U).obj (((sheafSections J A).obj (op t) ⋙ constantSheaf J A).obj F) ⟶
  (sheafCompose J U).obj ((𝟭 (Sheaf J A)).obj F) :=
  (sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F)
this✝ : IsIso ((sheafToPresheaf J B).map f)
this : IsIso f
⊢ IsDiscrete J ht F
state_after: no goals
tactic: apply ReflectsIsomorphisms.reflects (sheafCompose J U) _