Vector Field Modules¶
The set of vector fields along a differentiable manifold \(U\) with values on a differentiable manifold \(M\) via a differentiable map \(\Phi: U \to M\) (possibly \(U = M\) and \(\Phi=\mathrm{Id}_M\)) is a module over the algebra \(C^k(U)\) of differentiable scalar fields on \(U\). If \(\Phi\) is the identity map, this module is considered a Lie algebroid under the Lie bracket \([\ ,\ ]\) (cf. Wikipedia article Lie_algebroid). It is a free module if and only if \(M\) is parallelizable. Accordingly, there are two classes for vector field modules:
VectorFieldModule
for vector fields with values on a generic (in practice, not parallelizable) differentiable manifold \(M\).VectorFieldFreeModule
for vector fields with values on a parallelizable manifold \(M\).
AUTHORS:
- Eric Gourgoulhon, Michal Bejger (2014-2015): initial version
- Travis Scrimshaw (2016): structure of Lie algebroid (trac ticket #20771)
REFERENCES:
-
sage.manifolds.differentiable.vectorfield_module.
VectorFieldFreeModule
¶ Free module of vector fields along a differentiable manifold \(U\) with values on a parallelizable manifold \(M\), via a differentiable map \(U \rightarrow M\).
Given a differentiable map
\[\Phi:\ U \longrightarrow M\]the vector field module \(\mathfrak{X}(U,\Phi)\) is the set of all vector fields of the type
\[v:\ U \longrightarrow TM\](where \(TM\) is the tangent bundle of \(M\)) such that
\[\forall p \in U,\ v(p) \in T_{\Phi(p)} M,\]where \(T_{\Phi(p)} M\) is the tangent space to \(M\) at the point \(\Phi(p)\).
Since \(M\) is parallelizable, the set \(\mathfrak{X}(U,\Phi)\) is a free module over \(C^k(U)\), the ring (algebra) of differentiable scalar fields on \(U\) (see
DiffScalarFieldAlgebra
). In fact, it carries the structure of a finite-dimensional Lie algebroid (cf. Wikipedia article Lie_algebroid).The standard case of vector fields on a differentiable manifold corresponds to \(U=M\) and \(\Phi = \mathrm{Id}_M\); we then denote \(\mathfrak{X}(M,\mathrm{Id}_M)\) by merely \(\mathfrak{X}(M)\). Other common cases are \(\Phi\) being an immersion and \(\Phi\) being a curve in \(M\) (\(U\) is then an open interval of \(\RR\)).
Note
If \(M\) is not parallelizable, the class
VectorFieldModule
should be used instead, for \(\mathfrak{X}(U,\Phi)\) is no longer a free module.INPUT:
domain
– differentiable manifold \(U\) along which the vector fields are defineddest_map
– (default:None
) destination map \(\Phi:\ U \rightarrow M\) (type:DiffMap
); ifNone
, it is assumed that \(U=M\) and \(\Phi\) is the identity map of \(M\) (case of vector fields on \(M\))
EXAMPLES:
Module of vector fields on \(\RR^2\):
sage: M = Manifold(2, 'R^2') sage: cart.<x,y> = M.chart() # Cartesian coordinates on R^2 sage: XM = M.vector_field_module() ; XM Free module X(R^2) of vector fields on the 2-dimensional differentiable manifold R^2 sage: XM.category() Category of finite dimensional modules over Algebra of differentiable scalar fields on the 2-dimensional differentiable manifold R^2 sage: XM.base_ring() is M.scalar_field_algebra() True
Since \(\RR^2\) is obviously parallelizable,
XM
is a free module:sage: isinstance(XM, FiniteRankFreeModule) True
Some elements:
sage: XM.an_element().display() 2 d/dx + 2 d/dy sage: XM.zero().display() zero = 0 sage: v = XM([-y,x]) ; v Vector field on the 2-dimensional differentiable manifold R^2 sage: v.display() -y d/dx + x d/dy
An example of module of vector fields with a destination map \(\Phi\) different from the identity map, namely a mapping \(\Phi: I \rightarrow \RR^2\), where \(I\) is an open interval of \(\RR\):
sage: I = Manifold(1, 'I') sage: canon.<t> = I.chart('t:(0,2*pi)') sage: Phi = I.diff_map(M, coord_functions=[cos(t), sin(t)], name='Phi', ....: latex_name=r'\Phi') ; Phi Differentiable map Phi from the 1-dimensional differentiable manifold I to the 2-dimensional differentiable manifold R^2 sage: Phi.display() Phi: I --> R^2 t |--> (x, y) = (cos(t), sin(t)) sage: XIM = I.vector_field_module(dest_map=Phi) ; XIM Free module X(I,Phi) of vector fields along the 1-dimensional differentiable manifold I mapped into the 2-dimensional differentiable manifold R^2 sage: XIM.category() Category of finite dimensional modules over Algebra of differentiable scalar fields on the 1-dimensional differentiable manifold I
The rank of the free module \(\mathfrak{X}(I,\Phi)\) is the dimension of the manifold \(\RR^2\), namely two:
sage: XIM.rank() 2
A basis of it is induced by the coordinate vector frame of \(\RR^2\):
sage: XIM.bases() [Vector frame (I, (d/dx,d/dy)) with values on the 2-dimensional differentiable manifold R^2]
Some elements of this module:
sage: XIM.an_element().display() 2 d/dx + 2 d/dy sage: v = XIM([t, t^2]) ; v Vector field along the 1-dimensional differentiable manifold I with values on the 2-dimensional differentiable manifold R^2 sage: v.display() t d/dx + t^2 d/dy
The test suite is passed:
sage: TestSuite(XIM).run()
Let us introduce an open subset of \(J\subset I\) and the vector field module corresponding to the restriction of \(\Phi\) to it:
sage: J = I.open_subset('J', coord_def= {canon: t<pi}) sage: XJM = J.vector_field_module(dest_map=Phi.restrict(J)); XJM Free module X(J,Phi) of vector fields along the Open subset J of the 1-dimensional differentiable manifold I mapped into the 2-dimensional differentiable manifold R^2
We have then:
sage: XJM.default_basis() Vector frame (J, (d/dx,d/dy)) with values on the 2-dimensional differentiable manifold R^2 sage: XJM.default_basis() is XIM.default_basis().restrict(J) True sage: v.restrict(J) Vector field along the Open subset J of the 1-dimensional differentiable manifold I with values on the 2-dimensional differentiable manifold R^2 sage: v.restrict(J).display() t d/dx + t^2 d/dy
Let us now consider the module of vector fields on the circle \(S^1\); we start by constructing the \(S^1\) manifold:
sage: M = Manifold(1, 'S^1') sage: U = M.open_subset('U') # the complement of one point sage: c_t.<t> = U.chart('t:(0,2*pi)') # the standard angle coordinate sage: V = M.open_subset('V') # the complement of the point t=pi sage: M.declare_union(U,V) # S^1 is the union of U and V sage: c_u.<u> = V.chart('u:(0,2*pi)') # the angle t-pi sage: t_to_u = c_t.transition_map(c_u, (t-pi,), intersection_name='W', ....: restrictions1 = t!=pi, restrictions2 = u!=pi) sage: u_to_t = t_to_u.inverse() sage: W = U.intersection(V)
\(S^1\) cannot be covered by a single chart, so it cannot be covered by a coordinate frame. It is however parallelizable and we introduce a global vector frame as follows. We notice that on their common subdomain, \(W\), the coordinate vectors \(\partial/\partial t\) and \(\partial/\partial u\) coincide, as we can check explicitly:
sage: c_t.frame()[0].display(c_u.frame().restrict(W)) d/dt = d/du
Therefore, we can extend \(\partial/\partial t\) to all \(V\) and hence to all \(S^1\), to form a vector field on \(S^1\) whose components w.r.t. both \(\partial/\partial t\) and \(\partial/\partial u\) are 1:
sage: e = M.vector_frame('e') sage: U.set_change_of_frame(e.restrict(U), c_t.frame(), ....: U.tangent_identity_field()) sage: V.set_change_of_frame(e.restrict(V), c_u.frame(), ....: V.tangent_identity_field()) sage: e[0].display(c_t.frame()) e_0 = d/dt sage: e[0].display(c_u.frame()) e_0 = d/du
Equipped with the frame \(e\), the manifold \(S^1\) is manifestly parallelizable:
sage: M.is_manifestly_parallelizable() True
Consequently, the module of vector fields on \(S^1\) is a free module:
sage: XM = M.vector_field_module() ; XM Free module X(S^1) of vector fields on the 1-dimensional differentiable manifold S^1 sage: isinstance(XM, FiniteRankFreeModule) True sage: XM.category() Category of finite dimensional modules over Algebra of differentiable scalar fields on the 1-dimensional differentiable manifold S^1 sage: XM.base_ring() is M.scalar_field_algebra() True
The zero element:
sage: z = XM.zero() ; z Vector field zero on the 1-dimensional differentiable manifold S^1 sage: z.display() zero = 0 sage: z.display(c_t.frame()) zero = 0
The module \(\mathfrak{X}(S^1)\) coerces to any module of vector fields defined on a subdomain of \(S^1\), for instance \(\mathfrak{X}(U)\):
sage: XU = U.vector_field_module() ; XU Free module X(U) of vector fields on the Open subset U of the 1-dimensional differentiable manifold S^1 sage: XU.has_coerce_map_from(XM) True sage: XU.coerce_map_from(XM) Coercion map: From: Free module X(S^1) of vector fields on the 1-dimensional differentiable manifold S^1 To: Free module X(U) of vector fields on the Open subset U of the 1-dimensional differentiable manifold S^1
The conversion map is actually the restriction of vector fields defined on \(S^1\) to \(U\).
The Sage test suite for modules is passed:
sage: TestSuite(XM).run()
-
sage.manifolds.differentiable.vectorfield_module.
VectorFieldModule
¶ Module of vector fields along a differentiable manifold \(U\) with values on a differentiable manifold \(M\), via a differentiable map \(U \rightarrow M\).
Given a differentiable map
\[\Phi:\ U \longrightarrow M,\]the vector field module \(\mathfrak{X}(U,\Phi)\) is the set of all vector fields of the type
\[v:\ U \longrightarrow TM\](where \(TM\) is the tangent bundle of \(M\)) such that
\[\forall p \in U,\ v(p) \in T_{\Phi(p)}M,\]where \(T_{\Phi(p)}M\) is the tangent space to \(M\) at the point \(\Phi(p)\).
The set \(\mathfrak{X}(U,\Phi)\) is a module over \(C^k(U)\), the ring (algebra) of differentiable scalar fields on \(U\) (see
DiffScalarFieldAlgebra
). Furthermore, it is a Lie algebroid under the Lie bracket (cf. Wikipedia article Lie_algebroid)\[[X, Y] = X \circ Y - Y \circ X\]over the scalarfields if \(\Phi\) is the identity map. That is to say the Lie bracket is antisymmetric, bilinear over the base field, satisfies the Jacobi identity, and \([X, fY] = X(f) Y + f[X, Y]\).
The standard case of vector fields on a differentiable manifold corresponds to \(U = M\) and \(\Phi = \mathrm{Id}_M\); we then denote \(\mathfrak{X}(M,\mathrm{Id}_M)\) by merely \(\mathfrak{X}(M)\). Other common cases are \(\Phi\) being an immersion and \(\Phi\) being a curve in \(M\) (\(U\) is then an open interval of \(\RR\)).
Note
If \(M\) is parallelizable, the class
VectorFieldFreeModule
should be used instead.INPUT:
domain
– differentiable manifold \(U\) along which the vector fields are defineddest_map
– (default:None
) destination map \(\Phi:\ U \rightarrow M\) (type:DiffMap
); ifNone
, it is assumed that \(U = M\) and \(\Phi\) is the identity map of \(M\) (case of vector fields on \(M\))
EXAMPLES:
Module of vector fields on the 2-sphere:
sage: M = Manifold(2, 'M') # the 2-dimensional sphere S^2 sage: U = M.open_subset('U') # complement of the North pole sage: c_xy.<x,y> = U.chart() # stereographic coordinates from the North pole sage: V = M.open_subset('V') # complement of the South pole sage: c_uv.<u,v> = V.chart() # stereographic coordinates from the South pole sage: M.declare_union(U,V) # S^2 is the union of U and V sage: xy_to_uv = c_xy.transition_map(c_uv, (x/(x^2+y^2), y/(x^2+y^2)), ....: intersection_name='W', restrictions1= x^2+y^2!=0, ....: restrictions2= u^2+v^2!=0) sage: uv_to_xy = xy_to_uv.inverse() sage: XM = M.vector_field_module() ; XM Module X(M) of vector fields on the 2-dimensional differentiable manifold M
\(\mathfrak{X}(M)\) is a module over the algebra \(C^k(M)\):
sage: XM.category() Category of modules over Algebra of differentiable scalar fields on the 2-dimensional differentiable manifold M sage: XM.base_ring() is M.scalar_field_algebra() True
\(\mathfrak{X}(M)\) is not a free module:
sage: isinstance(XM, FiniteRankFreeModule) False
because \(M = S^2\) is not parallelizable:
sage: M.is_manifestly_parallelizable() False
On the contrary, the module of vector fields on \(U\) is a free module, since \(U\) is parallelizable (being a coordinate domain):
sage: XU = U.vector_field_module() sage: isinstance(XU, FiniteRankFreeModule) True sage: U.is_manifestly_parallelizable() True
The zero element of the module:
sage: z = XM.zero() ; z Vector field zero on the 2-dimensional differentiable manifold M sage: z.display(c_xy.frame()) zero = 0 sage: z.display(c_uv.frame()) zero = 0
The module \(\mathfrak{X}(M)\) coerces to any module of vector fields defined on a subdomain of \(M\), for instance \(\mathfrak{X}(U)\):
sage: XU.has_coerce_map_from(XM) True sage: XU.coerce_map_from(XM) Coercion map: From: Module X(M) of vector fields on the 2-dimensional differentiable manifold M To: Free module X(U) of vector fields on the Open subset U of the 2-dimensional differentiable manifold M
The conversion map is actually the restriction of vector fields defined on \(M\) to \(U\).