Skip to content

Commit a6e2960

Browse files
feat: One-point compactification of Euclidean space homeomorphic to sphere (#18711)
The one-point compactification of n-dimensional Euclidean space is homeomorphic to the n-sphere. Co-authored-by: Bjørn Kjos-Hanssen <bjoernkh@hawaii.edu>
1 parent d7a2912 commit a6e2960

File tree

5 files changed

+80
-0
lines changed

5 files changed

+80
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6093,6 +6093,7 @@ import Mathlib.Topology.CompactOpen
60936093
import Mathlib.Topology.Compactification.OnePoint
60946094
import Mathlib.Topology.Compactification.OnePoint.Basic
60956095
import Mathlib.Topology.Compactification.OnePoint.ProjectiveLine
6096+
import Mathlib.Topology.Compactification.OnePoint.Sphere
60966097
import Mathlib.Topology.Compactification.OnePointEquiv
60976098
import Mathlib.Topology.Compactness.Bases
60986099
import Mathlib.Topology.Compactness.Compact

Mathlib/Geometry/Manifold/Instances/Sphere.lean

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,22 @@ theorem stereographic_neg_apply (v : sphere (0 : E) 1) :
288288
ext1
289289
simp
290290

291+
theorem surjective_stereographic (hv : ‖v‖ = 1) :
292+
Surjective (stereographic hv) :=
293+
(stereographic hv).surjective_of_target_eq_univ rfl
294+
295+
@[simp]
296+
theorem range_stereographic_symm (hv : ‖v‖ = 1) (hv' : v ∈ sphere 0 1 := by simpa) :
297+
Set.range (stereographic hv).symm = {⟨v, hv'⟩}ᶜ := by
298+
refine le_antisymm ?_ (stereographic hv).symm.target_subset_range
299+
rintro x ⟨y, rfl⟩
300+
suffices y ∈ (stereographic hv).target from (fun _ ↦ (stereographic hv).map_target) y this
301+
simp
302+
303+
lemma isOpenEmbedding_stereographic_symm (hv : ‖v‖ = 1) :
304+
Topology.IsOpenEmbedding (stereographic hv).symm :=
305+
(stereographic hv).symm.to_isOpenEmbedding (by simp)
306+
291307
end StereographicProjection
292308

293309
section ChartedSpace

Mathlib/Logic/Equiv/PartialEquiv.lean

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ theorem left_inv {x : α} (h : x ∈ e.source) : e.symm (e x) = x :=
196196
theorem right_inv {x : β} (h : x ∈ e.target) : e (e.symm x) = x :=
197197
e.right_inv' h
198198

199+
theorem target_subset_range : e.target ⊆ range e :=
200+
fun x hx ↦ ⟨e.symm x, right_inv e hx⟩
201+
199202
theorem eq_symm_apply {x : α} {y : β} (hx : x ∈ e.source) (hy : y ∈ e.target) :
200203
x = e.symm y ↔ e x = y :=
201204
fun h => by rw [← e.right_inv hy, h], fun h => by rw [← e.left_inv hx, h]⟩
@@ -876,6 +879,22 @@ theorem pi_trans (ei : ∀ i, PartialEquiv (αi i) (βi i)) (ei' : ∀ i, Partia
876879

877880
end Pi
878881

882+
lemma surjective_of_target_eq_univ (h : e.target = univ) :
883+
Surjective e :=
884+
surjective_iff_surjOn_univ.mpr <| e.surjOn.mono (by simp) (by simp [h])
885+
886+
lemma injective_of_source_eq_univ (h : e.source = univ) :
887+
Injective e := by
888+
simpa [injective_iff_injOn_univ, h] using e.injOn
889+
890+
lemma injective_symm_of_target_eq_univ (h : e.target = univ) :
891+
Injective e.symm :=
892+
e.symm.injective_of_source_eq_univ h
893+
894+
lemma surjective_symm_of_source_eq_univ (h : e.source = univ) :
895+
Surjective e.symm :=
896+
e.symm.surjective_of_target_eq_univ h
897+
879898
end PartialEquiv
880899

881900
namespace Set

Mathlib/Tactic/Linter/DirectoryDependency.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,7 @@ def overrideAllowedImportDirs : NamePrefixRel := .ofArray #[
583583
(`Mathlib.Algebra.Notation, `Mathlib.Algebra.Notation),
584584
(`Mathlib.Deprecated, `Mathlib.Deprecated),
585585
(`Mathlib.Topology.Algebra, `Mathlib.Algebra),
586+
(`Mathlib.Topology.Compactification, `Mathlib.Geometry.Manifold)
586587
]
587588

588589
end DirectoryDependency
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/-
2+
Copyright (c) 2025 Bjørn Kjos-Hanssen. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Bjørn Kjos-Hanssen, Oliver Nash
5+
-/
6+
import Mathlib.Topology.Compactification.OnePoint.Basic
7+
import Mathlib.Geometry.Manifold.Instances.Sphere
8+
9+
/-!
10+
11+
# One-point compactification of Euclidean space is homeomorphic to the sphere.
12+
13+
-/
14+
15+
open Function Metric Module Set Submodule
16+
17+
noncomputable section
18+
19+
/-- A homeomorphism from the one-point compactification of a hyperplane in Euclidean space to the
20+
sphere. -/
21+
def onePointHyperplaneHomeoUnitSphere
22+
{E : Type*} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E]
23+
{v : E} (hv : ‖v‖ = 1) :
24+
OnePoint (ℝ ∙ v)ᗮ ≃ₜ sphere (0 : E) 1 :=
25+
OnePoint.equivOfIsEmbeddingOfRangeEq _ _
26+
(isOpenEmbedding_stereographic_symm hv).toIsEmbedding (range_stereographic_symm hv)
27+
28+
/-- A homeomorphism from the one-point compactification of a finite-dimensional real vector space to
29+
the sphere. -/
30+
def onePointEquivSphereOfFinrankEq {ι V : Type*} [Fintype ι]
31+
[AddCommGroup V] [Module ℝ V] [FiniteDimensional ℝ V]
32+
[TopologicalSpace V] [IsTopologicalAddGroup V] [ContinuousSMul ℝ V] [T2Space V]
33+
(h : finrank ℝ V + 1 = Fintype.card ι) :
34+
OnePoint V ≃ₜ sphere (0 : EuclideanSpace ℝ ι) 1 := by
35+
classical
36+
have : Nonempty ι := Fintype.card_pos_iff.mp <| by omega
37+
let v : EuclideanSpace ℝ ι := .single (Classical.arbitrary ι) 1
38+
have hv : ‖v‖ = 1 := by simp [v]
39+
have hv₀ : v ≠ 0 := fun contra ↦ by simp [contra] at hv
40+
have : Fact (finrank ℝ (EuclideanSpace ℝ ι) = finrank ℝ V + 1) := ⟨by simp [h]⟩
41+
have hV : finrank ℝ V = finrank ℝ (ℝ ∙ v)ᗮ := (finrank_orthogonal_span_singleton hv₀).symm
42+
letI e : V ≃ₜ (ℝ ∙ v)ᗮ := (FiniteDimensional.nonempty_continuousLinearEquiv_of_finrank_eq hV).some
43+
exact e.onePointCongr.trans <| onePointHyperplaneHomeoUnitSphere hv

0 commit comments

Comments
 (0)