Differential Form Modules¶
The set of
-forms 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
.
It is a free module if and only if
is parallelizable. Accordingly,
two classes implement
:
DiffFormModule
for differential forms with values on a generic (in practice, not parallelizable) differentiable manifoldDiffFormFreeModule
for differential forms with values on a parallelizable manifold
AUTHORS:
- Eric Gourgoulhon (2015): initial version
- Travis Scrimshaw (2016): review tweaks
REFERENCES:
- [KN1963]
- [Lee2013]
-
class
sage.manifolds.differentiable.diff_form_module.
DiffFormFreeModule
(vector_field_module, degree)¶ Bases:
sage.tensor.modules.ext_pow_free_module.ExtPowerFreeModule
Free module of differential forms of a given degree
(
-forms) along a differentiable manifold
with values on a parallelizable manifold
.
Given a differentiable manifold
and a differentiable map
to a parallelizable manifold
, the set
of
-forms along
with values on
is a free module over
, the commutative algebra of differentiable scalar fields on
(see
DiffScalarFieldAlgebra
). The standard case of-forms on a differentiable manifold
corresponds to
and
. Other common cases are
being an immersion and
being a curve in
(
is then an open interval of
).
This class implements
in the case where
is parallelizable;
is then a free module. If
is not parallelizable, the class
DiffFormModule
must be used instead.This is a Sage parent class, whose element class is
DiffFormParal
.INPUT:
vector_field_module
– free moduleof vector fields along
associated with the map
degree
– positive integer; the degreeof the differential forms
EXAMPLES:
Free module of 2-forms 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.diff_form_module(2) ; A Free module /\^2(M) of 2-forms on the 3-dimensional differentiable manifold M sage: latex(A) \Lambda^{2}\left(M\right)
is a module over the algebra
of (differentiable) scalar fields on
:
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
. In particular,
0
yields the zero element of:
sage: A(0) 2-form 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-form a on the 3-dimensional differentiable manifold M sage: a.display() a = 3*x dx/\dy - z dx/\dz + 4 dy/\dz
An alternative is to construct the 2-form 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 dx/\dy - z dx/\dz + 4 dy/\dz
The module
is nothing but the dual of
(the free module of vector fields on
):
sage: L1 = M.diff_form_module(1) ; L1 Free module /\^1(M) of 1-forms on the 3-dimensional differentiable manifold M sage: L1 is XM.dual() True
Since any tensor field of type
is a 1-form, there is a coercion map from the set
of such tensors to
:
sage: T01 = M.tensor_field_module((0,1)) ; T01 Free module T^(0,1)(M) of type-(0,1) tensors fields on the 3-dimensional differentiable manifold M sage: L1.has_coerce_map_from(T01) True
There is also a coercion map in the reverse direction:
sage: T01.has_coerce_map_from(L1) True
For a degree
, the coercion holds only in the direction
:
sage: T02 = M.tensor_field_module((0,2)); T02 Free module T^(0,2)(M) of type-(0,2) tensors fields on the 3-dimensional differentiable manifold M sage: T02.has_coerce_map_from(A) True sage: A.has_coerce_map_from(T02) False
The coercion map
in action:
sage: b = T01([-x,2,3*y], name='b'); b Tensor field b of type (0,1) on the 3-dimensional differentiable manifold M sage: b.display() b = -x dx + 2 dy + 3*y dz sage: lb = L1(b) ; lb 1-form b on the 3-dimensional differentiable manifold M sage: lb.display() b = -x dx + 2 dy + 3*y dz
The coercion map
in action:
sage: tlb = T01(lb); tlb Tensor field b of type (0,1) on the 3-dimensional differentiable manifold M sage: tlb == b True
The coercion map
in action:
sage: T02 = M.tensor_field_module((0,2)) ; T02 Free module T^(0,2)(M) of type-(0,2) tensors fields on the 3-dimensional differentiable manifold M sage: ta = T02(a) ; ta Tensor field a of type (0,2) on the 3-dimensional differentiable manifold M sage: ta.display() a = 3*x dx*dy - z dx*dz - 3*x dy*dx + 4 dy*dz + z dz*dx - 4 dz*dy sage: a.display() a = 3*x dx/\dy - z dx/\dz + 4 dy/\dz sage: ta.symmetries() # the antisymmetry is preserved no symmetry; antisymmetry: (0, 1)
There is also coercion to subdomains, which is nothing but the restrictionof the differential form to some subset of its domain:
sage: U = M.open_subset('U', coord_def={X: x^2+y^2<1}) sage: B = U.diff_form_module(2) ; B Free module /\^2(U) of 2-forms 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-form a on the Open subset U of the 3-dimensional differentiable manifold M sage: a_U.display() a = 3*x dx/\dy - z dx/\dz + 4 dy/\dz
-
Element
¶ alias of
DiffFormParal
-
class
sage.manifolds.differentiable.diff_form_module.
DiffFormModule
(vector_field_module, degree)¶ Bases:
sage.structure.unique_representation.UniqueRepresentation
,sage.structure.parent.Parent
Module of differential forms of a given degree
(
-forms) along a differentiable manifold
with values on a differentiable manifold
.
Given a differentiable manifold
and a differentiable map
to a differentiable manifold
, the set
of
-forms along
with values on
is a module over
, the commutative algebra of differentiable scalar fields on
(see
DiffScalarFieldAlgebra
). The standard case of-forms on a differentiable manifold
corresponds to
and
. Other common cases are
being an immersion and
being a curve in
(
is then an open interval of
).
Note
This class implements
in the case where
is not assumed to be parallelizable; the module
is then not necessarily free. If
is parallelizable, the class
DiffFormFreeModule
must be used instead.INPUT:
vector_field_module
– moduleof vector fields along
with values on
via the map
degree
– positive integer; the degreeof the differential forms
EXAMPLES:
Module of 2-forms 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.diff_form_module(2) ; A Module /\^2(M) of 2-forms on the 2-dimensional differentiable manifold M sage: latex(A) \Lambda^{2}\left(M\right)
Modules of differential forms are unique:
sage: A is M.diff_form_module(2) True
is a module over the algebra
of (differentiable) scalar fields on
:
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 ofA
:sage: z = A(0) ; z 2-form 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-form a on the 2-dimensional differentiable manifold M sage: a.add_comp_by_continuation(eV, W, c_uv) # finishes the initialization of a sage: a.display(eU) a = 3*x dx/\dy sage: a.display(eV) a = (-3/4*u - 3/4*v) du/\dv
An alternative is to construct the 2-form 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 dx/\dy sage: a.display(eV) a = (-3/4*u - 3/4*v) du/\dv
The module
is nothing but the dual of
(the module of vector fields on
):
sage: L1 = M.diff_form_module(1) ; L1 Module /\^1(M) of 1-forms on the 2-dimensional differentiable manifold M sage: L1 is XM.dual() True
Since any tensor field of type
is a 1-form, there is a coercion map from the set
of such tensors to
:
sage: T01 = M.tensor_field_module((0,1)) ; T01 Module T^(0,1)(M) of type-(0,1) tensors fields on the 2-dimensional differentiable manifold M sage: L1.has_coerce_map_from(T01) True
There is also a coercion map in the reverse direction:
sage: T01.has_coerce_map_from(L1) True
For a degree
, the coercion holds only in the direction
:
sage: T02 = M.tensor_field_module((0,2)) ; T02 Module T^(0,2)(M) of type-(0,2) tensors fields on the 2-dimensional differentiable manifold M sage: T02.has_coerce_map_from(A) True sage: A.has_coerce_map_from(T02) False
The coercion map
in action:
sage: b = T01([y,x], frame=eU, name='b') ; b Tensor field b of type (0,1) on the 2-dimensional differentiable manifold M sage: b.add_comp_by_continuation(eV, W, c_uv) sage: b.display(eU) b = y dx + x dy sage: b.display(eV) b = 1/2*u du - 1/2*v dv sage: lb = L1(b) ; lb 1-form b on the 2-dimensional differentiable manifold M sage: lb.display(eU) b = y dx + x dy sage: lb.display(eV) b = 1/2*u du - 1/2*v dv
The coercion map
in action:
sage: tlb = T01(lb) ; tlb Tensor field b of type (0,1) on the 2-dimensional differentiable manifold M sage: tlb.display(eU) b = y dx + x dy sage: tlb.display(eV) b = 1/2*u du - 1/2*v dv sage: tlb == b True
The coercion map
in action:
sage: ta = T02(a) ; ta Tensor field a of type (0,2) on the 2-dimensional differentiable manifold M sage: ta.display(eU) a = 3*x dx*dy - 3*x dy*dx sage: a.display(eU) a = 3*x dx/\dy sage: ta.display(eV) a = (-3/4*u - 3/4*v) du*dv + (3/4*u + 3/4*v) dv*du sage: a.display(eV) a = (-3/4*u - 3/4*v) du/\dv
There is also coercion to subdomains, which is nothing but the restriction of the differential form to some subset of its domain:
sage: L2U = U.diff_form_module(2) ; L2U Free module /\^2(U) of 2-forms on the Open subset U of the 2-dimensional differentiable manifold M sage: L2U.has_coerce_map_from(A) True sage: a_U = L2U(a) ; a_U 2-form a on the Open subset U of the 2-dimensional differentiable manifold M sage: a_U.display(eU) a = 3*x dx/\dy
-
Element
¶ alias of
DiffForm
-
base_module
()¶ Return the vector field module on which the differential form module is constructed.
OUTPUT:
- a
VectorFieldModule
representing the module on which the differential form module is defined
EXAMPLES:
sage: M = Manifold(3, 'M') sage: A2 = M.diff_form_module(2) ; A2 Module /\^2(M) of 2-forms 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.diff_form_module(2) ; A2U Module /\^2(U) of 2-forms 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
- a
-
degree
()¶ Return the degree of the differential forms in the module.
OUTPUT:
- integer
such that the module is a set of
-forms
EXAMPLES:
sage: M = Manifold(3, 'M') sage: M.diff_form_module(1).degree() 1 sage: M.diff_form_module(2).degree() 2 sage: M.diff_form_module(3).degree() 3
- integer
-
zero
()¶ Return the zero of
self
.EXAMPLES:
sage: M = Manifold(3, 'M') sage: A2 = M.diff_form_module(2) sage: A2.zero() 2-form zero on the 3-dimensional differentiable manifold M