Skip to content

Commit d31423a

Browse files
committed
feat: +1 proof that Sorgenfrey plane is not normal (#5775)
1 parent 965d6f6 commit d31423a

File tree

4 files changed

+104
-15
lines changed

4 files changed

+104
-15
lines changed

β€ŽCounterexamples/SorgenfreyLine.leanβ€Ž

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import Mathlib.Topology.Paracompact
1414
import Mathlib.Topology.MetricSpace.Metrizable
1515
import Mathlib.Topology.MetricSpace.EMetricParacompact
1616
import Mathlib.Data.Set.Intervals.Monotone
17+
import Mathlib.Topology.Separation.NotNormal
1718

1819
/-!
1920
# Sorgenfrey line
@@ -38,7 +39,7 @@ Prove that the Sorgenfrey line is a paracompact space.
3839

3940
open Set Filter TopologicalSpace
4041

41-
open scoped Topology Filter
42+
open scoped Topology Filter Cardinal
4243

4344
namespace Counterexample
4445

@@ -78,7 +79,7 @@ theorem isOpen_Ici (a : ℝₗ) : IsOpen (Ici a) :=
7879
iUnion_Ico_right a β–Έ isOpen_iUnion (isOpen_Ico a)
7980
#align counterexample.sorgenfrey_line.is_open_Ici Counterexample.SorgenfreyLine.isOpen_Ici
8081

81-
theorem nhds_basis_Ico (a : ℝₗ) : (𝓝 a).HasBasis (fun b => a < b) fun b => Ico a b := by
82+
theorem nhds_basis_Ico (a : ℝₗ) : (𝓝 a).HasBasis (a < Β·) (Ico a Β·) := by
8283
rw [TopologicalSpace.nhds_generateFrom]
8384
haveI : Nonempty { x // x ≀ a } := Set.nonempty_Iic_subtype
8485
have : (β¨… x : { i // i ≀ a }, π“Ÿ (Ici ↑x)) = π“Ÿ (Ici a) := by
@@ -235,9 +236,15 @@ theorem isClopen_Ici_prod (x : ℝₗ Γ— ℝₗ) : IsClopen (Ici x) :=
235236
(Ici_prod_eq x).symm β–Έ (isClopen_Ici _).prod (isClopen_Ici _)
236237
#align counterexample.sorgenfrey_line.is_clopen_Ici_prod Counterexample.SorgenfreyLine.isClopen_Ici_prod
237238

239+
theorem cardinal_antidiagonal (c : ℝₗ) : #{x : ℝₗ Γ— ℝₗ | x.1 + x.2 = c} = 𝔠 := by
240+
rw [← Cardinal.mk_real]
241+
exact Equiv.cardinal_eq ⟨fun x ↦ toReal x.1.1,
242+
fun x ↦ ⟨(toReal.symm x, c - toReal.symm x), by simp⟩,
243+
fun ⟨x, hx⟩ ↦ by ext <;> simp [← hx.out], fun x ↦ rfl⟩
244+
238245
/-- Any subset of an antidiagonal `{(x, y) : ℝₗ Γ— ℝₗ| x + y = c}` is a closed set. -/
239-
theorem isClosed_of_subset_antidiagonal {s : Set (ℝₗ Γ— ℝₗ)} {c : ℝₗ}
240-
(hs : βˆ€ x : ℝₗ Γ— ℝₗ, x ∈ s β†’ x.1 + x.2 = c) : IsClosed s := by
246+
theorem isClosed_of_subset_antidiagonal {s : Set (ℝₗ Γ— ℝₗ)} {c : ℝₗ} (hs : βˆ€ x ∈ s, x.1 + x.2 = c) :
247+
IsClosed s := by
241248
rw [← closure_subset_iff_isClosed]
242249
rintro ⟨x, y⟩ H
243250
obtain rfl : x + y = c := by
@@ -252,30 +259,47 @@ theorem isClosed_of_subset_antidiagonal {s : Set (ℝₗ Γ— ℝₗ)} {c : ℝₗ
252259
rwa [← add_le_add_iff_left, hs _ H, add_le_add_iff_right]
253260
#align counterexample.sorgenfrey_line.is_closed_of_subset_antidiagonal Counterexample.SorgenfreyLine.isClosed_of_subset_antidiagonal
254261

262+
open Subtype in
263+
instance (c : ℝₗ) : DiscreteTopology {x : ℝₗ Γ— ℝₗ | x.1 + x.2 = c} :=
264+
forall_open_iff_discrete.1 fun U ↦ isClosed_compl_iff.1 <| isClosed_induced_iff.2
265+
⟨val '' Uᢜ, isClosed_of_subset_antidiagonal <| coe_image_subset _ Uᢜ,
266+
preimage_image_eq _ val_injective⟩
267+
268+
/-- The Sorgenfrey plane `ℝₗ Γ— ℝₗ` is not a normal space. -/
269+
theorem not_normalSpace_prod : Β¬NormalSpace (ℝₗ Γ— ℝₗ) :=
270+
(isClosed_antidiagonal 0).not_normal_of_continuum_le_mk (cardinal_antidiagonal _).ge
271+
#align counterexample.sorgenfrey_line.not_normal_space_prod Counterexample.SorgenfreyLine.not_normalSpace_prod
272+
273+
/-- An antidiagonal is a separable set but is not a separable space. -/
274+
theorem isSeparable_antidiagonal (c : ℝₗ) : IsSeparable {x : ℝₗ Γ— ℝₗ | x.1 + x.2 = c} :=
275+
isSeparable_of_separableSpace _
276+
277+
/-- An antidiagonal is a separable set but is not a separable space. -/
278+
theorem not_separableSpace_antidiagonal (c : ℝₗ) :
279+
Β¬SeparableSpace {x : ℝₗ Γ— ℝₗ | x.1 + x.2 = c} := by
280+
rw [separableSpace_iff_countable, ← Cardinal.mk_le_aleph0_iff, cardinal_antidiagonal, not_le]
281+
exact Cardinal.aleph0_lt_continuum
282+
255283
theorem nhds_prod_antitone_basis_inv_pnat (x y : ℝₗ) :
256284
(𝓝 (x, y)).HasAntitoneBasis fun n : β„•+ => Ico x (x + (n : ℝₗ)⁻¹) Γ—Λ’ Ico y (y + (n : ℝₗ)⁻¹) := by
257285
rw [nhds_prod_eq]
258286
exact (nhds_antitone_basis_Ico_inv_pnat x).prod (nhds_antitone_basis_Ico_inv_pnat y)
259287
#align counterexample.sorgenfrey_line.nhds_prod_antitone_basis_inv_pnat Counterexample.SorgenfreyLine.nhds_prod_antitone_basis_inv_pnat
260288

261-
/-- The product of the Sorgenfrey line and itself is not a normal topological space. -/
262-
theorem not_normalSpace_prod : Β¬NormalSpace (ℝₗ Γ— ℝₗ) := by
289+
/-- The sets of rational and irrational points of the antidiagonal `{(x, y) | x + y = 0}` cannot be
290+
separated by open neighborhoods. This implies that `ℝₗ Γ— ℝₗ` is not a normal space. -/
291+
theorem not_separatedNhds_rat_irrational_antidiag :
292+
Β¬SeparatedNhds {x : ℝₗ Γ— ℝₗ | x.1 + x.2 = 0 ∧ βˆƒ r : β„š, ↑r = x.1}
293+
{x : ℝₗ Γ— ℝₗ | x.1 + x.2 = 0 ∧ Irrational (toReal x.1)} := by
263294
have hβ‚€ : βˆ€ {n : β„•+}, 0 < (n : ℝ)⁻¹ := inv_pos.2 (Nat.cast_pos.2 (PNat.pos _))
264295
have hβ‚€' : βˆ€ {n : β„•+} {x : ℝ}, x < x + (n : ℝ)⁻¹ := lt_add_of_pos_right _ hβ‚€
265-
intro
266296
/- Let `S` be the set of points `(x, y)` on the line `x + y = 0` such that `x` is rational.
267297
Let `T` be the set of points `(x, y)` on the line `x + y = 0` such that `x` is irrational.
268298
These sets are closed, see `SorgenfreyLine.isClosed_of_subset_antidiagonal`, and disjoint. -/
269299
set S := {x : ℝₗ Γ— ℝₗ | x.1 + x.2 = 0 ∧ βˆƒ r : β„š, ↑r = x.1}
270300
set T := {x : ℝₗ Γ— ℝₗ | x.1 + x.2 = 0 ∧ Irrational (toReal x.1)}
271-
have hSc : IsClosed S := isClosed_of_subset_antidiagonal fun x hx => hx.1
272-
have hTc : IsClosed T := isClosed_of_subset_antidiagonal fun x hx => hx.1
273-
have hd : Disjoint S T := by
274-
rw [disjoint_iff_inf_le]
275-
rintro ⟨x, y⟩ ⟨⟨-, r, rfl : _ = x⟩, -, hr⟩
276-
exact r.not_irrational hr
277301
-- Consider disjoint open sets `U βŠ‡ S` and `V βŠ‡ T`.
278-
rcases normal_separation hSc hTc hd with ⟨U, V, Uo, Vo, SU, TV, UV⟩
302+
rintro ⟨U, V, Uo, Vo, SU, TV, UV⟩
279303
/- For each point `(x, -x) ∈ T`, choose a neighborhood
280304
`Ico x (x + k⁻¹) Γ—Λ’ Ico (-x) (-x + k⁻¹) βŠ† V`. -/
281305
have : βˆ€ x : ℝₗ, Irrational (toReal x) β†’
@@ -316,7 +340,6 @@ theorem not_normalSpace_prod : Β¬NormalSpace (ℝₗ Γ— ℝₗ) := by
316340
· refine' (nhds_antitone_basis_Ico_inv_pnat (-x)).2 hnN ⟨neg_le_neg hxn.1.le, _⟩
317341
simp only [add_neg_lt_iff_le_add', lt_neg_add_iff_add_lt]
318342
exact hxn.2
319-
#align counterexample.sorgenfrey_line.not_normal_space_prod Counterexample.SorgenfreyLine.not_normalSpace_prod
320343

321344
/-- Topology on the Sorgenfrey line is not metrizable. -/
322345
theorem not_metrizableSpace : Β¬MetrizableSpace ℝₗ := by

β€ŽMathlib.leanβ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3277,6 +3277,7 @@ import Mathlib.Topology.Perfect
32773277
import Mathlib.Topology.QuasiSeparated
32783278
import Mathlib.Topology.Semicontinuous
32793279
import Mathlib.Topology.Separation
3280+
import Mathlib.Topology.Separation.NotNormal
32803281
import Mathlib.Topology.Sequences
32813282
import Mathlib.Topology.Sets.Closeds
32823283
import Mathlib.Topology.Sets.Compacts

β€ŽMathlib/Topology/ContinuousFunction/Basic.leanβ€Ž

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ theorem toFun_eq_coe {f : C(Ξ±, Ξ²)} : f.toFun = (f : Ξ± β†’ Ξ²) :=
9999
rfl
100100
#align continuous_map.to_fun_eq_coe ContinuousMap.toFun_eq_coe
101101

102+
instance : CanLift (Ξ± β†’ Ξ²) C(Ξ±, Ξ²) FunLike.coe Continuous := ⟨fun f hf ↦ ⟨⟨f, hf⟩, rfl⟩⟩
103+
102104
/-- See note [custom simps projection]. -/
103105
def Simps.apply (f : C(Ξ±, Ξ²)) : Ξ± β†’ Ξ² := f
104106

@@ -383,6 +385,11 @@ theorem restrict_apply_mk (f : C(α, β)) (s : Set α) (x : α) (hx : x ∈ s) :
383385
rfl
384386
#align continuous_map.restrict_apply_mk ContinuousMap.restrict_apply_mk
385387

388+
theorem injective_restrict [T2Space Ξ²] {s : Set Ξ±} (hs : Dense s) :
389+
Injective (restrict s : C(Ξ±, Ξ²) β†’ C(s, Ξ²)) := fun f g h ↦
390+
FunLike.ext' <| f.continuous.ext_on hs g.continuous <| Set.restrict_eq_restrict_iff.1 <|
391+
congr_arg FunLike.coe h
392+
386393
/-- The restriction of a continuous map to the preimage of a set. -/
387394
@[simps]
388395
def restrictPreimage (f : C(α, β)) (s : Set β) : C(f ⁻¹' s, s) :=
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/-
2+
Copyright (c) 2023 Yury Kudryashov. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Yury Kudryashov
5+
-/
6+
import Mathlib.Data.Real.Cardinality
7+
import Mathlib.Topology.Separation
8+
import Mathlib.Topology.TietzeExtension
9+
/-!
10+
# Not normal topological spaces
11+
12+
In this file we prove (see `IsClosed.not_normal_of_continuum_le_mk`) that a separable space with a
13+
discrete subspace of cardinality continuum is not a normal topological space.
14+
-/
15+
16+
open Set Function Cardinal Topology TopologicalSpace
17+
18+
universe u
19+
variable {X : Type u} [TopologicalSpace X] [SeparableSpace X]
20+
21+
/-- Let `s` be a closed set in a separable normal space. If the induced topology on `s` is discrete,
22+
then `s` has cardinality less than continuum.
23+
24+
The proof follows
25+
https://en.wikipedia.org/wiki/Moore_plane#Proof_that_the_Moore_plane_is_not_normal -/
26+
theorem IsClosed.mk_lt_continuum [NormalSpace X] {s : Set X} (hs : IsClosed s)
27+
[DiscreteTopology s] : #s < 𝔠 := by
28+
-- Proof by contradiction: assume `𝔠 ≀ #s`
29+
by_contra' h
30+
-- Choose a countable dense set `t : Set X`
31+
rcases exists_countable_dense X with ⟨t, htc, htd⟩
32+
haveI := htc.to_subtype
33+
-- To obtain a contradiction, we will prove `2 ^ 𝔠 ≀ 𝔠`.
34+
refine (Cardinal.cantor 𝔠).not_le ?_
35+
calc
36+
-- Any function `s β†’ ℝ` is continuous, hence `2 ^ 𝔠 ≀ #C(s, ℝ)`
37+
2 ^ 𝔠 ≀ #C(s, ℝ) := by
38+
rw [(ContinuousMap.equivFnOfDiscrete _ _).cardinal_eq, mk_arrow, mk_real, lift_continuum,
39+
lift_uzero]
40+
exact (power_le_power_left two_ne_zero h).trans (power_le_power_right (nat_lt_continuum 2).le)
41+
-- By the Tietze Extension Theorem, any function `f : C(s, ℝ)` can be extended to `C(X, ℝ)`,
42+
-- hence `#C(s, ℝ) ≀ #C(X, ℝ)`
43+
_ ≀ #C(X, ℝ) := by
44+
choose f hf using (ContinuousMap.exists_restrict_eq_of_closed Β· hs)
45+
have hfi : Injective f := LeftInverse.injective hf
46+
exact mk_le_of_injective hfi
47+
-- Since `t` is dense, restriction `C(X, ℝ) β†’ C(t, ℝ)` is injective, hence `#C(X, ℝ) ≀ #C(t, ℝ)`
48+
_ ≀ #C(t, ℝ) := mk_le_of_injective <| ContinuousMap.injective_restrict htd
49+
_ ≀ #(t β†’ ℝ) := mk_le_of_injective FunLike.coe_injective
50+
-- Since `t` is countable, we have `#(t β†’ ℝ) ≀ 𝔠`
51+
_ ≀ 𝔠 := by
52+
rw [mk_arrow, mk_real, lift_uzero, lift_continuum, continuum, ← power_mul]
53+
exact power_le_power_left two_ne_zero mk_le_aleph0
54+
55+
/-- Let `s` be a closed set in a separable space. If the induced topology on `s` is discrete and `s`
56+
has cardinality at least continuum, then the ambient space is not a normal space. -/
57+
theorem IsClosed.not_normal_of_continuum_le_mk {s : Set X} (hs : IsClosed s) [DiscreteTopology s]
58+
(hmk : 𝔠 ≀ #s) : Β¬NormalSpace X := fun _ ↦ hs.mk_lt_continuum.not_le hmk

0 commit comments

Comments
Β (0)