Vector bundles #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
In this file we define (topological) vector bundles.
Let B
be the base space, let F
be a normed space over a normed field R
, and let
E : B → Type*
be a fiber_bundle
with fiber F
, in which, for each x
, the fiber E x
is a
topological vector space over R
.
To have a vector bundle structure on bundle.total_space F E
, one should additionally have the
following properties:
- The bundle trivializations in the trivialization atlas should be continuous linear equivs in the fibers;
- For any two trivializations
e
,e'
in the atlas the transition function considered as a map fromB
intoF →L[R] F
is continuous one.base_set ∩ e'.base_set
with respect to the operator norm topology onF →L[R] F
.
If these conditions are satisfied, we register the typeclass vector_bundle R F E
.
We define constructions on vector bundles like pullbacks and direct sums in other files.
Main Definitions #
trivialization.is_linear
: a class stating that a trivialization is fiberwise linear on its base set.trivialization.linear_equiv_at
andtrivialization.continuous_linear_map_at
are the (continuous) linear fiberwise equivalences a trivialization induces.- They have forward maps
trivialization.linear_map_at
/trivialization.continuous_linear_map_at
and inversestrivialization.symmₗ
/trivialization.symmL
. Note that these are all defined everywhere, since they are extended using the zero function. trivialization.coord_changeL
is the coordinate change induced by two trivializations. It only makes sense on the intersection of their base sets, but is extended outside it using the identity.- Given a continuous (semi)linear map between
E x
andE' y
whereE
andE'
are bundles over possibly different base sets,continuous_linear_map.in_coordinates
turns this into a continuous (semi)linear map between the chosen fibers of those bundles.
Implementation notes #
The implementation choices in the vector bundle definition are discussed in the "Implementation
notes" section of topology.fiber_bundle.basic
.
Tags #
Vector bundle
A mixin class for pretrivialization
, stating that a pretrivialization is fiberwise linear with
respect to given module structures on its fibers and the model fiber.
Instances of this typeclass
A fiberwise linear inverse to e
.
Equations
- pretrivialization.symmₗ R e b = is_linear_map.mk' (e.symm b) _
A pretrivialization for a vector bundle defines linear equivalences between the fibers and the model space.
A fiberwise linear map equal to e
on e.base_set
.
A mixin class for trivialization
, stating that a trivialization is fiberwise linear with
respect to given module structures on its fibers and the model fiber.
A trivialization for a vector bundle defines linear equivalences between the fibers and the model space.
Equations
- trivialization.linear_equiv_at R e b hb = pretrivialization.linear_equiv_at R e.to_pretrivialization b hb
A fiberwise linear inverse to e
.
Equations
A fiberwise linear map equal to e
on e.base_set
.
Equations
A coordinate change function between two trivializations, as a continuous linear equivalence.
Defined to be the identity when b
does not lie in the base set of both trivializations.
Equations
- trivialization.coord_changeL R e e' b = {to_linear_equiv := {to_fun := (dite (b ∈ e.base_set ∩ e'.base_set) (λ (hb : b ∈ e.base_set ∩ e'.base_set), (trivialization.linear_equiv_at R e b _).symm.trans (trivialization.linear_equiv_at R e' b _)) (λ (hb : b ∉ e.base_set ∩ e'.base_set), linear_equiv.refl R F)).to_fun, map_add' := _, map_smul' := _, inv_fun := (dite (b ∈ e.base_set ∩ e'.base_set) (λ (hb : b ∈ e.base_set ∩ e'.base_set), (trivialization.linear_equiv_at R e b _).symm.trans (trivialization.linear_equiv_at R e' b _)) (λ (hb : b ∉ e.base_set ∩ e'.base_set), linear_equiv.refl R F)).inv_fun, left_inv := _, right_inv := _}, continuous_to_fun := _, continuous_inv_fun := _}
A version of coord_change_apply
that fully unfolds coord_change
. The right-hand side is
ugly, but has good definitional properties for specifically defined trivializations.
The zero section of a vector bundle
Equations
- bundle.zero_section F E = λ (x : B), {proj := x, snd := 0}
- trivialization_linear' : ∀ (e : trivialization F bundle.total_space.proj) [_inst_10 : mem_trivialization_atlas e], trivialization.is_linear R e
- continuous_on_coord_change' : ∀ (e e' : trivialization F bundle.total_space.proj) [_inst_10 : mem_trivialization_atlas e] [_inst_11 : mem_trivialization_atlas e'], continuous_on (λ (b : B), ↑(trivialization.coord_changeL R e e' b)) (e.base_set ∩ e'.base_set)
The space total_space F E
(for E : B → Type*
such that each E x
is a topological vector
space) has a topological vector space structure with fiber F
(denoted with
vector_bundle R F E
) if around every point there is a fiber bundle trivialization
which is linear in the fibers.
Forward map of continuous_linear_equiv_at
(only propositionally equal),
defined everywhere (0
outside domain).
Equations
- trivialization.continuous_linear_map_at R e b = {to_linear_map := {to_fun := ⇑(trivialization.linear_map_at R e b), map_add' := _, map_smul' := _}, cont := _}
Backwards map of continuous_linear_equiv_at
, defined everywhere.
Equations
- trivialization.symmL R e b = {to_linear_map := {to_fun := e.symm b, map_add' := _, map_smul' := _}, cont := _}
In a vector bundle, a trivialization in the fiber (which is a priori only linear) is in fact a continuous linear equiv between the fibers and the model fiber.
Equations
- trivialization.continuous_linear_equiv_at R e b hb = {to_linear_equiv := {to_fun := λ (y : E b), (⇑e {proj := b, snd := y}).snd, map_add' := _, map_smul' := _, inv_fun := e.symm b, left_inv := _, right_inv := _}, continuous_to_fun := _, continuous_inv_fun := _}
Constructing vector bundles #
- base_set : ι → set B
- is_open_base_set : ∀ (i : ι), is_open (self.base_set i)
- index_at : B → ι
- mem_base_set_at : ∀ (x : B), x ∈ self.base_set (self.index_at x)
- coord_change : ι → ι → B → (F →L[R] F)
- coord_change_self : ∀ (i : ι) (x : B), x ∈ self.base_set i → ∀ (v : F), ⇑(self.coord_change i i x) v = v
- continuous_on_coord_change : ∀ (i j : ι), continuous_on (self.coord_change i j) (self.base_set i ∩ self.base_set j)
- coord_change_comp : ∀ (i j k : ι) (x : B), x ∈ self.base_set i ∩ self.base_set j ∩ self.base_set k → ∀ (v : F), ⇑(self.coord_change j k x) (⇑(self.coord_change i j x) v) = ⇑(self.coord_change i k x) v
Analogous construction of fiber_bundle_core
for vector bundles. This
construction gives a way to construct vector bundles from a structure registering how
trivialization changes act on fibers.
Instances for vector_bundle_core
- vector_bundle_core.has_sizeof_inst
- vector_bundle_core.inhabited
- vector_bundle_core.to_fiber_bundle_core_coe
The trivial vector bundle core, in which all the changes of coordinates are the identity.
Equations
- trivial_vector_bundle_core R B F ι = {base_set := λ (ι : ι), set.univ, is_open_base_set := _, index_at := inhabited.default (pi.inhabited B), mem_base_set_at := _, coord_change := λ (i j : ι) (x : B), continuous_linear_map.id R F, coord_change_self := _, continuous_on_coord_change := _, coord_change_comp := _}
Equations
- vector_bundle_core.inhabited R B F ι = {default := trivial_vector_bundle_core R B F ι _inst_10}
Natural identification to a fiber_bundle_core
.
Equations
- Z.to_fiber_bundle_core = {base_set := Z.base_set, is_open_base_set := _, index_at := Z.index_at, mem_base_set_at := _, coord_change := λ (i j : ι) (b : B), ⇑(Z.coord_change i j b), coord_change_self := _, continuous_on_coord_change := _, coord_change_comp := _}
The index set of a vector bundle core, as a convenience function for dot notation
The base space of a vector bundle core, as a convenience function for dot notation
The fiber of a vector bundle core, as a convenience function for dot notation and typeclass inference
Equations
Equations
Equations
- Z.add_comm_monoid_fiber = id (λ (x : B), add_comm_group.to_add_comm_monoid F)
Equations
- Z.module_fiber = id (λ (x : B), normed_space.to_module)
Equations
- Z.add_comm_group_fiber = id (λ (x : B), _inst_10)
The projection from the total space of a fiber bundle core, on its base.
Equations
The total space of the vector bundle, as a convenience function for dot notation.
It is by definition equal to bundle.total_space Z.fiber
.
Equations
- Z.total_space = bundle.total_space F Z.fiber
Local homeomorphism version of the trivialization change.
Equations
- Z.triv_change i j = ↑Z.triv_change i j
Topological structure on the total space of a vector bundle created from core, designed so that all the local trivialization are continuous.
Equations
One of the standard local trivializations of a vector bundle constructed from core, taken by considering this in particular as a fiber bundle constructed from core.
Equations
- Z.local_triv i = id (Z.to_fiber_bundle_core.local_triv i)
Instances for vector_bundle_core.local_triv
The standard local trivializations of a vector bundle constructed from core are linear.
Preferred local trivialization of a vector bundle constructed from core, at a given point, as a bundle trivialization
Equations
- Z.local_triv_at b = Z.local_triv (Z.index_at b)
Equations
The projection on the base of a vector bundle created from core is continuous
The projection on the base of a vector bundle created from core is an open map
Vector prebundle #
- pretrivialization_atlas : set (pretrivialization F bundle.total_space.proj)
- pretrivialization_linear' : ∀ (e : pretrivialization F bundle.total_space.proj), e ∈ self.pretrivialization_atlas → pretrivialization.is_linear R e
- pretrivialization_at : B → pretrivialization F bundle.total_space.proj
- mem_base_pretrivialization_at : ∀ (x : B), x ∈ (self.pretrivialization_at x).base_set
- pretrivialization_mem_atlas : ∀ (x : B), self.pretrivialization_at x ∈ self.pretrivialization_atlas
- exists_coord_change : ∀ (e : pretrivialization F bundle.total_space.proj), e ∈ self.pretrivialization_atlas → ∀ (e' : pretrivialization F bundle.total_space.proj), e' ∈ self.pretrivialization_atlas → (∃ (f : B → (F →L[R] F)), continuous_on f (e.base_set ∩ e'.base_set) ∧ ∀ (b : B), b ∈ e.base_set ∩ e'.base_set → ∀ (v : F), ⇑(f b) v = (⇑e' {proj := b, snd := e.symm b v}).snd)
- total_space_mk_inducing : ∀ (b : B), inducing (⇑(self.pretrivialization_at b) ∘ bundle.total_space.mk b)
This structure permits to define a vector bundle when trivializations are given as local equivalences but there is not yet a topology on the total space or the fibers. The total space is hence given a topology in such a way that there is a fiber bundle structure for which the local equivalences are also local homeomorphisms and hence vector bundle trivializations. The topology on the fibers is induced from the one on the total space.
The field exists_coord_change
is stated as an existential statement (instead of 3 separate
fields), since it depends on propositional information (namely e e' ∈ pretrivialization_atlas
).
This makes it inconvenient to explicitly define a coord_change
function when constructing a
vector_prebundle
.
Instances for vector_prebundle
- vector_prebundle.has_sizeof_inst
A randomly chosen coordinate change on a vector_prebundle
, given by
the field exists_coord_change
.
Equations
- a.coord_change he he' b = classical.some _ b
Natural identification of vector_prebundle
as a fiber_prebundle
.
Equations
Topology on the total space that will make the prebundle into a bundle.
Equations
Promotion from a trivialization
in the pretrivialization_atlas
of a
vector_prebundle
to a trivialization
.
Make a fiber_bundle
from a vector_prebundle
; auxiliary construction for
vector_prebundle.vector_bundle
.
Equations
Make a vector_bundle
from a vector_prebundle
. Concretely this means
that, given a vector_prebundle
structure for a sigma-type E
-- which consists of a
number of "pretrivializations" identifying parts of E
with product spaces U × F
-- one
establishes that for the topology constructed on the sigma-type using
vector_prebundle.total_space_topology
, these "pretrivializations" are actually
"trivializations" (i.e., homeomorphisms with respect to the constructed topology).
When ϕ
is a continuous (semi)linear map between the fibers E x
and E' y
of two vector
bundles E
and E'
, continuous_linear_map.in_coordinates F E F' E' x₀ x y₀ y ϕ
is a coordinate
change of this continuous linear map w.r.t. the chart around x₀
and the chart around y₀
.
It is defined by composing ϕ
with appropriate coordinate changes given by the vector bundles
E
and E'
.
We use the operations trivialization.continuous_linear_map_at
and trivialization.symmL
in the
definition, instead of trivialization.continuous_linear_equiv_at
, so that
continuous_linear_map.in_coordinates
is defined everywhere (but see
continuous_linear_map.in_coordinates_eq
).
This is the (second component of the) underlying function of a trivialization of the hom-bundle
(see hom_trivialization_at_apply
). However, note that continuous_linear_map.in_coordinates
is
defined even when x
and y
live in different base sets.
Therefore, it is is also convenient when working with the hom-bundle between pulled back bundles.
Equations
- continuous_linear_map.in_coordinates F E F' E' x₀ x y₀ y ϕ = (trivialization.continuous_linear_map_at 𝕜₂ (fiber_bundle.trivialization_at F' E' y₀) y).comp (ϕ.comp (trivialization.symmL 𝕜₁ (fiber_bundle.trivialization_at F E x₀) x))
rewrite in_coordinates
using continuous linear equivalences.
rewrite in_coordinates
in a vector_bundle_core
.