Theorem: TopCat.pullback_snd_image_fst_preimage
File: Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean

tactic: ext x
state_before: J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
⊢ ⇑pullback.snd '' (⇑pullback.fst ⁻¹' U) = ⇑g ⁻¹' (⇑f '' U)
state_after: case h
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
⊢ x ∈ ⇑pullback.snd '' (⇑pullback.fst ⁻¹' U) ↔ x ∈ ⇑g ⁻¹' (⇑f '' U)

tactic: constructor
state_before: case h
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
⊢ x ∈ ⇑pullback.snd '' (⇑pullback.fst ⁻¹' U) ↔ x ∈ ⇑g ⁻¹' (⇑f '' U)
state_after: case h.mp
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
⊢ x ∈ ⇑pullback.snd '' (⇑pullback.fst ⁻¹' U) → x ∈ ⇑g ⁻¹' (⇑f '' U)

case h.mpr
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
⊢ x ∈ ⇑g ⁻¹' (⇑f '' U) → x ∈ ⇑pullback.snd '' (⇑pullback.fst ⁻¹' U)

tactic: rintro ⟨(y : (forget TopCat).obj _), hy, rfl⟩
state_before: case h.mp
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
⊢ x ∈ ⇑pullback.snd '' (⇑pullback.fst ⁻¹' U) → x ∈ ⇑g ⁻¹' (⇑f '' U)
state_after: case h.mp.intro.intro
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
y : (forget TopCat).obj (pullback f g)
hy : y ∈ ⇑pullback.fst ⁻¹' U
⊢ pullback.snd y ∈ ⇑g ⁻¹' (⇑f '' U)

tactic: exact
  ⟨(pullback.fst : pullback f g ⟶ _) y, hy, ConcreteCategory.congr_hom pullback.condition y⟩
state_before: case h.mp.intro.intro
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
y : (forget TopCat).obj (pullback f g)
hy : y ∈ ⇑pullback.fst ⁻¹' U
⊢ pullback.snd y ∈ ⇑g ⁻¹' (⇑f '' U)
state_after: no goals

tactic: rintro ⟨y, hy, eq⟩
state_before: case h.mpr
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
⊢ x ∈ ⇑g ⁻¹' (⇑f '' U) → x ∈ ⇑pullback.snd '' (⇑pullback.fst ⁻¹' U)
state_after: case h.mpr.intro.intro
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
y : ↑X
hy : y ∈ U
eq : f y = g x
⊢ x ∈ ⇑pullback.snd '' (⇑pullback.fst ⁻¹' U)

tactic: refine ⟨(TopCat.pullbackIsoProdSubtype f g).inv ⟨⟨_, _⟩, eq⟩, ?_, ?_⟩
state_before: case h.mpr.intro.intro
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
y : ↑X
hy : y ∈ U
eq : f y = g x
⊢ x ∈ ⇑pullback.snd '' (⇑pullback.fst ⁻¹' U)
state_after: case h.mpr.intro.intro.refine_1
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
y : ↑X
hy : y ∈ U
eq : f y = g x
⊢ (pullbackIsoProdSubtype f g).inv ⟨(y, x), eq⟩ ∈ ⇑pullback.fst ⁻¹' U

case h.mpr.intro.intro.refine_2
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
y : ↑X
hy : y ∈ U
eq : f y = g x
⊢ pullback.snd ((pullbackIsoProdSubtype f g).inv ⟨(y, x), eq⟩) = x

tactic: simp only [coe_of, Set.mem_preimage]
state_before: case h.mpr.intro.intro.refine_1
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
y : ↑X
hy : y ∈ U
eq : f y = g x
⊢ (pullbackIsoProdSubtype f g).inv ⟨(y, x), eq⟩ ∈ ⇑pullback.fst ⁻¹' U
state_after: case h.mpr.intro.intro.refine_1
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
y : ↑X
hy : y ∈ U
eq : f y = g x
⊢ pullback.fst ((pullbackIsoProdSubtype f g).inv ⟨(y, x), eq⟩) ∈ U

tactic: convert hy
state_before: case h.mpr.intro.intro.refine_1
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
y : ↑X
hy : y ∈ U
eq : f y = g x
⊢ pullback.fst ((pullbackIsoProdSubtype f g).inv ⟨(y, x), eq⟩) ∈ U
state_after: case h.e'_4
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
y : ↑X
hy : y ∈ U
eq : f y = g x
⊢ pullback.fst ((pullbackIsoProdSubtype f g).inv ⟨(y, x), eq⟩) = y

tactic: erw [pullbackIsoProdSubtype_inv_fst_apply]
state_before: case h.e'_4
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
y : ↑X
hy : y ∈ U
eq : f y = g x
⊢ pullback.fst ((pullbackIsoProdSubtype f g).inv ⟨(y, x), eq⟩) = y
state_after: no goals

tactic: rw [pullbackIsoProdSubtype_inv_snd_apply]
state_before: case h.mpr.intro.intro.refine_2
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑X
x : ↑Y
y : ↑X
hy : y ∈ U
eq : f y = g x
⊢ pullback.snd ((pullbackIsoProdSubtype f g).inv ⟨(y, x), eq⟩) = x
state_after: no goals