From 3786a237d3a9b44c1fac60f48ce7815b51267f72 Mon Sep 17 00:00:00 2001 From: Xinze-Li-Moqian <70414198+Xinze-Li-Moqian@users.noreply.github.com> Date: Sun, 19 Jul 2026 01:09:41 -0400 Subject: [PATCH] =?UTF-8?q?feat(topology):=20FiberBundleT2=20=E2=80=94=20H?= =?UTF-8?q?ausdorffness=20of=20fiber=20bundle=20total=20spaces?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First brick of the Hopf–Rinow adoption from feat/hopf-rinow: a self-contained, Mathlib-only leaf lemma (Bundle.TotalSpace is T2 when base and fiber are), with no coupling to the Riemannian cone. Builds against main + the pinned Mathlib; 0 sorries. Co-authored-by: Axel Delaval --- OpenGALib/Topology/FiberBundleT2.lean | 75 +++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 OpenGALib/Topology/FiberBundleT2.lean diff --git a/OpenGALib/Topology/FiberBundleT2.lean b/OpenGALib/Topology/FiberBundleT2.lean new file mode 100644 index 00000000..bd930d26 --- /dev/null +++ b/OpenGALib/Topology/FiberBundleT2.lean @@ -0,0 +1,75 @@ +import Mathlib.Topology.FiberBundle.Basic +import Mathlib.Geometry.Manifold.VectorBundle.Tangent + +/-! +# Hausdorffness of fiber bundle total spaces + +For a topological fiber bundle `E : B → Type*` with model fiber `F` over a base `B`, the total +space `Bundle.TotalSpace F E` is Hausdorff as soon as both `B` and `F` are. The argument is the +usual "separate along the base, or trivialize and separate in the product" dichotomy: + +* if two points of the total space project to distinct points of the base, their preimages + under the (continuous) projection separate them; +* if they share the same base point, they both lie in the source of the preferred + trivialization at that point, which is a homeomorphism onto an open subset of `B × F`; pulling + back disjoint neighbourhoods of their (distinct) images in the Hausdorff space `B × F` + separates them. + +As a corollary, the tangent bundle `TangentBundle I M` of a `C^1` manifold `M` modelled on a +normed space over a Hausdorff base `M` is Hausdorff, since the model fiber (a normed space) is +always Hausdorff. + +## Main results + +* `FiberBundle.t2Space_totalSpace` — the total space of a fiber bundle over a Hausdorff base + with Hausdorff model fiber is Hausdorff. +* `TangentBundle.t2Space` — the tangent bundle of a `C^1` manifold over a Hausdorff base is + Hausdorff. +-/ + +open Bundle + +/-- **Math.** The total space of a (topological) fiber bundle with model fiber `F` over a base +`B` is Hausdorff as soon as `B` and `F` both are. Two points with distinct base projections are +separated by pulling back disjoint open sets around their projections through the continuous +projection map; two points sharing the same base point are separated by pulling back disjoint +open sets around their (distinct) images under the preferred trivialization at that point, which +identifies a neighbourhood of both points with an open subset of the Hausdorff space `B × F`. -/ +theorem FiberBundle.t2Space_totalSpace {B F : Type*} [TopologicalSpace B] [TopologicalSpace F] + {E : B → Type*} [TopologicalSpace (Bundle.TotalSpace F E)] [∀ b, TopologicalSpace (E b)] + [FiberBundle F E] [T2Space B] [T2Space F] : T2Space (Bundle.TotalSpace F E) := by + constructor + intro x y hxy + rcases eq_or_ne x.proj y.proj with hp | hp + · -- Same base point: separate inside the preferred trivialization at `x.proj`. + set e := trivializationAt F E x.proj with he_def + have hxs : x ∈ e.source := FiberBundle.mem_trivializationAt_proj_source + have hys : y ∈ e.source := + e.mem_source.mpr (hp ▸ FiberBundle.mem_baseSet_trivializationAt F E x.proj) + have hne : e x ≠ e y := fun h => hxy (e.injOn hxs hys h) + obtain ⟨u, v, hu, hv, hxu, hyv, huv⟩ := t2_separation hne + exact ⟨e.source ∩ e ⁻¹' u, e.source ∩ e ⁻¹' v, + e.isOpen_inter_preimage hu, e.isOpen_inter_preimage hv, + ⟨hxs, hxu⟩, ⟨hys, hyv⟩, + Set.disjoint_left.mpr fun _ hz hz' => Set.disjoint_left.mp huv hz.2 hz'.2⟩ + · -- Distinct base points: separate along the (continuous) projection. + obtain ⟨u, v, hu, hv, hxu, hyv, huv⟩ := t2_separation hp + exact ⟨Bundle.TotalSpace.proj ⁻¹' u, Bundle.TotalSpace.proj ⁻¹' v, + hu.preimage (FiberBundle.continuous_proj F E), hv.preimage (FiberBundle.continuous_proj F E), + hxu, hyv, huv.preimage _⟩ + +/-- **Math.** The tangent bundle `TangentBundle I M` of a `C^1` manifold `M`, modelled on a +normed space `E` and charted on `H`, is Hausdorff as soon as the base manifold `M` is. This +specializes `FiberBundle.t2Space_totalSpace` to the tangent bundle, using that the model fiber +`E` (a normed space) is automatically Hausdorff. -/ +instance TangentBundle.t2Space {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] + {H : Type*} [TopologicalSpace H] (I : ModelWithCorners ℝ E H) (M : Type*) + [TopologicalSpace M] [T2Space M] [ChartedSpace H M] [IsManifold I 1 M] : + T2Space (TangentBundle I M) := + FiberBundle.t2Space_totalSpace + +open scoped Manifold ContDiff in +example {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] + {H : Type*} [TopologicalSpace H] {J : ModelWithCorners ℝ E H} + {M : Type*} [MetricSpace M] [ChartedSpace H M] [IsManifold J ∞ M] : + T2Space (TangentBundle J M) := inferInstance