Multivector Field Modules¶
The set \(A^p(U, \Phi)\) of \(p\)vector fields along a differentiable manifold \(U\) with values on a differentiable manifold \(M\) via a differentiable map \(\Phi:\ U \rightarrow M\) (possibly \(U = M\) and \(\Phi = \mathrm{Id}_M\)) is a module over the algebra \(C^k(U)\) of differentiable scalar fields on \(U\). It is a free module if and only if \(M\) is parallelizable. Accordingly, two classes implement \(A^p(U,\Phi)\):
MultivectorModule
for \(p\)vector fields with values on a generic (in practice, not parallelizable) differentiable manifold \(M\)MultivectorFreeModule
for \(p\)vector fields with values on a parallelizable manifold \(M\)
AUTHORS:
 Eric Gourgoulhon (2017): initial version
REFERENCES:

class
sage.manifolds.differentiable.multivector_module.
MultivectorFreeModule
(vector_field_module, degree)¶ Bases:
sage.tensor.modules.ext_pow_free_module.ExtPowerFreeModule
Free module of multivector fields of a given degree \(p\) (\(p\)vector fields) along a differentiable manifold \(U\) with values on a parallelizable manifold \(M\).
Given a differentiable manifold \(U\) and a differentiable map \(\Phi:\; U \rightarrow M\) to a parallelizable manifold \(M\) of dimension \(n\), the set \(A^p(U, \Phi)\) of \(p\)vector fields (i.e. alternating tensor fields of type \((p,0)\)) along \(U\) with values on \(M\) is a free module of rank \(\binom{n}{p}\) over \(C^k(U)\), the commutative algebra of differentiable scalar fields on \(U\) (see
DiffScalarFieldAlgebra
). The standard case of \(p\)vector fields on a differentiable manifold \(M\) corresponds to \(U = M\) and \(\Phi = \mathrm{Id}_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
This class implements \(A^p(U, \Phi)\) in the case where \(M\) is parallelizable; \(A^p(U, \Phi)\) is then a free module. If \(M\) is not parallelizable, the class
MultivectorModule
must be used instead.INPUT:
vector_field_module
– free module \(\mathfrak{X}(U,\Phi)\) of vector fields along \(U\) associated with the map \(\Phi: U \rightarrow V\)degree
– positive integer; the degree \(p\) of the multivector fields
EXAMPLES:
Free module of 2vector fields on a parallelizable 3dimensional manifold:
sage: M = Manifold(3, 'M') sage: X.<x,y,z> = M.chart() sage: XM = M.vector_field_module() ; XM Free module X(M) of vector fields on the 3dimensional differentiable manifold M sage: A = M.multivector_module(2) ; A Free module A^2(M) of 2vector fields on the 3dimensional differentiable manifold M sage: latex(A) A^{2}\left(M\right)
A
is nothing but the second exterior power ofXM
, i.e. we have \(A^{2}(M) = \Lambda^2(\mathfrak{X}(M))\) (seeExtPowerFreeModule
):sage: A is XM.exterior_power(2) True
\(A^{2}(M)\) is a module over the algebra \(C^k(M)\) of (differentiable) scalar fields on \(M\):
sage: A.category() Category of finite dimensional modules over Algebra of differentiable scalar fields on the 3dimensional differentiable manifold M sage: CM = M.scalar_field_algebra() ; CM Algebra of differentiable scalar fields on the 3dimensional differentiable manifold M sage: A in Modules(CM) True sage: A.base_ring() Algebra of differentiable scalar fields on the 3dimensional differentiable manifold M sage: A.base_module() Free module X(M) of vector fields on the 3dimensional differentiable manifold M sage: A.base_module() is XM True sage: A.rank() 3
Elements can be constructed from \(A\). In particular,
0
yields the zero element of \(A\):sage: A(0) 2vector field zero on the 3dimensional differentiable manifold M sage: A(0) is A.zero() True
while nonzero elements are constructed by providing their components in a given vector frame:
sage: comp = [[0,3*x,z],[3*x,0,4],[z,4,0]] sage: a = A(comp, frame=X.frame(), name='a') ; a 2vector field a on the 3dimensional differentiable manifold M sage: a.display() a = 3*x d/dx/\d/dy  z d/dx/\d/dz + 4 d/dy/\d/dz
An alternative is to construct the 2vector field from an empty list of components and to set the nonzero nonredundant components afterwards:
sage: a = A([], name='a') sage: a[0,1] = 3*x # component in the manifold's default frame sage: a[0,2] = z sage: a[1,2] = 4 sage: a.display() a = 3*x d/dx/\d/dy  z d/dx/\d/dz + 4 d/dy/\d/dz
The module \(A^1(M)\) is nothing but \(\mathfrak{X}(M)\) (the free module of vector fields on \(M\)):
sage: A1 = M.multivector_module(1) ; A1 Free module X(M) of vector fields on the 3dimensional differentiable manifold M sage: A1 is XM True
There is a coercion map \(A^p(M) \rightarrow T^{(p,0)}(M)\):
sage: T20 = M.tensor_field_module((2,0)); T20 Free module T^(2,0)(M) of type(2,0) tensors fields on the 3dimensional differentiable manifold M sage: T20.has_coerce_map_from(A) True
but of course not in the reverse direction, since not all contravariant tensor field is alternating:
sage: A.has_coerce_map_from(T20) False
The coercion map \(A^2(M) \rightarrow T^{(2,0)}(M)\) in action:
sage: T20 = M.tensor_field_module((2,0)) ; T20 Free module T^(2,0)(M) of type(2,0) tensors fields on the 3dimensional differentiable manifold M sage: ta = T20(a) ; ta Tensor field a of type (2,0) on the 3dimensional differentiable manifold M sage: ta.display() a = 3*x d/dx*d/dy  z d/dx*d/dz  3*x d/dy*d/dx + 4 d/dy*d/dz + z d/dz*d/dx  4 d/dz*d/dy sage: a.display() a = 3*x d/dx/\d/dy  z d/dx/\d/dz + 4 d/dy/\d/dz sage: ta.symmetries() # the antisymmetry is preserved no symmetry; antisymmetry: (0, 1)
There is also coercion to subdomains, which is nothing but the restriction of the multivector field to some subset of its domain:
sage: U = M.open_subset('U', coord_def={X: x^2+y^2<1}) sage: B = U.multivector_module(2) ; B Free module A^2(U) of 2vector fields on the Open subset U of the 3dimensional differentiable manifold M sage: B.has_coerce_map_from(A) True sage: a_U = B(a) ; a_U 2vector field a on the Open subset U of the 3dimensional differentiable manifold M sage: a_U.display() a = 3*x d/dx/\d/dy  z d/dx/\d/dz + 4 d/dy/\d/dz

Element
¶ alias of
MultivectorFieldParal

class
sage.manifolds.differentiable.multivector_module.
MultivectorModule
(vector_field_module, degree)¶ Bases:
sage.structure.unique_representation.UniqueRepresentation
,sage.structure.parent.Parent
Module of multivector fields of a given degree \(p\) (\(p\)vector fields) along a differentiable manifold \(U\) with values on a differentiable manifold \(M\).
Given a differentiable manifold \(U\) and a differentiable map \(\Phi: U \rightarrow M\) to a differentiable manifold \(M\), the set \(A^p(U, \Phi)\) of \(p\)vector fields (i.e. alternating tensor fields of type \((p,0)\)) along \(U\) with values on \(M\) is a module over \(C^k(U)\), the commutative algebra of differentiable scalar fields on \(U\) (see
DiffScalarFieldAlgebra
). The standard case of \(p\)vector fields on a differentiable manifold \(M\) corresponds to \(U = M\) and \(\Phi = \mathrm{Id}_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
This class implements \(A^p(U,\Phi)\) in the case where \(M\) is not assumed to be parallelizable; the module \(A^p(U, \Phi)\) is then not necessarily free. If \(M\) is parallelizable, the class
MultivectorFreeModule
must be used instead.INPUT:
vector_field_module
– module \(\mathfrak{X}(U, \Phi)\) of vector fields along \(U\) with values on \(M\) via the map \(\Phi: U \rightarrow M\)degree
– positive integer; the degree \(p\) of the multivector fields
EXAMPLES:
Module of 2vector fields on a nonparallelizable 2dimensional manifold:
sage: M = Manifold(2, 'M') sage: U = M.open_subset('U') ; V = M.open_subset('V') sage: M.declare_union(U,V) # M is the union of U and V sage: c_xy.<x,y> = U.chart() ; c_uv.<u,v> = V.chart() sage: transf = c_xy.transition_map(c_uv, (x+y, xy), ....: intersection_name='W', restrictions1= x>0, ....: restrictions2= u+v>0) sage: inv = transf.inverse() sage: W = U.intersection(V) sage: eU = c_xy.frame() ; eV = c_uv.frame() sage: XM = M.vector_field_module() ; XM Module X(M) of vector fields on the 2dimensional differentiable manifold M sage: A = M.multivector_module(2) ; A Module A^2(M) of 2vector fields on the 2dimensional differentiable manifold M sage: latex(A) A^{2}\left(M\right)
A
is nothing but the second exterior power of ofXM
, i.e. we have \(A^{2}(M) = \Lambda^2(\mathfrak{X}(M))\):sage: A is XM.exterior_power(2) True
Modules of multivector fields are unique:
sage: A is M.multivector_module(2) True
\(A^2(M)\) is a module over the algebra \(C^k(M)\) of (differentiable) scalar fields on \(M\):
sage: A.category() Category of modules over Algebra of differentiable scalar fields on the 2dimensional differentiable manifold M sage: CM = M.scalar_field_algebra() ; CM Algebra of differentiable scalar fields on the 2dimensional differentiable manifold M sage: A in Modules(CM) True sage: A.base_ring() is CM True sage: A.base_module() Module X(M) of vector fields on the 2dimensional differentiable manifold M sage: A.base_module() is XM True
Elements can be constructed from
A()
. In particular,0
yields the zero element ofA
:sage: z = A(0) ; z 2vector field zero on the 2dimensional differentiable manifold M sage: z.display(eU) zero = 0 sage: z.display(eV) zero = 0 sage: z is A.zero() True
while nonzero elements are constructed by providing their components in a given vector frame:
sage: a = A([[0,3*x],[3*x,0]], frame=eU, name='a') ; a 2vector field a on the 2dimensional differentiable manifold M sage: a.add_comp_by_continuation(eV, W, c_uv) # finishes initializ. of a sage: a.display(eU) a = 3*x d/dx/\d/dy sage: a.display(eV) a = (3*u  3*v) d/du/\d/dv
An alternative is to construct the 2vector field from an empty list of components and to set the nonzero nonredundant components afterwards:
sage: a = A([], name='a') sage: a[eU,0,1] = 3*x sage: a.add_comp_by_continuation(eV, W, c_uv) sage: a.display(eU) a = 3*x d/dx/\d/dy sage: a.display(eV) a = (3*u  3*v) d/du/\d/dv
The module \(A^1(M)\) is nothing but the dual of \(\mathfrak{X}(M)\) (the module of vector fields on \(M\)):
sage: A1 = M.multivector_module(1) ; A1 Module X(M) of vector fields on the 2dimensional differentiable manifold M sage: A1 is XM True
There is a coercion map \(A^p(M)\rightarrow T^{(p,0)}(M)\):
sage: T20 = M.tensor_field_module((2,0)) ; T20 Module T^(2,0)(M) of type(2,0) tensors fields on the 2dimensional differentiable manifold M sage: T20.has_coerce_map_from(A) True
but of course not in the reverse direction, since not all contravariant tensor field is alternating:
sage: A.has_coerce_map_from(T20) False
The coercion map \(A^2(M) \rightarrow T^{(2,0)}(M)\) in action:
sage: ta = T20(a) ; ta Tensor field a of type (2,0) on the 2dimensional differentiable manifold M sage: ta.display(eU) a = 3*x d/dx*d/dy  3*x d/dy*d/dx sage: a.display(eU) a = 3*x d/dx/\d/dy sage: ta.display(eV) a = (3*u  3*v) d/du*d/dv + (3*u + 3*v) d/dv*d/du sage: a.display(eV) a = (3*u  3*v) d/du/\d/dv
There is also coercion to subdomains, which is nothing but the restriction of the multivector field to some subset of its domain:
sage: A2U = U.multivector_module(2) ; A2U Free module A^2(U) of 2vector fields on the Open subset U of the 2dimensional differentiable manifold M sage: A2U.has_coerce_map_from(A) True sage: a_U = A2U(a) ; a_U 2vector field a on the Open subset U of the 2dimensional differentiable manifold M sage: a_U.display(eU) a = 3*x d/dx/\d/dy

Element
¶ alias of
MultivectorField

base_module
()¶ Return the vector field module on which the multivector field module
self
is constructed.OUTPUT:
 a
VectorFieldModule
representing the module on whichself
is defined
EXAMPLES:
sage: M = Manifold(3, 'M') sage: A2 = M.multivector_module(2) ; A2 Module A^2(M) of 2vector fields on the 3dimensional differentiable manifold M sage: A2.base_module() Module X(M) of vector fields on the 3dimensional differentiable manifold M sage: A2.base_module() is M.vector_field_module() True sage: U = M.open_subset('U') sage: A2U = U.multivector_module(2) ; A2U Module A^2(U) of 2vector fields on the Open subset U of the 3dimensional differentiable manifold M sage: A2U.base_module() Module X(U) of vector fields on the Open subset U of the 3dimensional differentiable manifold M
 a

degree
()¶ Return the degree of the multivector fields in
self
.OUTPUT:
 integer \(p\) such that
self
is a set of \(p\)vector fields
EXAMPLES:
sage: M = Manifold(3, 'M') sage: M.multivector_module(2).degree() 2 sage: M.multivector_module(3).degree() 3
 integer \(p\) such that

zero
()¶ Return the zero of
self
.EXAMPLES:
sage: M = Manifold(3, 'M') sage: A2 = M.multivector_module(2) sage: A2.zero() 2vector field zero on the 3dimensional differentiable manifold M