@@ -31,8 +31,8 @@ fiber bundle and projection.
31
31
`topological_fiber_bundle_core ι B F` : structure registering how changes of coordinates act on the
32
32
fiber `F` above open subsets of `B`, where local trivializations are indexed by ι.
33
33
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
36
36
`Z.proj` : projection from `Z.total_space` to `B`. It is continuous.
37
37
`Z.fiber x` : the fiber above `x`, homeomorphic to `F` (and defeq to `F` as a type).
38
38
`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
42
42
43
43
A topological fiber bundle with fiber F over a base B is a family of spaces isomorphic to F,
44
44
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
56
59
(each choice of one of the trivializations around x gives such an isomorphism). Given a
57
60
trivialization over a set `s`, one gets an isomorphism between `s × F` and `proj^{-1} s`, by using
58
61
the identification corresponding to this trivialization. One chooses the topology on the bundle that
@@ -65,9 +68,9 @@ This has several practical advantages:
65
68
* without any work, one gets a topological space structure on the fiber. And if `F` has more
66
69
structure it is inherited for free by the fiber.
67
70
* 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 .
71
74
72
75
A drawback is that some silly constructions will typecheck: in the case of the tangent bundle, one
73
76
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
76
79
situation: even if Lean can not check that two basepoints are defeq, it will accept the fact that
77
80
the tangent spaces are the same. For instance, if two maps f and g are locally inverse to each
78
81
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
81
84
as it does not know that `g (f x) = x`). As these types are the same to Lean (equal to `F`), there
82
85
are in fact no dependent type difficulties here!
83
86
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
86
90
functorial and it is a nice way to say that the trivializations cover the whole space B.
87
91
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.
90
94
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.
96
101
97
102
## Tags
98
103
Fiber bundle, topological bundle, vector bundle, local trivialization, structure group
@@ -109,8 +114,11 @@ variables {Z : Type*} [topological_space B] [topological_space Z]
109
114
110
115
variable (F)
111
116
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
+ -/
114
122
structure bundle_trivialization extends local_homeomorph Z (B × F) :=
115
123
(base_set : set B)
116
124
(open_base_set : is_open base_set)
@@ -131,8 +139,8 @@ lemma bundle_trivialization.continuous_at_proj (e : bundle_trivialization F proj
131
139
(ex : x ∈ e.source) : continuous_at proj x :=
132
140
begin
133
141
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 ,
136
144
rw e.source_eq at ex,
137
145
let u := e.base_set ∩ t,
138
146
have u_open : is_open u := is_open_inter e.open_base_set t_open,
@@ -177,9 +185,8 @@ begin
177
185
assume s hs,
178
186
rw is_open_iff_forall_mem_open,
179
187
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,
183
190
refine ⟨proj '' (s ∩ e.source), image_subset _ (inter_subset_left _ _), _, ⟨y, ⟨ys, he⟩, yx⟩⟩,
184
191
have : ∀z ∈ s ∩ e.source, prod.fst (e.to_fun z) = proj z := λz hz, e.proj_to_fun z hz.2 ,
185
192
rw [← image_congr this , image_comp],
@@ -246,19 +253,24 @@ variables [topological_space B] [topological_space F] (Z : topological_fiber_bun
246
253
247
254
include Z
248
255
249
- def index := ι
256
+ /-- The index set of a topological fiber bundle core, as a convenience function for dot notation -/
257
+ @[nolint] def index := ι
250
258
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
252
261
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
254
265
255
266
instance (x : B) : topological_space (Z.fiber x) := by { dsimp [fiber], apply_instance }
256
267
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
258
269
not marked as reducible, typeclass inference will not infer the wrong topology, and will use the
259
270
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
261
272
273
+ /-- The projection from the total space of a topological fiber bundle core, on its base. -/
262
274
@[simp] def proj : Z.total_space → B := λp, p.1
263
275
264
276
/-- Local homeomorphism version of the trivialization change. -/
@@ -270,28 +282,27 @@ def triv_change (i j : ι) : local_homeomorph (B × F) (B × F) :=
270
282
map_source := λp hp, by simpa using hp,
271
283
map_target := λp hp, by simpa using hp,
272
284
left_inv := begin
273
- assume p hx,
274
- rcases p with ⟨x, v⟩,
285
+ rintros ⟨x, v⟩ hx,
275
286
simp only [prod_mk_mem_set_prod_eq, mem_inter_eq, and_true, mem_univ] at hx,
276
287
rw [Z.coord_change_comp, Z.coord_change_self],
277
288
{ exact hx.1 },
278
289
{ simp [hx] }
279
290
end ,
280
291
right_inv := begin
281
- assume p hx,
282
- rcases p with ⟨x, v⟩,
292
+ rintros ⟨x, v⟩ hx,
283
293
simp only [prod_mk_mem_set_prod_eq, mem_inter_eq, and_true, mem_univ] at hx,
284
294
rw [Z.coord_change_comp, Z.coord_change_self],
285
295
{ exact hx.2 },
286
296
{ simp [hx] },
287
297
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) }
295
306
296
307
@[simp] lemma mem_triv_change_source (i j : ι) (p : B × F) :
297
308
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) :=
315
326
map_target := λp hp,
316
327
by simpa only [set.mem_preimage, and_true, set.mem_univ, set.mem_prod] using hp,
317
328
left_inv := begin
318
- assume p hx,
319
- rcases p with ⟨x, v⟩,
329
+ rintros ⟨x, v⟩ hx,
320
330
change x ∈ Z.base_set i at hx,
321
331
dsimp,
322
332
rw [Z.coord_change_comp, Z.coord_change_self],
323
333
{ exact Z.mem_base_set_at _ },
324
334
{ simp [hx] }
325
335
end ,
326
336
right_inv := begin
327
- assume p hx,
328
- rcases p with ⟨x, v⟩,
337
+ rintros ⟨x, v⟩ hx,
329
338
simp only [prod_mk_mem_set_prod_eq, and_true, mem_univ] at hx,
330
339
rw [Z.coord_change_comp, Z.coord_change_self],
331
340
{ exact hx },
@@ -352,8 +361,7 @@ lemma local_triv'_trans (i j : ι) :
352
361
begin
353
362
split,
354
363
{ 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,
357
365
simp only [triv_change, local_triv', local_equiv.symm, true_and, local_equiv.right_inv,
358
366
prod_mk_mem_set_prod_eq, local_equiv.trans_source, mem_inter_eq, and_true,
359
367
mem_univ, prod.mk.inj_iff, local_equiv.trans_apply, mem_preimage, proj,
@@ -373,9 +381,8 @@ begin
373
381
simp only [exists_prop, mem_Union, mem_singleton_iff],
374
382
refine ⟨i, set.prod (Z.base_set i) univ, is_open_prod (Z.is_open_base_set i) (is_open_univ), _⟩,
375
383
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]
379
386
end
380
387
381
388
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) :=
396
403
apply continuous_on_open_of_generate_from (Z.open_target' i),
397
404
assume t ht,
398
405
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,
400
408
rw ts,
401
409
simp only [local_equiv.right_inv, preimage_inter, local_equiv.left_inv],
402
410
let e := Z.local_triv' i,
@@ -434,7 +442,8 @@ lemma local_triv_trans (i j : ι) :
434
442
(Z.local_triv i).symm.trans (Z.local_triv j) ≈ Z.triv_change i j :=
435
443
Z.local_triv'_trans i j
436
444
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. -/
438
447
def local_triv_ext (i : ι) : bundle_trivialization F Z.proj :=
439
448
{ base_set := Z.base_set i,
440
449
open_base_set := Z.is_open_base_set i,
@@ -455,6 +464,8 @@ Z.is_topological_fiber_bundle.continuous_proj
455
464
lemma is_open_map_proj : is_open_map Z.proj :=
456
465
Z.is_topological_fiber_bundle.is_open_map_proj
457
466
467
+ /-- Preferred local trivialization of a fiber bundle constructed from core, at a given point, as
468
+ a local homeomorphism -/
458
469
def local_triv_at (p : Z.total_space) : local_homeomorph Z.total_space (B × F) :=
459
470
Z.local_triv (Z.index_at (Z.proj p))
460
471
@@ -467,6 +478,8 @@ by simp [local_triv_at]
467
478
@[simp] lemma local_triv_at_symm_fst (p : Z.total_space) (q : B × F) :
468
479
((Z.local_triv_at p).inv_fun q).1 = q.1 := rfl
469
480
481
+ /-- Preferred local trivialization of a fiber bundle constructed from core, at a given point, as
482
+ a bundle trivialization -/
470
483
def local_triv_at_ext (p : Z.total_space) : bundle_trivialization F Z.proj :=
471
484
Z.local_triv_ext (Z.index_at (Z.proj p))
472
485
0 commit comments