Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 36dfcfc

Browse files
sgouezelmergify[bot]
authored andcommitted
doc(topology/topological_fiber_bundle): documentation improvements (#1594)
* feat(topology/topological_fiber_bundle): improvements * minor fixes
1 parent d214c61 commit 36dfcfc

File tree

1 file changed

+74
-61
lines changed

1 file changed

+74
-61
lines changed

src/topology/topological_fiber_bundle.lean

Lines changed: 74 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ fiber bundle and projection.
3131
`topological_fiber_bundle_core ι B F` : structure registering how changes of coordinates act on the
3232
fiber `F` above open subsets of `B`, where local trivializations are indexed by ι.
3333
Let `Z : topological_fiber_bundle_core ι B F`. Then we define
34-
`Z.total_space` : the total space of `Z`, defined as `Σx:B, F`, but with the topology coming from
35-
the fiber bundle structure
34+
`Z.total_space` : the total space of `Z`, defined as a Type as `B × F`, but with a twisted topology
35+
coming from the fiber bundle structure
3636
`Z.proj` : projection from `Z.total_space` to `B`. It is continuous.
3737
`Z.fiber x` : the fiber above `x`, homeomorphic to `F` (and defeq to `F` as a type).
3838
`Z.local_triv i`: for `i : ι`, a local homeomorphism from `Z.total_space` to `B × F`, that realizes
@@ -42,17 +42,20 @@ Let `Z : topological_fiber_bundle_core ι B F`. Then we define
4242
4343
A topological fiber bundle with fiber F over a base B is a family of spaces isomorphic to F,
4444
indexed by B, which is locally trivial in the following sense: there is a covering of B by open
45-
sets such that, on each such open set `s`, the bundle is isomorphic to `s × F`. To construct it
46-
formally, the main data is what happens when one changes trivializations from `s × F` to `s' × F`
47-
on `s ∩ s'`: one should get a family of homeomorphisms of `F`, depending continuously on the
48-
base point, satisfying basic compatibility conditions (cocycle property). Useful classes of bundles
49-
can then be specified by requiring that these homeomorphisms of `F` belong to some subgroup,
50-
preserving some structure (the "structure group of the bundle"): then these structures are inherited
51-
by the fibers of the bundle.
52-
53-
Given these data, one can construct the fiber bundle. The intrinsic canonical mathematical
54-
construction is the following. The fiber above x is the disjoint union of F over all trivializations,
55-
modulo the gluing identifications: one gets a fiber which is isomorphic to F, but non-canonically
45+
sets such that, on each such open set `s`, the bundle is isomorphic to `s × F`.
46+
47+
To construct a fiber bundle formally, the main data is what happens when one changes trivializations
48+
from `s × F` to `s' × F` on `s ∩ s'`: one should get a family of homeomorphisms of `F`, depending
49+
continuously on the base point, satisfying basic compatibility conditions (cocycle property).
50+
Useful classes of bundles can then be specified by requiring that these homeomorphisms of `F`
51+
belong to some subgroup, preserving some structure (the "structure group of the bundle"): then
52+
these structures are inherited by the fibers of the bundle.
53+
54+
Given such trivialization change data (encoded below in a structure called
55+
`topological_fiber_bundle_core`), one can construct the fiber bundle. The intrinsic canonical
56+
mathematical construction is the following.
57+
The fiber above x is the disjoint union of F over all trivializations, modulo the gluing
58+
identifications: one gets a fiber which is isomorphic to F, but non-canonically
5659
(each choice of one of the trivializations around x gives such an isomorphism). Given a
5760
trivialization over a set `s`, one gets an isomorphism between `s × F` and `proj^{-1} s`, by using
5861
the identification corresponding to this trivialization. One chooses the topology on the bundle that
@@ -65,9 +68,9 @@ This has several practical advantages:
6568
* without any work, one gets a topological space structure on the fiber. And if `F` has more
6669
structure it is inherited for free by the fiber.
6770
* In the trivial situation of the trivial bundle where there is only one chart and one
68-
trivialization, this construction is defeq to the canonical construction (Σ x : B, F). In the case
69-
of the tangent bundle of manifolds, this implies that on vector spaces the derivative and the
70-
manifold derivative are defeq.
71+
trivialization, this construction gives the product space B × F with the product topology. In the
72+
case of the tangent bundle of manifolds, this also implies that on vector spaces the derivative and
73+
the manifold derivative are equal.
7174
7275
A drawback is that some silly constructions will typecheck: in the case of the tangent bundle, one
7376
can add two vectors in different tangent spaces (as they both are elements of F from the point of
@@ -76,23 +79,25 @@ lose the identification of the tangent space to F with F. There is however a big
7679
situation: even if Lean can not check that two basepoints are defeq, it will accept the fact that
7780
the tangent spaces are the same. For instance, if two maps f and g are locally inverse to each
7881
other, one can express that the composition of their derivatives is the identity of
79-
`tangent_space 𝕜 x`. One could fear issues as this composition goes from `tangent_space 𝕜 x` to
80-
`tangent_space 𝕜 (g (f x))` (which should be the same, but should not be obvious to Lean
82+
`tangent_space I x`. One could fear issues as this composition goes from `tangent_space I x` to
83+
`tangent_space I (g (f x))` (which should be the same, but should not be obvious to Lean
8184
as it does not know that `g (f x) = x`). As these types are the same to Lean (equal to `F`), there
8285
are in fact no dependent type difficulties here!
8386
84-
For this construction, we should thus choose for each `x` one specific trivialization around it. We
85-
include this choice in the definition of the fiber bundle, as it makes some constructions more
87+
For this construction of a fiber bundle from a `topological_fiber_bundle_core`, we should thus
88+
choose for each `x` one specific trivialization around it. We include this choice in the definition
89+
of the `topological_fiber_bundle_core`, as it makes some constructions more
8690
functorial and it is a nice way to say that the trivializations cover the whole space B.
8791
88-
With this definition, the type of the fiber bundle is just `Σ x : B, F`, but the topology is not the
89-
product one.
92+
With this definition, the type of the fiber bundle space constructed from the core data is just
93+
`B × F`, but the topology is not the product one.
9094
91-
We also take the indexing type (indexing all the trivializations) as a parameter to the bundle:
92-
it could always be taken as a subtype of all the maps from open subsets of B to continuous maps
93-
of F, but in practice it will sometimes be something else. For instance, on a manifold, one will use
94-
the set of charts as a good parameterization for the trivializations of the tangent bundle. Or for
95-
the pullback of a fiber bundle the indexing type will be the same as for the initial bundle.
95+
We also take the indexing type (indexing all the trivializations) as a parameter to the fiber bundle
96+
core: it could always be taken as a subtype of all the maps from open subsets of B to continuous
97+
maps of F, but in practice it will sometimes be something else. For instance, on a manifold, one
98+
will use the set of charts as a good parameterization for the trivializations of the tangent bundle.
99+
Or for the pullback of a `topological_fiber_bundle_core`, the indexing type will be the same as
100+
for the initial bundle.
96101
97102
## Tags
98103
Fiber bundle, topological bundle, vector bundle, local trivialization, structure group
@@ -109,8 +114,11 @@ variables {Z : Type*} [topological_space B] [topological_space Z]
109114

110115
variable (F)
111116

112-
/-- A structure extending local homeomorphisms, defining a local trivialization of a projection
113-
`proj : Z → B` with fiber `F`, as a local homeomorphism between `Z` and `B × F`. -/
117+
/--
118+
A structure extending local homeomorphisms, defining a local trivialization of a projection
119+
`proj : Z → B` with fiber `F`, as a local homeomorphism between `Z` and `B × F` defined between two
120+
sets of the form `proj ⁻¹' base_set` and `base_set × F`, acting trivially on the first coordinate.
121+
-/
114122
structure bundle_trivialization extends local_homeomorph Z (B × F) :=
115123
(base_set : set B)
116124
(open_base_set : is_open base_set)
@@ -131,8 +139,8 @@ lemma bundle_trivialization.continuous_at_proj (e : bundle_trivialization F proj
131139
(ex : x ∈ e.source) : continuous_at proj x :=
132140
begin
133141
assume s hs,
134-
rw mem_nhds_sets_iff at hs,
135-
rcases hs with ⟨t, st, t_open, xt⟩,
142+
obtain ⟨t, st, t_open, xt⟩ : ∃ t ⊆ s, is_open t ∧ proj x ∈ t,
143+
from mem_nhds_sets_iff.1 hs,
136144
rw e.source_eq at ex,
137145
let u := e.base_set ∩ t,
138146
have u_open : is_open u := is_open_inter e.open_base_set t_open,
@@ -177,9 +185,8 @@ begin
177185
assume s hs,
178186
rw is_open_iff_forall_mem_open,
179187
assume x xs,
180-
rw mem_image_eq at xs,
181-
rcases xs with ⟨y, ys, yx⟩,
182-
rcases h y with ⟨e, he⟩,
188+
obtain ⟨y, ys, yx⟩ : ∃ y, y ∈ s ∧ proj y = x, from (mem_image _ _ _).1 xs,
189+
obtain ⟨e, he⟩ : ∃ (e : bundle_trivialization F proj), y ∈ e.source, from h y,
183190
refine ⟨proj '' (s ∩ e.source), image_subset _ (inter_subset_left _ _), _, ⟨y, ⟨ys, he⟩, yx⟩⟩,
184191
have : ∀z ∈ s ∩ e.source, prod.fst (e.to_fun z) = proj z := λz hz, e.proj_to_fun z hz.2,
185192
rw [← image_congr this, image_comp],
@@ -246,19 +253,24 @@ variables [topological_space B] [topological_space F] (Z : topological_fiber_bun
246253

247254
include Z
248255

249-
def index := ι
256+
/-- The index set of a topological fiber bundle core, as a convenience function for dot notation -/
257+
@[nolint] def index := ι
250258

251-
def base := B
259+
/-- The base space of a topological fiber bundle core, as a convenience function for dot notation -/
260+
@[nolint] def base := B
252261

253-
def fiber (x : B) := F
262+
/-- The fiber of a topological fiber bundle core, as a convenience function for dot notation and
263+
typeclass inference -/
264+
@[nolint] def fiber (x : B) := F
254265

255266
instance (x : B) : topological_space (Z.fiber x) := by { dsimp [fiber], apply_instance }
256267

257-
/-- Total space of a topological bundle created from core. It is equal to `Σ x : B, F`, but as it is
268+
/-- Total space of a topological bundle created from core. It is equal to `B × F`, but as it is
258269
not marked as reducible, typeclass inference will not infer the wrong topology, and will use the
259270
instance `topological_fiber_bundle_core.to_topological_space` with the right topology. -/
260-
def total_space := B × F
271+
@[nolint] def total_space := B × F
261272

273+
/-- The projection from the total space of a topological fiber bundle core, on its base. -/
262274
@[simp] def proj : Z.total_space → B := λp, p.1
263275

264276
/-- Local homeomorphism version of the trivialization change. -/
@@ -270,28 +282,27 @@ def triv_change (i j : ι) : local_homeomorph (B × F) (B × F) :=
270282
map_source := λp hp, by simpa using hp,
271283
map_target := λp hp, by simpa using hp,
272284
left_inv := begin
273-
assume p hx,
274-
rcases p with ⟨x, v⟩,
285+
rintros ⟨x, v⟩ hx,
275286
simp only [prod_mk_mem_set_prod_eq, mem_inter_eq, and_true, mem_univ] at hx,
276287
rw [Z.coord_change_comp, Z.coord_change_self],
277288
{ exact hx.1 },
278289
{ simp [hx] }
279290
end,
280291
right_inv := begin
281-
assume p hx,
282-
rcases p with ⟨x, v⟩,
292+
rintros ⟨x, v⟩ hx,
283293
simp only [prod_mk_mem_set_prod_eq, mem_inter_eq, and_true, mem_univ] at hx,
284294
rw [Z.coord_change_comp, Z.coord_change_self],
285295
{ exact hx.2 },
286296
{ simp [hx] },
287297
end,
288-
open_source := is_open_prod (is_open_inter (Z.is_open_base_set i) (Z.is_open_base_set j)) is_open_univ,
289-
open_target := is_open_prod (is_open_inter (Z.is_open_base_set i) (Z.is_open_base_set j)) is_open_univ,
290-
continuous_to_fun := continuous_on.prod continuous_fst.continuous_on (Z.coord_change_continuous i j),
291-
continuous_inv_fun := begin
292-
have := continuous_on.prod continuous_fst.continuous_on (Z.coord_change_continuous j i),
293-
rwa inter_comm at this
294-
end }
298+
open_source :=
299+
is_open_prod (is_open_inter (Z.is_open_base_set i) (Z.is_open_base_set j)) is_open_univ,
300+
open_target :=
301+
is_open_prod (is_open_inter (Z.is_open_base_set i) (Z.is_open_base_set j)) is_open_univ,
302+
continuous_to_fun :=
303+
continuous_on.prod continuous_fst.continuous_on (Z.coord_change_continuous i j),
304+
continuous_inv_fun := by simpa [inter_comm]
305+
using continuous_on.prod continuous_fst.continuous_on (Z.coord_change_continuous j i) }
295306

296307
@[simp] lemma mem_triv_change_source (i j : ι) (p : B × F) :
297308
p ∈ (Z.triv_change i j).source ↔ p.1 ∈ Z.base_set i ∩ Z.base_set j :=
@@ -315,17 +326,15 @@ def local_triv' (i : ι) : local_equiv Z.total_space (B × F) :=
315326
map_target := λp hp,
316327
by simpa only [set.mem_preimage, and_true, set.mem_univ, set.mem_prod] using hp,
317328
left_inv := begin
318-
assume p hx,
319-
rcases p with ⟨x, v⟩,
329+
rintros ⟨x, v⟩ hx,
320330
change x ∈ Z.base_set i at hx,
321331
dsimp,
322332
rw [Z.coord_change_comp, Z.coord_change_self],
323333
{ exact Z.mem_base_set_at _ },
324334
{ simp [hx] }
325335
end,
326336
right_inv := begin
327-
assume p hx,
328-
rcases p with ⟨x, v⟩,
337+
rintros ⟨x, v⟩ hx,
329338
simp only [prod_mk_mem_set_prod_eq, and_true, mem_univ] at hx,
330339
rw [Z.coord_change_comp, Z.coord_change_self],
331340
{ exact hx },
@@ -352,8 +361,7 @@ lemma local_triv'_trans (i j : ι) :
352361
begin
353362
split,
354363
{ ext x, erw [mem_prod], simp [local_equiv.trans_source] },
355-
{ assume p hx,
356-
rcases p with ⟨x, v⟩,
364+
{ rintros ⟨x, v⟩ hx,
357365
simp only [triv_change, local_triv', local_equiv.symm, true_and, local_equiv.right_inv,
358366
prod_mk_mem_set_prod_eq, local_equiv.trans_source, mem_inter_eq, and_true,
359367
mem_univ, prod.mk.inj_iff, local_equiv.trans_apply, mem_preimage, proj,
@@ -373,9 +381,8 @@ begin
373381
simp only [exists_prop, mem_Union, mem_singleton_iff],
374382
refine ⟨i, set.prod (Z.base_set i) univ, is_open_prod (Z.is_open_base_set i) (is_open_univ), _⟩,
375383
ext p,
376-
simp only [set.mem_preimage, and_true, set.mem_inter_eq, set.mem_univ,
377-
topological_fiber_bundle_core.local_triv'_fst, iff_self, set.mem_prod, and_self,
378-
topological_fiber_bundle_core.mem_local_triv'_source]
384+
simp [topological_fiber_bundle_core.local_triv'_fst,
385+
topological_fiber_bundle_core.mem_local_triv'_source]
379386
end
380387

381388
lemma open_target' (i : ι) : is_open (Z.local_triv' i).target :=
@@ -396,7 +403,8 @@ def local_triv (i : ι) : local_homeomorph Z.total_space (B × F) :=
396403
apply continuous_on_open_of_generate_from (Z.open_target' i),
397404
assume t ht,
398405
simp only [exists_prop, mem_Union, mem_singleton_iff] at ht,
399-
rcases ht with ⟨j, s, s_open, ts⟩,
406+
obtain ⟨j, s, s_open, ts⟩ : ∃ j s,
407+
is_open s ∧ t = (local_triv' Z j).source ∩ (local_triv' Z j).to_fun ⁻¹' s := ht,
400408
rw ts,
401409
simp only [local_equiv.right_inv, preimage_inter, local_equiv.left_inv],
402410
let e := Z.local_triv' i,
@@ -434,7 +442,8 @@ lemma local_triv_trans (i j : ι) :
434442
(Z.local_triv i).symm.trans (Z.local_triv j) ≈ Z.triv_change i j :=
435443
Z.local_triv'_trans i j
436444

437-
/-- Extended version of the local trivialization, as a bundle trivialization -/
445+
/-- Extended version of the local trivialization of a fiber bundle constructed from core,
446+
registering additionally in its type that it is a local bundle trivialization. -/
438447
def local_triv_ext (i : ι) : bundle_trivialization F Z.proj :=
439448
{ base_set := Z.base_set i,
440449
open_base_set := Z.is_open_base_set i,
@@ -455,6 +464,8 @@ Z.is_topological_fiber_bundle.continuous_proj
455464
lemma is_open_map_proj : is_open_map Z.proj :=
456465
Z.is_topological_fiber_bundle.is_open_map_proj
457466

467+
/-- Preferred local trivialization of a fiber bundle constructed from core, at a given point, as
468+
a local homeomorphism -/
458469
def local_triv_at (p : Z.total_space) : local_homeomorph Z.total_space (B × F) :=
459470
Z.local_triv (Z.index_at (Z.proj p))
460471

@@ -467,6 +478,8 @@ by simp [local_triv_at]
467478
@[simp] lemma local_triv_at_symm_fst (p : Z.total_space) (q : B × F) :
468479
((Z.local_triv_at p).inv_fun q).1 = q.1 := rfl
469480

481+
/-- Preferred local trivialization of a fiber bundle constructed from core, at a given point, as
482+
a bundle trivialization -/
470483
def local_triv_at_ext (p : Z.total_space) : bundle_trivialization F Z.proj :=
471484
Z.local_triv_ext (Z.index_at (Z.proj p))
472485

0 commit comments

Comments
 (0)