Multivector Field Modules

The set Ap(U,Φ) of p-vector fields along a differentiable manifold U with values on a differentiable manifold M via a differentiable map Φ: UM (possibly U=M and Φ=IdM) is a module over the algebra Ck(U) of differentiable scalar fields on U. It is a free module if and only if M is parallelizable. Accordingly, two classes implement Ap(U,Φ):

  • 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 Φ:UM to a parallelizable manifold M of dimension n, the set Ap(U,Φ) 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 (np) over Ck(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 Φ=IdM. Other common cases are Φ being an immersion and Φ being a curve in M (U is then an open interval of R).

Note

This class implements Ap(U,Φ) in the case where M is parallelizable; Ap(U,Φ) is then a free module. If M is not parallelizable, the class MultivectorModule must be used instead.

INPUT:

  • vector_field_module – free module X(U,Φ) of vector fields along U associated with the map Φ:UV
  • degree – positive integer; the degree p of the multivector fields

EXAMPLES:

Free module of 2-vector fields on a parallelizable 3-dimensional 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 3-dimensional
 differentiable manifold M
sage: A = M.multivector_module(2) ; A
Free module A^2(M) of 2-vector fields on the 3-dimensional
 differentiable manifold M
sage: latex(A)
A^{2}\left(M\right)

A is nothing but the second exterior power of XM, i.e. we have A2(M)=Λ2(X(M)) (see ExtPowerFreeModule):

sage: A is XM.exterior_power(2)
True

A2(M) is a module over the algebra Ck(M) of (differentiable) scalar fields on M:

sage: A.category()
Category of finite dimensional modules over Algebra of
 differentiable scalar fields on the 3-dimensional
 differentiable manifold M
sage: CM = M.scalar_field_algebra() ; CM
Algebra of differentiable scalar fields on the 3-dimensional
 differentiable manifold M
sage: A in Modules(CM)
True
sage: A.base_ring()
Algebra of differentiable scalar fields on
 the 3-dimensional differentiable manifold M
sage: A.base_module()
Free module X(M) of vector fields on
 the 3-dimensional 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)
2-vector field zero on the 3-dimensional differentiable
 manifold M
sage: A(0) is A.zero()
True

while non-zero 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
2-vector field a on the 3-dimensional 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 2-vector 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 A1(M) is nothing but 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 3-dimensional
 differentiable manifold M
sage: A1 is XM
True

There is a coercion map Ap(M)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
 3-dimensional 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 A2(M)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
 3-dimensional differentiable manifold M
sage: ta = T20(a) ; ta
Tensor field a of type (2,0) on the 3-dimensional 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 2-vector fields on the Open subset U of the
 3-dimensional differentiable manifold M
sage: B.has_coerce_map_from(A)
True
sage: a_U = B(a) ; a_U
2-vector field a on the Open subset U of the 3-dimensional
 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 sage.manifolds.differentiable.multivectorfield.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 Φ:UM to a differentiable manifold M, the set Ap(U,Φ) of p-vector fields (i.e. alternating tensor fields of type (p,0)) along U with values on M is a module over Ck(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 Φ=IdM. Other common cases are Φ being an immersion and Φ being a curve in M (U is then an open interval of R).

Note

This class implements Ap(U,Φ) in the case where M is not assumed to be parallelizable; the module Ap(U,Φ) is then not necessarily free. If M is parallelizable, the class MultivectorFreeModule must be used instead.

INPUT:

  • vector_field_module – module X(U,Φ) of vector fields along U with values on M via the map Φ:UM
  • degree – positive integer; the degree p of the multivector fields

EXAMPLES:

Module of 2-vector fields on a non-parallelizable 2-dimensional 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, x-y),
....:  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 2-dimensional differentiable
 manifold M
sage: A = M.multivector_module(2) ; A
Module A^2(M) of 2-vector fields on the 2-dimensional
 differentiable manifold M
sage: latex(A)
A^{2}\left(M\right)

A is nothing but the second exterior power of of XM, i.e. we have A2(M)=Λ2(X(M)):

sage: A is XM.exterior_power(2)
True

Modules of multivector fields are unique:

sage: A is M.multivector_module(2)
True

A2(M) is a module over the algebra Ck(M) of (differentiable) scalar fields on M:

sage: A.category()
Category of modules over Algebra of differentiable scalar fields
 on the 2-dimensional differentiable manifold M
sage: CM = M.scalar_field_algebra() ; CM
Algebra of differentiable scalar fields on the 2-dimensional
 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 2-dimensional differentiable
 manifold M
sage: A.base_module() is XM
True

Elements can be constructed from A(). In particular, 0 yields the zero element of A:

sage: z = A(0) ; z
2-vector field zero on the 2-dimensional differentiable
 manifold M
sage: z.display(eU)
zero = 0
sage: z.display(eV)
zero = 0
sage: z is A.zero()
True

while non-zero 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
2-vector field a on the 2-dimensional 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 2-vector 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 A1(M) is nothing but the dual of X(M) (the module of vector fields on M):

sage: A1 = M.multivector_module(1) ; A1
Module X(M) of vector fields on the 2-dimensional differentiable
 manifold M
sage: A1 is XM
True

There is a coercion map Ap(M)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
 2-dimensional 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 A2(M)T(2,0)(M) in action:

sage: ta = T20(a) ; ta
Tensor field a of type (2,0) on the 2-dimensional 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 2-vector fields on the Open subset U of
 the 2-dimensional differentiable manifold M
sage: A2U.has_coerce_map_from(A)
True
sage: a_U = A2U(a) ; a_U
2-vector field a on the Open subset U of the 2-dimensional
 differentiable manifold M
sage: a_U.display(eU)
a = 3*x d/dx/\d/dy
Element

alias of sage.manifolds.differentiable.multivectorfield.MultivectorField

base_module()

Return the vector field module on which the multivector field module self is constructed.

OUTPUT:

EXAMPLES:

sage: M = Manifold(3, 'M')
sage: A2 = M.multivector_module(2) ; A2
Module A^2(M) of 2-vector fields on the 3-dimensional
 differentiable manifold M
sage: A2.base_module()
Module X(M) of vector fields on the 3-dimensional
 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 2-vector fields on the Open subset U of the
 3-dimensional differentiable manifold M
sage: A2U.base_module()
Module X(U) of vector fields on the Open subset U of the
 3-dimensional differentiable manifold M
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
zero()

Return the zero of self.

EXAMPLES:

sage: M = Manifold(3, 'M')
sage: A2 = M.multivector_module(2)
sage: A2.zero()
2-vector field zero on the 3-dimensional differentiable
 manifold M