Theorem: equalizerCondition_yonedaPresheaf
File: Mathlib/Condensed/TopComparison.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝¹ : TopologicalSpace X
inst✝ : (Z B : C) → (π : Z ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) G
hq : ∀ (Z B : C) (π : Z ⟶ B) [inst : EffectiveEpi π], QuotientMap ⇑(G.map π)
⊢ EqualizerCondition (yonedaPresheaf G X)
state_after: case hP
C : Type u
inst✝² : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝¹ : TopologicalSpace X
inst✝ : (Z B : C) → (π : Z ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) G
hq : ∀ (Z B : C) (π : Z ⟶ B) [inst : EffectiveEpi π], QuotientMap ⇑(G.map π)
⊢ ∀ (X_1 B : C) (π : X_1 ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π],
    Function.Bijective (MapToEqualizer (yonedaPresheaf G X) π (pullback.fst π π) (pullback.snd π π) ⋯)
tactic: apply EqualizerCondition.mk
state_before: case hP
C : Type u
inst✝² : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝¹ : TopologicalSpace X
inst✝ : (Z B : C) → (π : Z ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) G
hq : ∀ (Z B : C) (π : Z ⟶ B) [inst : EffectiveEpi π], QuotientMap ⇑(G.map π)
⊢ ∀ (X_1 B : C) (π : X_1 ⟶ B) [inst : EffectiveEpi π] [inst : HasPullback π π],
    Function.Bijective (MapToEqualizer (yonedaPresheaf G X) π (pullback.fst π π) (pullback.snd π π) ⋯)
state_after: case hP
C : Type u
inst✝⁴ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝³ : TopologicalSpace X
inst✝² : (Z B : C) → (π : Z ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) G
hq : ∀ (Z B : C) (π : Z ⟶ B) [inst : EffectiveEpi π], QuotientMap ⇑(G.map π)
Z B : C
π : Z ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
⊢ Function.Bijective (MapToEqualizer (yonedaPresheaf G X) π (pullback.fst π π) (pullback.snd π π) ⋯)
tactic: intro Z B π _ _
state_before: case hP
C : Type u
inst✝⁴ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝³ : TopologicalSpace X
inst✝² : (Z B : C) → (π : Z ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) G
hq : ∀ (Z B : C) (π : Z ⟶ B) [inst : EffectiveEpi π], QuotientMap ⇑(G.map π)
Z B : C
π : Z ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
⊢ Function.Bijective (MapToEqualizer (yonedaPresheaf G X) π (pullback.fst π π) (pullback.snd π π) ⋯)
state_after: case hP.refine_1
C : Type u
inst✝⁴ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝³ : TopologicalSpace X
inst✝² : (Z B : C) → (π : Z ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) G
hq : ∀ (Z B : C) (π : Z ⟶ B) [inst : EffectiveEpi π], QuotientMap ⇑(G.map π)
Z B : C
π : Z ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
a b : (yonedaPresheaf G X).obj (op B)
h :
  MapToEqualizer (yonedaPresheaf G X) π (pullback.fst π π) (pullback.snd π π) ⋯ a =
    MapToEqualizer (yonedaPresheaf G X) π (pullback.fst π π) (pullback.snd π π) ⋯ b
⊢ a = b

case hP.refine_2
C : Type u
inst✝⁴ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝³ : TopologicalSpace X
inst✝² : (Z B : C) → (π : Z ⟶ B) → [inst : EffectiveEpi π] → PreservesLimit (cospan π π) G
hq : ∀ (Z B : C) (π : Z ⟶ B) [inst : EffectiveEpi π], QuotientMap ⇑(G.map π)
Z B : C
π : Z ⟶ B
inst✝¹ : EffectiveEpi π
inst✝ : HasPullback π π
x✝ : ↑{x | (yonedaPresheaf G X).map (pullback.fst π π).op x = (yonedaPresheaf G X).map (pullback.snd π π).op x}
a : (yonedaPresheaf G X).obj (op Z)
ha : a ∈ {x | (yonedaPresheaf G X).map (pullback.fst π π).op x = (yonedaPresheaf G X).map (pullback.snd π π).op x}
⊢ ∃ a_1, MapToEqualizer (yonedaPresheaf G X) π (pullback.fst π π) (pullback.snd π π) ⋯ a_1 = ⟨a, ha⟩
tactic: refine ⟨fun a b h ↦ ?_, fun ⟨a, ha⟩ ↦ ?_⟩