Theorem: CategoryTheory.regularTopology.equalizerCondition_iff_isSheaf
File: Mathlib/CategoryTheory/Sites/Coherent/RegularSheaves.lean

tactic: dsimp [regularTopology]
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Category.{u_5, u_2} D
inst✝² : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝¹ : Preregular C
inst✝ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
⊢ EqualizerCondition F ↔ Presheaf.IsSheaf (regularTopology C) F
state_after: C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Category.{u_5, u_2} D
inst✝² : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝¹ : Preregular C
inst✝ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
⊢ EqualizerCondition F ↔ Presheaf.IsSheaf (Coverage.toGrothendieck C (regularCoverage C)) F

tactic: rw [Presheaf.isSheaf_iff_isLimit_coverage]
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Category.{u_5, u_2} D
inst✝² : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝¹ : Preregular C
inst✝ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
⊢ EqualizerCondition F ↔ Presheaf.IsSheaf (Coverage.toGrothendieck C (regularCoverage C)) F
state_after: C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Category.{u_5, u_2} D
inst✝² : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝¹ : Preregular C
inst✝ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
⊢ EqualizerCondition F ↔
    ∀ ⦃X : C⦄, ∀ R ∈ (regularCoverage C).covering X, Nonempty (IsLimit (F.mapCone (Sieve.generate R).arrows.cocone.op))

tactic: constructor
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Category.{u_5, u_2} D
inst✝² : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝¹ : Preregular C
inst✝ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
⊢ EqualizerCondition F ↔
    ∀ ⦃X : C⦄, ∀ R ∈ (regularCoverage C).covering X, Nonempty (IsLimit (F.mapCone (Sieve.generate R).arrows.cocone.op))
state_after: case mp
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Category.{u_5, u_2} D
inst✝² : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝¹ : Preregular C
inst✝ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
⊢ EqualizerCondition F →
    ∀ ⦃X : C⦄, ∀ R ∈ (regularCoverage C).covering X, Nonempty (IsLimit (F.mapCone (Sieve.generate R).arrows.cocone.op))

case mpr
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Category.{u_5, u_2} D
inst✝² : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝¹ : Preregular C
inst✝ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
⊢ (∀ ⦃X : C⦄,
      ∀ R ∈ (regularCoverage C).covering X, Nonempty (IsLimit (F.mapCone (Sieve.generate R).arrows.cocone.op))) →
    EqualizerCondition F

tactic: rintro hF X _ ⟨Y, f, rfl, _⟩
state_before: case mp
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Category.{u_5, u_2} D
inst✝² : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝¹ : Preregular C
inst✝ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
⊢ EqualizerCondition F →
    ∀ ⦃X : C⦄, ∀ R ∈ (regularCoverage C).covering X, Nonempty (IsLimit (F.mapCone (Sieve.generate R).arrows.cocone.op))
state_after: case mp.intro.intro.intro
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Category.{u_5, u_2} D
inst✝² : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝¹ : Preregular C
inst✝ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
hF : EqualizerCondition F
X Y : C
f : Y ⟶ X
right✝ : EffectiveEpi f
⊢ Nonempty (IsLimit (F.mapCone (Sieve.generate (ofArrows (fun x => Y) fun x => f)).arrows.cocone.op))

tactic: exact (equalizerConditionMap_iff_nonempty_isLimit F f).1 (hF f)
state_before: case mp.intro.intro.intro
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Category.{u_5, u_2} D
inst✝² : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝¹ : Preregular C
inst✝ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
hF : EqualizerCondition F
X Y : C
f : Y ⟶ X
right✝ : EffectiveEpi f
⊢ Nonempty (IsLimit (F.mapCone (Sieve.generate (ofArrows (fun x => Y) fun x => f)).arrows.cocone.op))
state_after: no goals

tactic: intro hF Y X f _
state_before: case mpr
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Category.{u_5, u_2} D
inst✝² : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝¹ : Preregular C
inst✝ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
⊢ (∀ ⦃X : C⦄,
      ∀ R ∈ (regularCoverage C).covering X, Nonempty (IsLimit (F.mapCone (Sieve.generate R).arrows.cocone.op))) →
    EqualizerCondition F
state_after: case mpr
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁵ : Category.{u_4, u_1} C
inst✝⁴ : Category.{u_5, u_2} D
inst✝³ : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝² : Preregular C
inst✝¹ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
hF : ∀ ⦃X : C⦄, ∀ R ∈ (regularCoverage C).covering X, Nonempty (IsLimit (F.mapCone (Sieve.generate R).arrows.cocone.op))
Y X : C
f : Y ⟶ X
inst✝ : EffectiveEpi f
⊢ SingleEqualizerCondition F f

tactic: exact (equalizerConditionMap_iff_nonempty_isLimit F f).2 (hF _ ⟨_, f, rfl, inferInstance⟩)
state_before: case mpr
C : Type u_1
D : Type u_2
E : Type u_3
inst✝⁵ : Category.{u_4, u_1} C
inst✝⁴ : Category.{u_5, u_2} D
inst✝³ : Category.{?u.127338, u_3} E
F : Cᵒᵖ ⥤ D
inst✝² : Preregular C
inst✝¹ : ∀ {Y X : C} (f : Y ⟶ X) [inst : EffectiveEpi f], HasPullback f f
hF : ∀ ⦃X : C⦄, ∀ R ∈ (regularCoverage C).covering X, Nonempty (IsLimit (F.mapCone (Sieve.generate R).arrows.cocone.op))
Y X : C
f : Y ⟶ X
inst✝ : EffectiveEpi f
⊢ SingleEqualizerCondition F f
state_after: no goals