Theorem: CategoryTheory.Sheaf.isLocallySurjective_iff_epi
File: Mathlib/CategoryTheory/Sites/LocallySurjective.lean

tactic: constructor
state_before: C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
⊢ IsLocallySurjective φ ↔ Epi φ
state_after: case mp
C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
⊢ IsLocallySurjective φ → Epi φ

case mpr
C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
⊢ Epi φ → IsLocallySurjective φ

tactic: intro
state_before: case mp
C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
⊢ IsLocallySurjective φ → Epi φ
state_after: case mp
C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
a✝ : IsLocallySurjective φ
⊢ Epi φ

tactic: infer_instance
state_before: case mp
C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
a✝ : IsLocallySurjective φ
⊢ Epi φ
state_after: no goals

tactic: intro
state_before: case mpr
C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
⊢ Epi φ → IsLocallySurjective φ
state_after: case mpr
C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
a✝ : Epi φ
⊢ IsLocallySurjective φ

tactic: have := epi_of_epi_fac (toImageSheaf_ι φ)
state_before: case mpr
C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
a✝ : Epi φ
⊢ IsLocallySurjective φ
state_after: case mpr
C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
a✝ : Epi φ
this : Epi (imageSheafι φ)
⊢ IsLocallySurjective φ

tactic: rw [isLocallySurjective_iff_isIso φ]
state_before: case mpr
C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
a✝ : Epi φ
this : Epi (imageSheafι φ)
⊢ IsLocallySurjective φ
state_after: case mpr
C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
a✝ : Epi φ
this : Epi (imageSheafι φ)
⊢ IsIso (imageSheafι φ)

tactic: apply isIso_of_mono_of_epi
state_before: case mpr
C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Sheaf J A
φ✝ : F₁ ⟶ F₂
ψ : F₂ ⟶ F₃
inst✝¹ : J.HasSheafCompose (forget A)
F G : Sheaf J (Type w)
φ : F ⟶ G
inst✝ : HasSheafify J (Type w)
a✝ : Epi φ
this : Epi (imageSheafι φ)
⊢ IsIso (imageSheafι φ)
state_after: no goals