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

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.125294, u_3} E
P : Cᵒᵖ ⥤ D
X B : C
π : X ⟶ B
inst✝ : HasPullback π π
⊢ SingleEqualizerCondition P π ↔
    Nonempty (IsLimit (P.mapCone (Sieve.ofArrows (fun x => X) fun x => π).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.125294, u_3} E
P : Cᵒᵖ ⥤ D
X B : C
π : X ⟶ B
inst✝ : HasPullback π π
⊢ SingleEqualizerCondition P π →
    Nonempty (IsLimit (P.mapCone (Sieve.ofArrows (fun x => X) fun x => π).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.125294, u_3} E
P : Cᵒᵖ ⥤ D
X B : C
π : X ⟶ B
inst✝ : HasPullback π π
⊢ Nonempty (IsLimit (P.mapCone (Sieve.ofArrows (fun x => X) fun x => π).arrows.cocone.op)) →
    SingleEqualizerCondition P π

tactic: intro h
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.125294, u_3} E
P : Cᵒᵖ ⥤ D
X B : C
π : X ⟶ B
inst✝ : HasPullback π π
⊢ SingleEqualizerCondition P π →
    Nonempty (IsLimit (P.mapCone (Sieve.ofArrows (fun x => X) fun x => π).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.125294, u_3} E
P : Cᵒᵖ ⥤ D
X B : C
π : X ⟶ B
inst✝ : HasPullback π π
h : SingleEqualizerCondition P π
⊢ Nonempty (IsLimit (P.mapCone (Sieve.ofArrows (fun x => X) fun x => π).arrows.cocone.op))

tactic: exact ⟨isLimit_forkOfι_equiv _ _ _ (pullbackIsPullback π π) (h _ (pullbackIsPullback π π)).some⟩
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.125294, u_3} E
P : Cᵒᵖ ⥤ D
X B : C
π : X ⟶ B
inst✝ : HasPullback π π
h : SingleEqualizerCondition P π
⊢ Nonempty (IsLimit (P.mapCone (Sieve.ofArrows (fun x => X) fun x => π).arrows.cocone.op))
state_after: no goals

tactic: intro ⟨h⟩
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.125294, u_3} E
P : Cᵒᵖ ⥤ D
X B : C
π : X ⟶ B
inst✝ : HasPullback π π
⊢ Nonempty (IsLimit (P.mapCone (Sieve.ofArrows (fun x => X) fun x => π).arrows.cocone.op)) →
    SingleEqualizerCondition P π
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.125294, u_3} E
P : Cᵒᵖ ⥤ D
X B : C
π : X ⟶ B
inst✝ : HasPullback π π
h : IsLimit (P.mapCone (Sieve.ofArrows (fun x => X) fun x => π).arrows.cocone.op)
⊢ SingleEqualizerCondition P π

tactic: exact fun c hc ↦ ⟨(isLimit_forkOfι_equiv _ _ _ hc).symm h⟩
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.125294, u_3} E
P : Cᵒᵖ ⥤ D
X B : C
π : X ⟶ B
inst✝ : HasPullback π π
h : IsLimit (P.mapCone (Sieve.ofArrows (fun x => X) fun x => π).arrows.cocone.op)
⊢ SingleEqualizerCondition P π
state_after: no goals