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

tactic: intro x y hxy
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
⊢ Function.FactorsThrough ⇑a ⇑(G.map π)
state_after: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
⊢ a x = a y

tactic: let xy : G.obj (pullback π π) := (PreservesPullback.iso G π π).inv <|
  (TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
⊢ a x = a y
state_after: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
⊢ a x = a y

tactic: have ha' := congr_fun ha xy
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
⊢ a x = a y
state_after: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : (⇑a ∘ ⇑(G.map pullback.fst)) xy = (⇑a ∘ ⇑(G.map pullback.snd)) xy
⊢ a x = a y

tactic: dsimp at ha'
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : (⇑a ∘ ⇑(G.map pullback.fst)) xy = (⇑a ∘ ⇑(G.map pullback.snd)) xy
⊢ a x = a y
state_after: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
⊢ a x = a y

tactic: have h₁ : ∀ y, G.map pullback.fst ((PreservesPullback.iso G π π).inv y) =
    pullback.fst (f := G.map π) (g := G.map π) y := by
  simp only [← PreservesPullback.iso_inv_fst]; intro y; rfl
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
⊢ a x = a y
state_after: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
h₁ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) = pullback.fst y
⊢ a x = a y

tactic: have h₂ : ∀ y, G.map pullback.snd ((PreservesPullback.iso G π π).inv y) =
    pullback.snd (f := G.map π) (g := G.map π) y := by
  simp only [← PreservesPullback.iso_inv_snd]; intro y; rfl
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
h₁ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) = pullback.fst y
⊢ a x = a y
state_after: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
h₁ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) = pullback.fst y
h₂ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.snd) ((PreservesPullback.iso G π π).inv y) = pullback.snd y
⊢ a x = a y

tactic: erw [h₁, h₂, TopCat.pullbackIsoProdSubtype_inv_fst_apply,
  TopCat.pullbackIsoProdSubtype_inv_snd_apply] at ha'
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
h₁ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) = pullback.fst y
h₂ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.snd) ((PreservesPullback.iso G π π).inv y) = pullback.snd y
⊢ a x = a y
state_after: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a (↑⟨(x, y), hxy⟩).1 = a (↑⟨(x, y), hxy⟩).2
h₁ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) = pullback.fst y
h₂ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.snd) ((PreservesPullback.iso G π π).inv y) = pullback.snd y
⊢ a x = a y

tactic: simpa using ha'
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a (↑⟨(x, y), hxy⟩).1 = a (↑⟨(x, y), hxy⟩).2
h₁ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) = pullback.fst y
h₂ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.snd) ((PreservesPullback.iso G π π).inv y) = pullback.snd y
⊢ a x = a y
state_after: no goals

tactic: simp only [← PreservesPullback.iso_inv_fst]
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
⊢ ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) = pullback.fst y
state_after: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
⊢ ∀ (y : ↑(pullback (G.map π) (G.map π))),
    (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) =
      ((PreservesPullback.iso G π π).inv ≫ G.map pullback.fst) y

tactic: intro y
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
⊢ ∀ (y : ↑(pullback (G.map π) (G.map π))),
    (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) =
      ((PreservesPullback.iso G π π).inv ≫ G.map pullback.fst) y
state_after: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y✝ : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y✝
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y✝), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
y : ↑(pullback (G.map π) (G.map π))
⊢ (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) =
    ((PreservesPullback.iso G π π).inv ≫ G.map pullback.fst) y

tactic: rfl
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y✝ : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y✝
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y✝), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
y : ↑(pullback (G.map π) (G.map π))
⊢ (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) =
    ((PreservesPullback.iso G π π).inv ≫ G.map pullback.fst) y
state_after: no goals

tactic: simp only [← PreservesPullback.iso_inv_snd]
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
h₁ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) = pullback.fst y
⊢ ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.snd) ((PreservesPullback.iso G π π).inv y) = pullback.snd y
state_after: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
h₁ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) = pullback.fst y
⊢ ∀ (y : ↑(pullback (G.map π) (G.map π))),
    (G.map pullback.snd) ((PreservesPullback.iso G π π).inv y) =
      ((PreservesPullback.iso G π π).inv ≫ G.map pullback.snd) y

tactic: intro y
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
h₁ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) = pullback.fst y
⊢ ∀ (y : ↑(pullback (G.map π) (G.map π))),
    (G.map pullback.snd) ((PreservesPullback.iso G π π).inv y) =
      ((PreservesPullback.iso G π π).inv ≫ G.map pullback.snd) y
state_after: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y✝ : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y✝
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y✝), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
h₁ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) = pullback.fst y
y : ↑(pullback (G.map π) (G.map π))
⊢ (G.map pullback.snd) ((PreservesPullback.iso G π π).inv y) =
    ((PreservesPullback.iso G π π).inv ≫ G.map pullback.snd) y

tactic: rfl
state_before: C : Type u
inst✝³ : Category.{v, u} C
G : C ⥤ TopCat
X : Type w'
inst✝² : TopologicalSpace X
Z B : C
π : Z ⟶ B
inst✝¹ : HasPullback π π
inst✝ : PreservesLimit (cospan π π) G
a : C(↑(G.obj Z), X)
ha : ⇑a ∘ ⇑(G.map pullback.fst) = ⇑a ∘ ⇑(G.map pullback.snd)
x y✝ : ↑(G.obj Z)
hxy : (G.map π) x = (G.map π) y✝
xy : ↑(G.obj (pullback π π)) :=
  (PreservesPullback.iso G π π).inv ((TopCat.pullbackIsoProdSubtype (G.map π) (G.map π)).inv ⟨(x, y✝), hxy⟩)
ha' : a ((G.map pullback.fst) xy) = a ((G.map pullback.snd) xy)
h₁ :
  ∀ (y : ↑(pullback (G.map π) (G.map π))), (G.map pullback.fst) ((PreservesPullback.iso G π π).inv y) = pullback.fst y
y : ↑(pullback (G.map π) (G.map π))
⊢ (G.map pullback.snd) ((PreservesPullback.iso G π π).inv y) =
    ((PreservesPullback.iso G π π).inv ≫ G.map pullback.snd) y
state_after: no goals