Vector Field Modules¶
The set of vector fields along a differentiable manifold
with values on
a differentiable manifold
via a differentiable map
(possibly
and
) is a module over the algebra
of differentiable scalar fields on
. If
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
is
parallelizable. Accordingly, there are two classes for vector field modules:
VectorFieldModulefor vector fields with values on a generic (in practice, not parallelizable) differentiable manifold
.VectorFieldFreeModulefor vector fields with values on a parallelizable manifold
.
AUTHORS:
- Eric Gourgoulhon, Michal Bejger (2014-2015): initial version
- Travis Scrimshaw (2016): structure of Lie algebroid (trac ticket #20771)
REFERENCES:
- [KN1963]
- [Lee2013]
- [ONe1983]
-
class
sage.manifolds.differentiable.vectorfield_module.VectorFieldFreeModule(domain, dest_map=None)¶ Bases:
sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModuleFree module of vector fields along a differentiable manifold
with
values on a parallelizable manifold
, via a differentiable map
.Given a differentiable map

the vector field module
is the set of all vector
fields of the type
(where
is the tangent bundle of
) such that
where
is the tangent space to
at the point
.Since
is parallelizable, the set
is a
free module over
, the ring (algebra) of differentiable
scalar fields on
(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
and
; we then denote
by merely
. Other common
cases are
being an immersion and
being a curve in
(
is
then an open interval of
).Note
If
is not parallelizable, the class VectorFieldModuleshould be used instead, for
is no longer a
free module.INPUT:
domain– differentiable manifold
along which the vector fields
are defineddest_map– (default:None) destination map
(type: DiffMap); ifNone, it is assumed that
and
is the identity map of
(case of vector fields on
)
EXAMPLES:
Module of vector fields on
: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
is obviously parallelizable, XMis 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
different from the identity map, namely a mapping
, where
is an open interval of
: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
is the dimension
of the manifold
, namely two:sage: XIM.rank() 2
A basis of it is induced by the coordinate vector frame of
: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 now consider the module of vector fields on the circle
; we
start by constructing the
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)
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,
,
the coordinate vectors
and
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
to all
and hence to all
, to form a vector field on
whose components w.r.t. both
and
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
, the manifold
is manifestly
parallelizable:sage: M.is_manifestly_parallelizable() True
Consequently, the module of vector fields on
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
coerces to any module of vector fields
defined on a subdomain of
, for instance
: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) Conversion 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
to
.The Sage test suite for modules is passed:
sage: TestSuite(XM).run()-
Element¶ alias of
VectorFieldParal
-
ambient_domain()¶ Return the manifold in which the vector fields of
selftake their values.If the module is
, returns the codomain
of
.OUTPUT:
- a
DifferentiableManifoldrepresenting the manifold in which the vector fields ofselftake their values
EXAMPLES:
sage: M = Manifold(3, 'M') sage: X.<x,y,z> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.ambient_domain() 3-dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Y.<u,v> = U.chart() sage: Phi = U.diff_map(M, {(Y,X): [u+v, u-v, u*v]}, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.ambient_domain() 3-dimensional differentiable manifold M
- a
-
basis(symbol=None, latex_symbol=None, from_frame=None)¶ Define a basis of
self.A basis of the vector field module is actually a vector frame along the differentiable manifold
over which the vector field module
is defined.If the basis specified by the given symbol already exists, it is simply returned. If no argument is provided the module’s default basis is returned.
INPUT:
symbol– (string; default:None) a letter (of a few letters) to denote a generic element of the basis; ifNoneandfrom_frame = Nonethe module’s default basis is returnedlatex_symbol– (string; default:None) symbol to denote a generic element of the basis; ifNone, the value ofsymbolis usedfrom_frame– (default:None) vector frame
on the codomain
of the destination map
of self; the returned basis
is then such that for all
,
we have 
OUTPUT:
- a
VectorFramerepresenting a basis onself
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: e = XM.basis('e'); e Vector frame (M, (e_0,e_1))
See
VectorFramefor more examples and documentation.
-
destination_map()¶ Return the differential map associated to
self.The differential map associated to this module is the map

such that this module is the set
of all vector
fields of the type
(where
is the tangent bundle of
) such that
where
is the tangent space to
at the
point
.OUTPUT:
- a
DiffMaprepresenting the differential map
EXAMPLES:
sage: M = Manifold(3, 'M') sage: X.<x,y,z> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.destination_map() Identity map Id_M of the 3-dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Y.<u,v> = U.chart() sage: Phi = U.diff_map(M, {(Y,X): [u+v, u-v, u*v]}, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.destination_map() Differentiable map Phi from the 2-dimensional differentiable manifold U to the 3-dimensional differentiable manifold M
- a
-
domain()¶ Return the domain of the vector fields in
self.If the module is
, returns the domain
of
.OUTPUT:
- a
DifferentiableManifoldrepresenting the domain of the vector fields that belong to this module
EXAMPLES:
sage: M = Manifold(3, 'M') sage: X.<x,y,z> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.domain() 3-dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Y.<u,v> = U.chart() sage: Phi = U.diff_map(M, {(Y,X): [u+v, u-v, u*v]}, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.domain() 2-dimensional differentiable manifold U
- a
-
dual_exterior_power(p)¶ Return the
-th exterior power of the dual of self.If the vector field module is
, the
-th exterior power of its dual is the set
of
-forms along
with values on
. It is a module
over
, the ring (algebra) of differentiable scalar
fields on
.INPUT:
p– non-negative integer
OUTPUT:
- for
, a
DiffFormFreeModulerepresenting the module
; for
, the
base ring, i.e.
, is returned instead
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.dual_exterior_power(2) Free module /\^2(M) of 2-forms on the 2-dimensional differentiable manifold M sage: XM.dual_exterior_power(1) Free module /\^1(M) of 1-forms on the 2-dimensional differentiable manifold M sage: XM.dual_exterior_power(1) is XM.dual() True sage: XM.dual_exterior_power(0) Algebra of differentiable scalar fields on the 2-dimensional differentiable manifold M sage: XM.dual_exterior_power(0) is M.scalar_field_algebra() True
See also
DiffFormFreeModulefor more examples and documentation.
-
general_linear_group()¶ Return the general linear group of
self.If the vector field module is
, the general
linear group is the group
of
automorphisms of
. Note that an automorphism of
can also be viewed as a field along
of
automorphisms of the tangent spaces of
.OUTPUT:
- a
AutomorphismFieldParalGrouprepresenting
EXAMPLE:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.general_linear_group() General linear group of the Free module X(M) of vector fields on the 2-dimensional differentiable manifold M
See also
AutomorphismFieldParalGroupfor more examples and documentation.- a
-
metric(name, signature=None, latex_name=None)¶ Construct a pseudo-Riemannian metric (nondegenerate symmetric bilinear form) on the current vector field module.
A pseudo-Riemannian metric of the vector field module is actually a field of tangent-space non-degenerate symmetric bilinear forms along the manifold
on which the vector field module is defined.INPUT:
name– (string) name given to the metricsignature– (integer; default:None) signature
of the
metric:
, where
(resp.
) is the number of
positive terms (resp. number of negative terms) in any diagonal
writing of the metric components; if signatureis not provided,
is set to the manifold’s dimension (Riemannian signature)latex_name– (string; default:None) LaTeX symbol to denote the metric; ifNone, it is formed fromname
OUTPUT:
- instance of
PseudoRiemannianMetricParalrepresenting the defined pseudo-Riemannian metric.
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.metric('g') Riemannian metric g on the 2-dimensional differentiable manifold M sage: XM.metric('g', signature=0) Lorentzian metric g on the 2-dimensional differentiable manifold M
See also
PseudoRiemannianMetricParalfor more documentation.
-
sym_bilinear_form(name=None, latex_name=None)¶ Construct a symmetric bilinear form on
self.A symmetric bilinear form on the vector field module is actually a field of tangent-space symmetric bilinear forms along the differentiable manifold
over which the vector
field module is defined.INPUT:
name– string (default:None); name given to the automorphismlatex_name– string (default:None); LaTeX symbol to denote the automorphism; ifNone, the LaTeX symbol is set toname
OUTPUT:
- a
TensorFieldParalof tensor type
and symmetric
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.sym_bilinear_form(name='a') Field of symmetric bilinear forms a on the 2-dimensional differentiable manifold M
See also
TensorFieldParalfor more examples and documentation.
-
tensor(tensor_type, name=None, latex_name=None, sym=None, antisym=None, specific_type=None)¶ Construct a tensor on
self.The tensor is actually a tensor field along the differentiable manifold
over which selfis defined.INPUT:
tensor_type– pair (k,l) with k being the contravariant rank and l the covariant rankname– (string; default:None) name given to the tensorlatex_name– (string; default:None) LaTeX symbol to denote the tensor; if none is provided, the LaTeX symbol is set tonamesym– (default:None) a symmetry or a list of symmetries among the tensor arguments: each symmetry is described by a tuple containing the positions of the involved arguments, with the convention position=0 for the first argument; for instance:sym = (0,1)for a symmetry between the 1st and 2nd argumentssym = [(0,2), (1,3,4)]for a symmetry between the 1st and 3rd arguments and a symmetry between the 2nd, 4th and 5th arguments
antisym– (default:None) antisymmetry or list of antisymmetries among the arguments, with the same convention as forsymspecific_type– (default:None) specific subclass ofTensorFieldParalfor the output
OUTPUT:
- a
TensorFieldParalrepresenting the tensor defined onselfwith the provided characteristics
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.tensor((1,2), name='t') Tensor field t of type (1,2) on the 2-dimensional differentiable manifold M sage: XM.tensor((1,0), name='a') Vector field a on the 2-dimensional differentiable manifold M sage: XM.tensor((0,2), name='a', antisym=(0,1)) 2-form a on the 2-dimensional differentiable manifold M
See
TensorFieldParalfor more examples and documentation.
-
tensor_from_comp(tensor_type, comp, name=None, latex_name=None)¶ Construct a tensor on
selffrom a set of components.The tensor is actually a tensor field along the differentiable manifold
over which the vector field module is defined.
The tensor symmetries are deduced from those of the components.INPUT:
tensor_type– pair
with
being the contravariant
rank and
the covariant rankcomp–Components; the tensor components in a given basisname– string (default:None); name given to the tensorlatex_name– string (default:None); LaTeX symbol to denote the tensor; ifNone, the LaTeX symbol is set toname
OUTPUT:
- a
TensorFieldParalrepresenting the tensor defined on the vector field module with the provided characteristics
EXAMPLES:
A 2-dimensional set of components transformed into a type-
tensor field:sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() sage: XM = M.vector_field_module() sage: from sage.tensor.modules.comp import Components sage: comp = Components(M.scalar_field_algebra(), X.frame(), 2, ....: output_formatter=XM._output_formatter) sage: comp[:] = [[1+x, -y], [x*y, 2-y^2]] sage: t = XM.tensor_from_comp((1,1), comp, name='t'); t Tensor field t of type (1,1) on the 2-dimensional differentiable manifold M sage: t.display() t = (x + 1) d/dx*dx - y d/dx*dy + x*y d/dy*dx + (-y^2 + 2) d/dy*dy
The same set of components transformed into a type-
tensor field:sage: t = XM.tensor_from_comp((0,2), comp, name='t'); t Tensor field t of type (0,2) on the 2-dimensional differentiable manifold M sage: t.display() t = (x + 1) dx*dx - y dx*dy + x*y dy*dx + (-y^2 + 2) dy*dy
-
tensor_module(k, l)¶ Return the free module of all tensors of type
defined
on self.INPUT:
k– non-negative integer; the contravariant rank, the tensor type being
l– non-negative integer; the covariant rank, the tensor type being
OUTPUT:
- a
TensorFieldFreeModulerepresenting the free module of type-
tensors on the
vector field module
EXAMPLES:
A tensor field module on a 2-dimensional differentiable manifold:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.tensor_module(1,2) Free module T^(1,2)(M) of type-(1,2) tensors fields on the 2-dimensional differentiable manifold M
The special case of tensor fields of type (1,0):
sage: XM.tensor_module(1,0) Free module X(M) of vector fields on the 2-dimensional differentiable manifold M
The result is cached:
sage: XM.tensor_module(1,2) is XM.tensor_module(1,2) True sage: XM.tensor_module(1,0) is XM True
See also
TensorFieldFreeModulefor more examples and documentation.
-
class
sage.manifolds.differentiable.vectorfield_module.VectorFieldModule(domain, dest_map=None)¶ Bases:
sage.structure.unique_representation.UniqueRepresentation,sage.structure.parent.ParentModule of vector fields along a differentiable manifold
with values on a differentiable manifold
, via a differentiable
map
.Given a differentiable map

the vector field module
is the set of
all vector fields of the type
(where
is the tangent bundle of
) such that
where
is the tangent space to
at the point
.The set
is a module over
, the ring
(algebra) of differentiable scalar fields on
(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](../../../_images/math/fe9445cd77b777daf43a0b73847eb1d105e6fcdd.png)
over the scalarfields if
is the identity map. That is to say
the Lie bracket is antisymmetric, bilinear over the base field,
satisfies the Jacobi identity, and
.The standard case of vector fields on a differentiable manifold corresponds to
and
; we then denote
by merely
. Other common
cases are
being an immersion and
being a curve in
(
is then an open interval of
).Note
If
is parallelizable, the class VectorFieldFreeModuleshould be used instead.INPUT:
domain– differentiable manifold
along which the
vector fields are defineddest_map– (default:None) destination map
(type: DiffMap); ifNone, it is assumed that
and
is the identity
map of
(case of vector fields on
)
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
is a module over the algebra
: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
is not a free module:sage: isinstance(XM, FiniteRankFreeModule) False
because
is not parallelizable:sage: M.is_manifestly_parallelizable() False
On the contrary, the module of vector fields on
is a free module,
since
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
coerces to any module of vector fields defined
on a subdomain of
, for instance
:sage: XU.has_coerce_map_from(XM) True sage: XU.coerce_map_from(XM) Conversion 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
to
.-
Element¶ alias of
VectorField
-
alternating_form(degree, name=None, latex_name=None)¶ Construct an alternating form on the vector field module.
An alternating form on the vector field module is actually a differential form along the differentiable manifold
over which
the vector field module is defined.INPUT:
degree– the degree of the alternating form (i.e. its tensor rank)name– (string; optional) name given to the alternating formlatex_name– (string; optional) LaTeX symbol to denote the alternating form; if none is provided, the LaTeX symbol is set toname
OUTPUT:
- instance of
DiffForm
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.alternating_form(2, name='a') 2-form a on the 2-dimensional differentiable manifold M sage: XM.alternating_form(1, name='a') 1-form a on the 2-dimensional differentiable manifold M
See also
DiffFormfor more examples and documentation.
-
ambient_domain()¶ Return the manifold in which the vector fields of this module take their values.
If the module is
, returns the codomain
of
.OUTPUT:
- instance of
DifferentiableManifoldrepresenting the manifold in which the vector fields of this module take their values
EXAMPLES:
sage: M = Manifold(5, 'M') sage: XM = M.vector_field_module() sage: XM.ambient_domain() 5-dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Phi = U.diff_map(M, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.ambient_domain() 5-dimensional differentiable manifold M
- instance of
-
automorphism(name=None, latex_name=None)¶ Construct an automorphism of the vector field module.
An automorphism of the vector field module is actually a field of tangent-space automorphisms along the differentiable manifold
over which the vector field module is defined.INPUT:
name– (string; optional) name given to the automorphismlatex_name– (string; optional) LaTeX symbol to denote the automorphism; if none is provided, the LaTeX symbol is set toname
OUTPUT:
- instance of
AutomorphismField
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.automorphism() Field of tangent-space automorphisms on the 2-dimensional differentiable manifold M sage: XM.automorphism(name='a') Field of tangent-space automorphisms a on the 2-dimensional differentiable manifold M
See also
AutomorphismFieldfor more examples and documentation.
-
destination_map()¶ Return the differential map associated to this module.
The differential map associated to this module is the map

such that this module is the set
of all
vector fields of the type
(where
is the tangent bundle of
) such that
where
is the tangent space to
at the
point
.OUTPUT:
- instance of
DiffMaprepresenting the differential map
EXAMPLES:
sage: M = Manifold(5, 'M') sage: XM = M.vector_field_module() sage: XM.destination_map() Identity map Id_M of the 5-dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Phi = U.diff_map(M, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.destination_map() Differentiable map Phi from the 2-dimensional differentiable manifold U to the 5-dimensional differentiable manifold M
- instance of
-
domain()¶ Return the domain of the vector fields in this module.
If the module is
, returns the domain
of
.OUTPUT:
- instance of
DifferentiableManifoldrepresenting the domain of the vector fields that belong to this module
EXAMPLES:
sage: M = Manifold(5, 'M') sage: XM = M.vector_field_module() sage: XM.domain() 5-dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Phi = U.diff_map(M, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.domain() 2-dimensional differentiable manifold U
- instance of
-
dual()¶ Return the dual module.
EXAMPLE:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.dual() Module /\^1(M) of 1-forms on the 2-dimensional differentiable manifold M
-
dual_exterior_power(p)¶ Return the
-th exterior power of the dual of the vector field
module.If the vector field module is
, the
-th exterior power of its dual is the set
of
-forms along
with values on
. It is a module
over
, the ring (algebra) of differentiable scalar
fields on
.INPUT:
p– non-negative integer
OUTPUT:
- for
, instance of
DiffFormModulerepresenting the module
; for
, the
base ring, i.e.
, is returned instead
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.dual_exterior_power(2) Module /\^2(M) of 2-forms on the 2-dimensional differentiable manifold M sage: XM.dual_exterior_power(1) Module /\^1(M) of 1-forms on the 2-dimensional differentiable manifold M sage: XM.dual_exterior_power(1) is XM.dual() True sage: XM.dual_exterior_power(0) Algebra of differentiable scalar fields on the 2-dimensional differentiable manifold M sage: XM.dual_exterior_power(0) is M.scalar_field_algebra() True
See also
DiffFormModulefor more examples and documentation.
-
general_linear_group()¶ Return the general linear group of
self.If the vector field module is
, the general
linear group is the group
of
automorphisms of
. Note that an automorphism
of
can also be viewed as a field along
of automorphisms of the tangent spaces of
.OUTPUT:
- instance of class
AutomorphismFieldGrouprepresenting
EXAMPLE:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.general_linear_group() General linear group of the Module X(M) of vector fields on the 2-dimensional differentiable manifold M
See also
AutomorphismFieldGroupfor more examples and documentation.- instance of class
-
identity_map(name='Id', latex_name=None)¶ Construct the identity map on the vector field module.
The identity map on the vector field module is actually a field of tangent-space identity maps along the differentiable manifold
over which the vector field module is defined.INPUT:
name– (string; default:'Id') name given to the identity maplatex_name– (string; optional) LaTeX symbol to denote the identity map; if none is provided, the LaTeX symbol is set to'\mathrm{Id}'ifnameis'Id'and tonameotherwise
OUTPUT:
- instance of
AutomorphismField
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.identity_map() Field of tangent-space identity maps on the 2-dimensional differentiable manifold M
-
linear_form(name=None, latex_name=None)¶ Construct a linear form on the vector field module.
A linear form on the vector field module is actually a field of linear forms (i.e. a 1-form) along the differentiable manifold
over which the vector field module is defined.INPUT:
name– (string; optional) name given to the linear formlatex_name– (string; optional) LaTeX symbol to denote the linear form; if none is provided, the LaTeX symbol is set toname
OUTPUT:
- instance of
DiffForm
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.linear_form() 1-form on the 2-dimensional differentiable manifold M sage: XM.linear_form(name='a') 1-form a on the 2-dimensional differentiable manifold M
See also
DiffFormfor more examples and documentation.
-
metric(name, signature=None, latex_name=None)¶ Construct a pseudo-Riemannian metric (nondegenerate symmetric bilinear form) on the current vector field module.
A pseudo-Riemannian metric of the vector field module is actually a field of tangent-space non-degenerate symmetric bilinear forms along the manifold
on which the vector field module is defined.INPUT:
name– (string) name given to the metricsignature– (integer; default:None) signature
of the
metric:
, where
(resp.
) is the number of
positive terms (resp. number of negative terms) in any diagonal
writing of the metric components; if signatureis not provided,
is set to the manifold’s dimension (Riemannian signature)latex_name– (string; default:None) LaTeX symbol to denote the metric; ifNone, it is formed fromname
OUTPUT:
- instance of
PseudoRiemannianMetricrepresenting the defined pseudo-Riemannian metric.
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.metric('g') Riemannian metric g on the 2-dimensional differentiable manifold M sage: XM.metric('g', signature=0) Lorentzian metric g on the 2-dimensional differentiable manifold M
See also
PseudoRiemannianMetricfor more documentation.
-
tensor(tensor_type, name=None, latex_name=None, sym=None, antisym=None, specific_type=None)¶ Construct a tensor on
self.The tensor is actually a tensor field on the domain of the vector field module.
INPUT:
tensor_type– pair (k,l) with k being the contravariant rank and l the covariant rankname– (string; default:None) name given to the tensorlatex_name– (string; default:None) LaTeX symbol to denote the tensor; if none is provided, the LaTeX symbol is set tonamesym– (default:None) a symmetry or a list of symmetries among the tensor arguments: each symmetry is described by a tuple containing the positions of the involved arguments, with the convention position=0 for the first argument; for instance:sym=(0,1)for a symmetry between the 1st and 2nd argumentssym=[(0,2),(1,3,4)]for a symmetry between the 1st and 3rd arguments and a symmetry between the 2nd, 4th and 5th arguments
antisym– (default:None) antisymmetry or list of antisymmetries among the arguments, with the same convention as forsymspecific_type– (default:None) specific subclass ofTensorFieldfor the output
OUTPUT:
- instance of
TensorFieldrepresenting the tensor defined on the vector field module with the provided characteristics
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.tensor((1,2), name='t') Tensor field t of type (1,2) on the 2-dimensional differentiable manifold M sage: XM.tensor((1,0), name='a') Vector field a on the 2-dimensional differentiable manifold M sage: XM.tensor((0,2), name='a', antisym=(0,1)) 2-form a on the 2-dimensional differentiable manifold M
See also
TensorFieldfor more examples and documentation.
-
tensor_module(k, l)¶ Return the module of type-
tensors on self.INPUT:
k– non-negative integer; the contravariant rank, the tensor type being
l– non-negative integer; the covariant rank, the tensor type being
OUTPUT:
- instance of
TensorFieldModulerepresenting the module
of type-
tensors on the vector field module
EXAMPLES:
A tensor field module on a 2-dimensional differentiable manifold:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.tensor_module(1,2) Module T^(1,2)(M) of type-(1,2) tensors fields on the 2-dimensional differentiable manifold M
The special case of tensor fields of type (1,0):
sage: XM.tensor_module(1,0) Module X(M) of vector fields on the 2-dimensional differentiable manifold M
The result is cached:
sage: XM.tensor_module(1,2) is XM.tensor_module(1,2) True sage: XM.tensor_module(1,0) is XM True
See
TensorFieldModulefor more examples and documentation.
-
zero()¶ Return the zero of
self.EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.zero() Vector field zero on the 2-dimensional differentiable manifold M
