Theorem: SeparationQuotient.quotientMap_prodMap_mk
File: Mathlib/Topology/Inseparable.lean

tactic: have hsurj : Surjective (Prod.map mk mk : X × Y → _) := surjective_mk.prodMap surjective_mk
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
α : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x y z : X
s : Set X
f g : X → Y
t : Set (SeparationQuotient X)
⊢ QuotientMap (Prod.map mk mk)
state_after: X : Type u_1
Y : Type u_2
Z : Type u_3
α : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x y z : X
s : Set X
f g : X → Y
t : Set (SeparationQuotient X)
hsurj : Surjective (Prod.map mk mk)
⊢ QuotientMap (Prod.map mk mk)

tactic: refine quotientMap_iff.2 ⟨hsurj, fun s ↦ ?_⟩
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
α : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x y z : X
s : Set X
f g : X → Y
t : Set (SeparationQuotient X)
hsurj : Surjective (Prod.map mk mk)
⊢ QuotientMap (Prod.map mk mk)
state_after: X : Type u_1
Y : Type u_2
Z : Type u_3
α : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x y z : X
s✝ : Set X
f g : X → Y
t : Set (SeparationQuotient X)
hsurj : Surjective (Prod.map mk mk)
s : Set (SeparationQuotient X × SeparationQuotient Y)
⊢ IsOpen s ↔ IsOpen (Prod.map mk mk ⁻¹' s)

tactic: refine ⟨fun hs ↦ hs.preimage (continuous_mk.prod_map continuous_mk), fun hs ↦ ?_⟩
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
α : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x y z : X
s✝ : Set X
f g : X → Y
t : Set (SeparationQuotient X)
hsurj : Surjective (Prod.map mk mk)
s : Set (SeparationQuotient X × SeparationQuotient Y)
⊢ IsOpen s ↔ IsOpen (Prod.map mk mk ⁻¹' s)
state_after: X : Type u_1
Y : Type u_2
Z : Type u_3
α : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x y z : X
s✝ : Set X
f g : X → Y
t : Set (SeparationQuotient X)
hsurj : Surjective (Prod.map mk mk)
s : Set (SeparationQuotient X × SeparationQuotient Y)
hs : IsOpen (Prod.map mk mk ⁻¹' s)
⊢ IsOpen s

tactic: refine isOpen_iff_mem_nhds.2 <| hsurj.forall.2 fun (x, y) h ↦ ?_
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
α : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x y z : X
s✝ : Set X
f g : X → Y
t : Set (SeparationQuotient X)
hsurj : Surjective (Prod.map mk mk)
s : Set (SeparationQuotient X × SeparationQuotient Y)
hs : IsOpen (Prod.map mk mk ⁻¹' s)
⊢ IsOpen s
state_after: X : Type u_1
Y : Type u_2
Z : Type u_3
α : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x✝¹ y✝ z : X
s✝ : Set X
f g : X → Y
t : Set (SeparationQuotient X)
hsurj : Surjective (Prod.map mk mk)
s : Set (SeparationQuotient X × SeparationQuotient Y)
hs : IsOpen (Prod.map mk mk ⁻¹' s)
x✝ : X × Y
x : X
y : Y
h : Prod.map mk mk (x, y) ∈ s
⊢ s ∈ 𝓝 (Prod.map mk mk (x, y))

tactic: rw [Prod.map_mk, nhds_prod_eq, ← map_mk_nhds, ← map_mk_nhds, Filter.prod_map_map_eq',
  ← nhds_prod_eq, Filter.mem_map]
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
α : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x✝¹ y✝ z : X
s✝ : Set X
f g : X → Y
t : Set (SeparationQuotient X)
hsurj : Surjective (Prod.map mk mk)
s : Set (SeparationQuotient X × SeparationQuotient Y)
hs : IsOpen (Prod.map mk mk ⁻¹' s)
x✝ : X × Y
x : X
y : Y
h : Prod.map mk mk (x, y) ∈ s
⊢ s ∈ 𝓝 (Prod.map mk mk (x, y))
state_after: X : Type u_1
Y : Type u_2
Z : Type u_3
α : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x✝¹ y✝ z : X
s✝ : Set X
f g : X → Y
t : Set (SeparationQuotient X)
hsurj : Surjective (Prod.map mk mk)
s : Set (SeparationQuotient X × SeparationQuotient Y)
hs : IsOpen (Prod.map mk mk ⁻¹' s)
x✝ : X × Y
x : X
y : Y
h : Prod.map mk mk (x, y) ∈ s
⊢ Prod.map mk mk ⁻¹' s ∈ 𝓝 (x, y)

tactic: exact hs.mem_nhds h
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
α : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x✝¹ y✝ z : X
s✝ : Set X
f g : X → Y
t : Set (SeparationQuotient X)
hsurj : Surjective (Prod.map mk mk)
s : Set (SeparationQuotient X × SeparationQuotient Y)
hs : IsOpen (Prod.map mk mk ⁻¹' s)
x✝ : X × Y
x : X
y : Y
h : Prod.map mk mk (x, y) ∈ s
⊢ Prod.map mk mk ⁻¹' s ∈ 𝓝 (x, y)
state_after: no goals