Theorem: TopCat.pullback_fst_image_snd_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 ↑Y
⊢ ⇑pullback.fst '' (⇑pullback.snd ⁻¹' U) = ⇑f ⁻¹' (⇑g '' U)
state_after: case h
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑Y
x : ↑X
⊢ x ∈ ⇑pullback.fst '' (⇑pullback.snd ⁻¹' U) ↔ x ∈ ⇑f ⁻¹' (⇑g '' 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 ↑Y
x : ↑X
⊢ x ∈ ⇑pullback.fst '' (⇑pullback.snd ⁻¹' U) ↔ x ∈ ⇑f ⁻¹' (⇑g '' U)
state_after: case h.mp
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑Y
x : ↑X
⊢ x ∈ ⇑pullback.fst '' (⇑pullback.snd ⁻¹' U) → x ∈ ⇑f ⁻¹' (⇑g '' U)

case h.mpr
J : Type v
inst✝ : SmallCategory J
X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
U : Set ↑Y
x : ↑X
⊢ x ∈ ⇑f ⁻¹' (⇑g '' U) → x ∈ ⇑pullback.fst '' (⇑pullback.snd ⁻¹' 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 ↑Y
x : ↑X
⊢ x ∈ ⇑pullback.fst '' (⇑pullback.snd ⁻¹' U) → x ∈ ⇑f ⁻¹' (⇑g '' 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 ↑Y
y : (forget TopCat).obj (pullback f g)
hy : y ∈ ⇑pullback.snd ⁻¹' U
⊢ pullback.fst y ∈ ⇑f ⁻¹' (⇑g '' U)

tactic: exact
  ⟨(pullback.snd : pullback f g ⟶ _) y, hy,
    (ConcreteCategory.congr_hom pullback.condition y).symm⟩
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 ↑Y
y : (forget TopCat).obj (pullback f g)
hy : y ∈ ⇑pullback.snd ⁻¹' U
⊢ pullback.fst y ∈ ⇑f ⁻¹' (⇑g '' 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 ↑Y
x : ↑X
⊢ x ∈ ⇑f ⁻¹' (⇑g '' U) → x ∈ ⇑pullback.fst '' (⇑pullback.snd ⁻¹' 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 ↑Y
x : ↑X
y : ↑Y
hy : y ∈ U
eq : g y = f x
⊢ x ∈ ⇑pullback.fst '' (⇑pullback.snd ⁻¹' U)

tactic: refine ⟨(TopCat.pullbackIsoProdSubtype f g).inv ⟨⟨_, _⟩, eq.symm⟩, ?_, ?_⟩
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 ↑Y
x : ↑X
y : ↑Y
hy : y ∈ U
eq : g y = f x
⊢ x ∈ ⇑pullback.fst '' (⇑pullback.snd ⁻¹' 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 ↑Y
x : ↑X
y : ↑Y
hy : y ∈ U
eq : g y = f x
⊢ (pullbackIsoProdSubtype f g).inv ⟨(x, y), ⋯⟩ ∈ ⇑pullback.snd ⁻¹' 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 ↑Y
x : ↑X
y : ↑Y
hy : y ∈ U
eq : g y = f x
⊢ pullback.fst ((pullbackIsoProdSubtype f g).inv ⟨(x, y), ⋯⟩) = 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 ↑Y
x : ↑X
y : ↑Y
hy : y ∈ U
eq : g y = f x
⊢ (pullbackIsoProdSubtype f g).inv ⟨(x, y), ⋯⟩ ∈ ⇑pullback.snd ⁻¹' 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 ↑Y
x : ↑X
y : ↑Y
hy : y ∈ U
eq : g y = f x
⊢ pullback.snd ((pullbackIsoProdSubtype f g).inv ⟨(x, y), ⋯⟩) ∈ 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 ↑Y
x : ↑X
y : ↑Y
hy : y ∈ U
eq : g y = f x
⊢ pullback.snd ((pullbackIsoProdSubtype f g).inv ⟨(x, y), ⋯⟩) ∈ 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 ↑Y
x : ↑X
y : ↑Y
hy : y ∈ U
eq : g y = f x
⊢ pullback.snd ((pullbackIsoProdSubtype f g).inv ⟨(x, y), ⋯⟩) = y

tactic: erw [pullbackIsoProdSubtype_inv_snd_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 ↑Y
x : ↑X
y : ↑Y
hy : y ∈ U
eq : g y = f x
⊢ pullback.snd ((pullbackIsoProdSubtype f g).inv ⟨(x, y), ⋯⟩) = y
state_after: no goals

tactic: rw [pullbackIsoProdSubtype_inv_fst_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 ↑Y
x : ↑X
y : ↑Y
hy : y ∈ U
eq : g y = f x
⊢ pullback.fst ((pullbackIsoProdSubtype f g).inv ⟨(x, y), ⋯⟩) = x
state_after: no goals