|
| 1 | +import Mathlib.Analysis.InnerProductSpace.PiL2 |
| 2 | +import Mathlib.Geometry.Manifold.ChartedSpace |
| 3 | +import Mathlib.Geometry.Manifold.Instances.Real |
| 4 | +import Mathlib.Topology.Bases |
| 5 | +import Mathlib.Topology.Compactness.Paracompact |
| 6 | +import Mathlib.Topology.Compactness.SigmaCompact |
| 7 | +import Mathlib.Topology.Separation.Basic |
| 8 | +import Mathlib.Topology.Sets.OpenCover |
| 9 | +import OpenGALib.Manifold.Charts.CoordinateBall |
| 10 | + |
| 11 | +/-! |
| 12 | +# Precompact coordinate balls and locally finite refinements |
| 13 | +
|
| 14 | +Covering infrastructure beneath partitions of unity and exhaustions. A |
| 15 | +*precompact coordinate ball* is the source of a coordinate-ball chart with |
| 16 | +compact closure; on a topological `n`-manifold (Hausdorff, second-countable, |
| 17 | +charted over `EuclideanSpace ℝ (Fin n)`) these form a countable basis, and |
| 18 | +together with paracompactness every open cover admits a countable, locally |
| 19 | +finite refinement by precompact coordinate balls subordinate to it. |
| 20 | +
|
| 21 | +The development is layered: the basis results need only the ambient topology |
| 22 | +and a chart; the refinement adds paracompactness, factored through an abstract |
| 23 | +basis-refinement lemma (`exists_countable_locallyFinite_refinement_of_isTopologicalBasis`) |
| 24 | +reusable for any topological basis. |
| 25 | +
|
| 26 | +## Main definitions |
| 27 | +
|
| 28 | +* `Manifold.IsPrecompactCoordinateBall` — source of a coordinate-ball chart with compact closure. |
| 29 | +
|
| 30 | +## Main results |
| 31 | +
|
| 32 | +* `Manifold.IsPrecompactCoordinateBall.isOpen` — a precompact coordinate ball is open. |
| 33 | +* `Manifold.isTopologicalBasis_isPrecompactCoordinateBall` — precompact coordinate balls form a basis. |
| 34 | +* `Manifold.exists_countable_precompact_coordinate_ball_basis` — that basis can be taken countable. |
| 35 | +* `Manifold.paracompactSpace_of_manifold` — a topological manifold is paracompact. |
| 36 | +* `Manifold.exists_countable_locally_finite_precompact_coordinate_ball_refinement` — |
| 37 | + every open cover has a countable locally finite refinement by precompact coordinate balls. |
| 38 | +
|
| 39 | +Provenance: SmoothManifoldsLee a5f308c — Lemma_1_10, Theorem_1_15. |
| 40 | +-/ |
| 41 | + |
| 42 | +open Set TopologicalSpace |
| 43 | +open scoped Topology |
| 44 | + |
| 45 | +universe u v |
| 46 | + |
| 47 | +namespace Manifold |
| 48 | + |
| 49 | +section Basis |
| 50 | + |
| 51 | +variable {n : ℕ} {M : Type u} [TopologicalSpace M] |
| 52 | + |
| 53 | +/-- **Math.** A set `s ⊆ M` is a *precompact coordinate ball*: it is the source of |
| 54 | +some coordinate-ball chart and its closure is compact. -/ |
| 55 | +def IsPrecompactCoordinateBall (n : ℕ) (s : Set M) : Prop := |
| 56 | + (∃ e : OpenPartialHomeomorph M (EuclideanSpace ℝ (Fin n)), |
| 57 | + e.source = s ∧ e.IsCoordinateBall) ∧ |
| 58 | + IsCompact (closure s) |
| 59 | + |
| 60 | +/-- **Math.** A precompact coordinate ball is open. -/ |
| 61 | +theorem IsPrecompactCoordinateBall.isOpen {s : Set M} |
| 62 | + (hs : IsPrecompactCoordinateBall n s) : IsOpen s := by |
| 63 | + rcases hs.1 with ⟨e, rfl, -⟩ |
| 64 | + simpa using e.open_source |
| 65 | + |
| 66 | +/-- **Math.** A precompact coordinate ball has compact closure. -/ |
| 67 | +theorem IsPrecompactCoordinateBall.isCompact_closure {s : Set M} |
| 68 | + (hs : IsPrecompactCoordinateBall n s) : IsCompact (closure s) := |
| 69 | + hs.2 |
| 70 | + |
| 71 | +variable [T2Space M] [SecondCountableTopology M] |
| 72 | + [ChartedSpace (EuclideanSpace ℝ (Fin n)) M] |
| 73 | + |
| 74 | +omit [SecondCountableTopology M] [ChartedSpace (EuclideanSpace ℝ (Fin n)) M] in |
| 75 | +/-- **Math.** Restricting a chart to a Euclidean open ball whose closed ball is |
| 76 | +compactly contained in the chart target produces a precompact coordinate ball in |
| 77 | +`M`. -/ |
| 78 | +theorem isPrecompactCoordinateBall_chart_preimage_metric_ball |
| 79 | + (e : OpenPartialHomeomorph M (EuclideanSpace ℝ (Fin n))) {c : EuclideanSpace ℝ (Fin n)} |
| 80 | + {r : ℝ} (hr : 0 < r) (hclosed : Metric.closedBall c r ⊆ e.target) : |
| 81 | + IsPrecompactCoordinateBall n (e.symm '' Metric.ball c r) := by |
| 82 | + let e' := e.trans (OpenPartialHomeomorph.ofSet (Metric.ball c r) Metric.isOpen_ball) |
| 83 | + have hball_target : Metric.ball c r ⊆ e.target := by |
| 84 | + exact (Metric.ball_subset_closedBall : Metric.ball c r ⊆ Metric.closedBall c r).trans hclosed |
| 85 | + have hsource : e'.source = e.symm '' Metric.ball c r := by |
| 86 | + -- The restricted chart is defined exactly on the inverse image of the chosen ball. |
| 87 | + dsimp [e'] |
| 88 | + exact (e.symm_image_eq_source_inter_preimage hball_target).symm |
| 89 | + have htarget : e'.target = Metric.ball c r := by |
| 90 | + -- On the target side, the restriction keeps precisely the chosen Euclidean ball. |
| 91 | + dsimp [e'] |
| 92 | + exact inter_eq_left.2 hball_target |
| 93 | + have hcompactCarrier : IsCompact (e.symm '' Metric.closedBall c r) := by |
| 94 | + -- The closed ball is compact in Euclidean space, and the inverse chart is continuous on it. |
| 95 | + exact (isCompact_closedBall (x := c) (r := r)).image_of_continuousOn |
| 96 | + (e.continuousOn_symm.mono hclosed) |
| 97 | + have hclosureCompact : IsCompact (closure (e.symm '' Metric.ball c r)) := by |
| 98 | + -- The closure stays inside the compact pullback of the closed Euclidean ball. |
| 99 | + exact hcompactCarrier.closure_of_subset |
| 100 | + (Set.image_mono (Metric.ball_subset_closedBall : Metric.ball c r ⊆ Metric.closedBall c r)) |
| 101 | + refine ⟨?_, hclosureCompact⟩ |
| 102 | + refine ⟨e', hsource, ?_⟩ |
| 103 | + exact OpenPartialHomeomorph.isCoordinateBall_of_target_eq_ball e' c r hr htarget |
| 104 | + |
| 105 | +omit [SecondCountableTopology M] in |
| 106 | +/-- **Math.** Every point of an open set lies in a precompact coordinate ball |
| 107 | +contained in that open set. -/ |
| 108 | +theorem exists_isPrecompactCoordinateBall_subset_of_mem_open {x : M} |
| 109 | + {u : Set M} (hx : x ∈ u) (hu : IsOpen u) : |
| 110 | + ∃ s : Set M, IsPrecompactCoordinateBall n s ∧ x ∈ s ∧ s ⊆ u := by |
| 111 | + let e := chartAt (EuclideanSpace ℝ (Fin n)) x |
| 112 | + let y : EuclideanSpace ℝ (Fin n) := e x |
| 113 | + let w : Set (EuclideanSpace ℝ (Fin n)) := e '' (e.source ∩ u) |
| 114 | + have hxsource : x ∈ e.source := mem_chart_source _ x |
| 115 | + have hyw : y ∈ w := by |
| 116 | + refine ⟨x, ⟨hxsource, hx⟩, rfl⟩ |
| 117 | + have hw_open : IsOpen w := by |
| 118 | + -- The image of the open neighborhood inside the chart source is open in Euclidean space. |
| 119 | + simpa [w] using e.isOpen_image_source_inter hu |
| 120 | + obtain ⟨r, hr, hclosed⟩ : |
| 121 | + ∃ r : ℝ, 0 < r ∧ Metric.closedBall y r ⊆ w := by |
| 122 | + -- Choose a small closed Euclidean ball around the charted point inside that open image. |
| 123 | + exact Metric.nhds_basis_closedBall.mem_iff.1 (hw_open.mem_nhds hyw) |
| 124 | + have hw_target : w ⊆ e.target := by |
| 125 | + -- The chart image of any subset of the source stays in the chart target. |
| 126 | + simpa [w] using (Set.image_mono (show e.source ∩ u ⊆ e.source from inter_subset_left)).trans |
| 127 | + e.image_source_eq_target.subset |
| 128 | + let s : Set M := e.symm '' Metric.ball y r |
| 129 | + have hs_precompact : IsPrecompactCoordinateBall n s := by |
| 130 | + -- Pull back the chosen Euclidean ball through the chart. |
| 131 | + simpa [s, y] using isPrecompactCoordinateBall_chart_preimage_metric_ball |
| 132 | + (n := n) e hr (hclosed.trans hw_target) |
| 133 | + have hxs : x ∈ s := by |
| 134 | + -- The charted point lies in every positive-radius ball centered at itself. |
| 135 | + refine ⟨y, Metric.mem_ball_self hr, ?_⟩ |
| 136 | + simpa [y] using e.left_inv hxsource |
| 137 | + have hs_subset_source_u : s ⊆ e.source ∩ u := by |
| 138 | + -- The pulled-back ball lies inside the original open neighborhood because its image does. |
| 139 | + have hball_w : Metric.ball y r ⊆ w := by |
| 140 | + exact (Metric.ball_subset_closedBall : Metric.ball y r ⊆ Metric.closedBall y r).trans hclosed |
| 141 | + change e.symm '' Metric.ball y r ⊆ e.source ∩ u |
| 142 | + refine (Set.image_mono hball_w).trans ?_ |
| 143 | + have himage : e.symm '' w = e.source ∩ u := by |
| 144 | + simpa [w] using e.symm_image_image_of_subset_source |
| 145 | + (s := e.source ∩ u) (show e.source ∩ u ⊆ e.source from inter_subset_left) |
| 146 | + exact himage.subset |
| 147 | + exact ⟨s, hs_precompact, hxs, fun z hz ↦ (hs_subset_source_u hz).2⟩ |
| 148 | + |
| 149 | +omit [SecondCountableTopology M] in |
| 150 | +/-- **Math.** Precompact coordinate balls form a topological basis on a topological |
| 151 | +manifold. -/ |
| 152 | +theorem isTopologicalBasis_isPrecompactCoordinateBall : |
| 153 | + IsTopologicalBasis { s : Set M | IsPrecompactCoordinateBall n s } := by |
| 154 | + -- The local chart construction gives a basis element inside every open neighborhood. |
| 155 | + refine isTopologicalBasis_of_isOpen_of_nhds ?_ ?_ |
| 156 | + · intro s hs |
| 157 | + exact hs.isOpen |
| 158 | + · intro x u hx hu |
| 159 | + obtain ⟨s, hs, hxs, hsu⟩ := exists_isPrecompactCoordinateBall_subset_of_mem_open |
| 160 | + (n := n) hx hu |
| 161 | + exact ⟨s, hs, hxs, hsu⟩ |
| 162 | + |
| 163 | +/-- **Math.** Lemma 1.10: every topological manifold has a *countable* topological |
| 164 | +basis consisting of precompact coordinate balls. -/ |
| 165 | +theorem exists_countable_precompact_coordinate_ball_basis : |
| 166 | + ∃ b : Set (Set M), |
| 167 | + b.Countable ∧ IsTopologicalBasis b ∧ ∀ s ∈ b, IsPrecompactCoordinateBall n s := by |
| 168 | + let B : Set (Set M) := { s : Set M | IsPrecompactCoordinateBall n s } |
| 169 | + have hB : IsTopologicalBasis B := isTopologicalBasis_isPrecompactCoordinateBall (n := n) |
| 170 | + -- Once the local basis is available, second countability lets us thin it to a countable subbasis. |
| 171 | + obtain ⟨b, hbB, hbCountable, hbBasis⟩ := hB.exists_countable |
| 172 | + exact ⟨b, hbCountable, hbBasis, fun s hs ↦ hbB hs⟩ |
| 173 | + |
| 174 | +end Basis |
| 175 | + |
| 176 | +section Refinement |
| 177 | + |
| 178 | +variable {n : ℕ} {M : Type u} [TopologicalSpace M] [T2Space M] |
| 179 | + [SecondCountableTopology M] [ChartedSpace (EuclideanSpace ℝ (Fin n)) M] |
| 180 | + |
| 181 | +include n in |
| 182 | +/-- **Math.** A topological manifold is paracompact. -/ |
| 183 | +theorem paracompactSpace_of_manifold : ParacompactSpace M := by |
| 184 | + letI : LocallyCompactSpace M := |
| 185 | + ChartedSpace.locallyCompactSpace (EuclideanSpace ℝ (Fin n)) M |
| 186 | + letI : SigmaCompactSpace M := sigmaCompactSpace_of_locallyCompact_secondCountable |
| 187 | + infer_instance |
| 188 | + |
| 189 | +/-- **Math.** Companion bridge: given an open cover of a locally compact, |
| 190 | +sigma-compact, Hausdorff space and any basis for its topology, there is a countable |
| 191 | +locally finite refinement by basis elements subordinate to the cover. -/ |
| 192 | +theorem exists_countable_locallyFinite_refinement_of_isTopologicalBasis {X : Type u} |
| 193 | + [TopologicalSpace X] [LocallyCompactSpace X] [SigmaCompactSpace X] [T2Space X] |
| 194 | + {ι : Type v} {U : ι → Opens X} |
| 195 | + (hU : IsOpenCover U) {B : Set (Set X)} (hB : IsTopologicalBasis B) : |
| 196 | + ∃ (κ : Type u), Countable κ ∧ ∃ V : κ → Opens X, |
| 197 | + IsOpenCover V ∧ LocallyFinite (fun j ↦ (V j : Set X)) ∧ |
| 198 | + (∀ j, (V j : Set X) ∈ B) ∧ |
| 199 | + (∀ j, ∃ i, (V j : Set X) ⊆ U i) := by |
| 200 | + -- Choose, at each point, one member of the original cover that contains that point. |
| 201 | + choose i hi using fun x : X ↦ hU.exists_mem_nhds x |
| 202 | + have hBU : |
| 203 | + ∀ x : X, |
| 204 | + (𝓝 x).HasBasis |
| 205 | + (fun s : Set X ↦ s ∈ B ∧ x ∈ s ∧ s ⊆ U (i x)) |
| 206 | + id := by |
| 207 | + intro x |
| 208 | + let hxB : (𝓝 x).HasBasis (fun s : Set X ↦ s ∈ B ∧ x ∈ s) id := hB.nhds_hasBasis |
| 209 | + simpa [and_assoc] using hxB.restrict_subset (hi x) |
| 210 | + -- Feed the subordinate neighborhood bases into the standard locally finite refinement theorem. |
| 211 | + rcases refinement_of_locallyCompact_sigmaCompact_of_nhds_basis hBU with |
| 212 | + ⟨κ, c, W, hW_basis, hW_cover, hW_locallyFinite⟩ |
| 213 | + have hκ : Countable κ := by |
| 214 | + simpa [Set.countable_univ_iff] using |
| 215 | + hW_locallyFinite.countable_univ fun j ↦ ⟨c j, (hW_basis j).2.1⟩ |
| 216 | + refine ⟨κ, hκ, ?_⟩ |
| 217 | + refine ⟨fun j ↦ ⟨W j, hB.isOpen (hW_basis j).1⟩, ?_, hW_locallyFinite, ?_, ?_⟩ |
| 218 | + · exact IsOpenCover.of_sets (fun j ↦ hB.isOpen (hW_basis j).1) hW_cover |
| 219 | + · exact fun j ↦ (hW_basis j).1 |
| 220 | + · exact fun j ↦ ⟨i (c j), (hW_basis j).2.2⟩ |
| 221 | + |
| 222 | +/-- **Math.** Theorem 1.15: given an open cover of a topological manifold, there is a |
| 223 | +countable locally finite refinement by precompact coordinate balls subordinate to |
| 224 | +the cover. -/ |
| 225 | +theorem exists_countable_locally_finite_precompact_coordinate_ball_refinement |
| 226 | + {ι : Type v} {U : ι → Opens M} (hU : IsOpenCover U) : |
| 227 | + ∃ (κ : Type u), Countable κ ∧ ∃ V : κ → Opens M, |
| 228 | + IsOpenCover V ∧ LocallyFinite (fun j ↦ (V j : Set M)) ∧ |
| 229 | + (∀ j, IsPrecompactCoordinateBall n (V j : Set M)) ∧ |
| 230 | + (∀ j, ∃ i, (V j : Set M) ⊆ U i) := by |
| 231 | + -- Start from the countable basis of precompact coordinate balls supplied earlier. |
| 232 | + have hBasis : |
| 233 | + ∃ B : Set (Set M), |
| 234 | + B.Countable ∧ IsTopologicalBasis B ∧ ∀ s ∈ B, IsPrecompactCoordinateBall n s := |
| 235 | + exists_countable_precompact_coordinate_ball_basis |
| 236 | + rcases hBasis with ⟨B, -, hB_basis, hB_precompact⟩ |
| 237 | + -- Apply the abstract refinement theorem to this specific basis. |
| 238 | + have hRefinement : |
| 239 | + ∃ (κ : Type u), Countable κ ∧ ∃ V : κ → Opens M, |
| 240 | + IsOpenCover V ∧ LocallyFinite (fun j ↦ (V j : Set M)) ∧ |
| 241 | + (∀ j, (V j : Set M) ∈ B) ∧ |
| 242 | + (∀ j, ∃ i, (V j : Set M) ⊆ U i) := |
| 243 | + by |
| 244 | + letI : LocallyCompactSpace M := |
| 245 | + ChartedSpace.locallyCompactSpace (EuclideanSpace ℝ (Fin n)) M |
| 246 | + letI : SigmaCompactSpace M := sigmaCompactSpace_of_locallyCompact_secondCountable |
| 247 | + exact exists_countable_locallyFinite_refinement_of_isTopologicalBasis hU hB_basis |
| 248 | + rcases hRefinement with |
| 249 | + ⟨κ, hκ, V, hV_cover, hV_locallyFinite, hV_mem, hV_subordinate⟩ |
| 250 | + refine ⟨κ, hκ, V, hV_cover, hV_locallyFinite, ?_, hV_subordinate⟩ |
| 251 | + intro j |
| 252 | + exact hB_precompact _ (hV_mem j) |
| 253 | + |
| 254 | +end Refinement |
| 255 | + |
| 256 | +end Manifold |
0 commit comments