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

tactic: apply EqualizerCondition.mk
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: 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 π)
⊢ ∀ (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: refine ⟨fun a b h ↦ ?_, fun ⟨a, ha⟩ ↦ ?_⟩
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 { unop := 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 { unop := 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: simp only [yonedaPresheaf, unop_op, Quiver.Hom.unop_op, Set.coe_setOf, MapToEqualizer,
  Set.mem_setOf_eq, Subtype.mk.injEq, comp, ContinuousMap.mk.injEq] at h
state_before: 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 { unop := B }
h :
  MapToEqualizer (yonedaPresheaf G X) π pullback.fst pullback.snd ⋯ a =
    MapToEqualizer (yonedaPresheaf G X) π pullback.fst pullback.snd ⋯ b
⊢ a = b
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 { unop := B }
h : ⇑a ∘ ⇑(G.map π) = ⇑b ∘ ⇑(G.map π)
⊢ a = b

tactic: ext x
state_before: 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 { unop := B }
h : ⇑a ∘ ⇑(G.map π) = ⇑b ∘ ⇑(G.map π)
⊢ a = b
state_after: case hP.refine_1.h
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 { unop := B }
h : ⇑a ∘ ⇑(G.map π) = ⇑b ∘ ⇑(G.map π)
x : ↑(G.obj { unop := B }.unop)
⊢ a x = b x

tactic: obtain ⟨y, hy⟩ := (hq Z B π).surjective x
state_before: case hP.refine_1.h
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 { unop := B }
h : ⇑a ∘ ⇑(G.map π) = ⇑b ∘ ⇑(G.map π)
x : ↑(G.obj { unop := B }.unop)
⊢ a x = b x
state_after: case hP.refine_1.h.intro
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 { unop := B }
h : ⇑a ∘ ⇑(G.map π) = ⇑b ∘ ⇑(G.map π)
x : ↑(G.obj { unop := B }.unop)
y : ↑(G.obj Z)
hy : (G.map π) y = x
⊢ a x = b x

tactic: rw [← hy]
state_before: case hP.refine_1.h.intro
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 { unop := B }
h : ⇑a ∘ ⇑(G.map π) = ⇑b ∘ ⇑(G.map π)
x : ↑(G.obj { unop := B }.unop)
y : ↑(G.obj Z)
hy : (G.map π) y = x
⊢ a x = b x
state_after: case hP.refine_1.h.intro
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 { unop := B }
h : ⇑a ∘ ⇑(G.map π) = ⇑b ∘ ⇑(G.map π)
x : ↑(G.obj { unop := B }.unop)
y : ↑(G.obj Z)
hy : (G.map π) y = x
⊢ a ((G.map π) y) = b ((G.map π) y)

tactic: exact congr_fun h y
state_before: case hP.refine_1.h.intro
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 { unop := B }
h : ⇑a ∘ ⇑(G.map π) = ⇑b ∘ ⇑(G.map π)
x : ↑(G.obj { unop := B }.unop)
y : ↑(G.obj Z)
hy : (G.map π) y = x
⊢ a ((G.map π) y) = b ((G.map π) y)
state_after: no goals

tactic: simp only [yonedaPresheaf, comp, unop_op, Quiver.Hom.unop_op, Set.mem_setOf_eq,
  ContinuousMap.mk.injEq] at ha
state_before: 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 { unop := 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⟩
state_after: 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 { unop := Z }
ha✝ : a ∈ {x | (yonedaPresheaf G X).map pullback.fst.op x = (yonedaPresheaf G X).map pullback.snd.op x}
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
⊢ ∃ a_1, MapToEqualizer (yonedaPresheaf G X) π pullback.fst pullback.snd ⋯ a_1 = ⟨a, ha✝⟩

tactic: simp only [yonedaPresheaf, comp, unop_op, Quiver.Hom.unop_op, Set.coe_setOf,
  MapToEqualizer, Set.mem_setOf_eq, Subtype.mk.injEq]
state_before: 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 { unop := Z }
ha✝ : a ∈ {x | (yonedaPresheaf G X).map pullback.fst.op x = (yonedaPresheaf G X).map pullback.snd.op x}
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
⊢ ∃ a_1, MapToEqualizer (yonedaPresheaf G X) π pullback.fst pullback.snd ⋯ a_1 = ⟨a, ha✝⟩
state_after: 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 { unop := Z }
ha✝ : a ∈ {x | (yonedaPresheaf G X).map pullback.fst.op x = (yonedaPresheaf G X).map pullback.snd.op x}
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
⊢ ∃ a_1, { toFun := ⇑a_1 ∘ ⇑(G.map π), continuous_toFun := ⋯ } = a

tactic: simp only [yonedaPresheaf, unop_op] at a
state_before: 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 { unop := Z }
ha✝ : a ∈ {x | (yonedaPresheaf G X).map pullback.fst.op x = (yonedaPresheaf G X).map pullback.snd.op x}
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
⊢ ∃ a_1, { toFun := ⇑a_1 ∘ ⇑(G.map π), continuous_toFun := ⋯ } = a
state_after: 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 : C(↑(G.obj Z), X)
ha✝ : a ∈ {x | (yonedaPresheaf G X).map pullback.fst.op x = (yonedaPresheaf G X).map pullback.snd.op x}
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
⊢ ∃ a_1, { toFun := ⇑a_1 ∘ ⇑(G.map π), continuous_toFun := ⋯ } = a

tactic: refine ⟨(hq Z B π).lift a (factorsThrough_of_pullbackCondition G X ha), ?_⟩
state_before: 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 : C(↑(G.obj Z), X)
ha✝ : a ∈ {x | (yonedaPresheaf G X).map pullback.fst.op x = (yonedaPresheaf G X).map pullback.snd.op x}
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
⊢ ∃ a_1, { toFun := ⇑a_1 ∘ ⇑(G.map π), continuous_toFun := ⋯ } = a
state_after: 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 : C(↑(G.obj Z), X)
ha✝ : a ∈ {x | (yonedaPresheaf G X).map pullback.fst.op x = (yonedaPresheaf G X).map pullback.snd.op x}
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
⊢ { toFun := ⇑(⋯.lift a ⋯) ∘ ⇑(G.map π), continuous_toFun := ⋯ } = a

tactic: congr
state_before: 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 : C(↑(G.obj Z), X)
ha✝ : a ∈ {x | (yonedaPresheaf G X).map pullback.fst.op x = (yonedaPresheaf G X).map pullback.snd.op x}
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
⊢ { toFun := ⇑(⋯.lift a ⋯) ∘ ⇑(G.map π), continuous_toFun := ⋯ } = a
state_after: case hP.refine_2.e_toFun
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 : C(↑(G.obj Z), X)
ha✝ : a ∈ {x | (yonedaPresheaf G X).map pullback.fst.op x = (yonedaPresheaf G X).map pullback.snd.op x}
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
⊢ ⇑(⋯.lift a ⋯) ∘ ⇑(G.map π) = a.toFun

tactic: exact DFunLike.ext'_iff.mp ((hq Z B π).lift_comp a (factorsThrough_of_pullbackCondition G X ha))
state_before: case hP.refine_2.e_toFun
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 : C(↑(G.obj Z), X)
ha✝ : a ∈ {x | (yonedaPresheaf G X).map pullback.fst.op x = (yonedaPresheaf G X).map pullback.snd.op x}
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
⊢ ⇑(⋯.lift a ⋯) ∘ ⇑(G.map π) = a.toFun
state_after: no goals