Base classes for reflexive modules#
- class sage.tensor.modules.reflexive_module.ReflexiveModule_abstract#
Bases:
Parent
Abstract base class for reflexive modules.
An
-module is reflexive if the natural map from to its double dual is an isomorphism.In the category of
-modules, the dual module is the -module of linear functionals . However, we do not make the assumption that the dual module (obtained bydual()
) is in the categoryHomsets
.We identify the double dual
with .Tensor products of reflexive modules are reflexive. We identify all tensor products of
copies of and copies of and denote it by . Thetensor_type()
of such a tensor product is the pair , and is called itsbase_module()
.There are three abstract subclasses:
ReflexiveModule_base
is the base class for implementations of base modules .ReflexiveModule_dual
is the base class for implementations of duals .ReflexiveModule_tensor
is the base class for implementations of tensor modules .
- base_module()#
Return the module on which
self
is constructed.EXAMPLES:
sage: M = FiniteRankFreeModule(ZZ, 3) sage: M.base_module() is M True sage: M.dual().base_module() is M True sage: M.tensor_module(1, 2).base_module() is M True
- dual()#
Return the dual module.
EXAMPLES:
sage: M = FiniteRankFreeModule(ZZ, 3) sage: M.dual() Dual of the Rank-3 free module over the Integer Ring sage: M.dual().dual() Rank-3 free module over the Integer Ring sage: M.tensor_module(1, 2) Free module of type-(1,2) tensors on the Rank-3 free module over the Integer Ring sage: M.tensor_module(1, 2).dual() Free module of type-(2,1) tensors on the Rank-3 free module over the Integer Ring
- tensor(*args, **kwds)#
Return the tensor product of
self
andothers
.This method is invoked when
TensorProductFunctor
is applied to parents.It just delegates to
tensor_product()
.EXAMPLES:
sage: M = FiniteRankFreeModule(QQ, 2); M 2-dimensional vector space over the Rational Field sage: M20 = M.tensor_module(2, 0); M20 Free module of type-(2,0) tensors on the 2-dimensional vector space over the Rational Field sage: tensor([M20, M20]) Free module of type-(4,0) tensors on the 2-dimensional vector space over the Rational Field
- tensor_power(n)#
Return the
n
-fold tensor product ofself
.EXAMPLES:
sage: M = FiniteRankFreeModule(QQ, 2) sage: M.tensor_power(3) Free module of type-(3,0) tensors on the 2-dimensional vector space over the Rational Field sage: M.tensor_module(1,2).tensor_power(3) Free module of type-(3,6) tensors on the 2-dimensional vector space over the Rational Field
- tensor_product(*others)#
Return the tensor product of
self
andothers
.EXAMPLES:
sage: M = FiniteRankFreeModule(QQ, 2) sage: M.tensor_product(M) Free module of type-(2,0) tensors on the 2-dimensional vector space over the Rational Field sage: M.tensor_product(M.dual()) Free module of type-(1,1) tensors on the 2-dimensional vector space over the Rational Field sage: M.dual().tensor_product(M, M.dual()) Free module of type-(1,2) tensors on the 2-dimensional vector space over the Rational Field sage: M.tensor_product(M.tensor_module(1,2)) Free module of type-(2,2) tensors on the 2-dimensional vector space over the Rational Field sage: M.tensor_module(1,2).tensor_product(M) Free module of type-(2,2) tensors on the 2-dimensional vector space over the Rational Field sage: M.tensor_module(1,1).tensor_product(M.tensor_module(1,2)) Free module of type-(2,3) tensors on the 2-dimensional vector space over the Rational Field sage: Sym2M = M.tensor_module(2, 0, sym=range(2)); Sym2M Free module of fully symmetric type-(2,0) tensors on the 2-dimensional vector space over the Rational Field sage: Sym01x23M = Sym2M.tensor_product(Sym2M); Sym01x23M Free module of type-(4,0) tensors on the 2-dimensional vector space over the Rational Field, with symmetry on the index positions (0, 1), with symmetry on the index positions (2, 3) sage: Sym01x23M._index_maps ((0, 1), (2, 3)) sage: N = M.tensor_module(3, 3, sym=[1, 2], antisym=[3, 4]); N Free module of type-(3,3) tensors on the 2-dimensional vector space over the Rational Field, with symmetry on the index positions (1, 2), with antisymmetry on the index positions (3, 4) sage: NxN = N.tensor_product(N); NxN Free module of type-(6,6) tensors on the 2-dimensional vector space over the Rational Field, with symmetry on the index positions (1, 2), with symmetry on the index positions (4, 5), with antisymmetry on the index positions (6, 7), with antisymmetry on the index positions (9, 10) sage: NxN._index_maps ((0, 1, 2, 6, 7, 8), (3, 4, 5, 9, 10, 11))
- tensor_type()#
Return the tensor type of
self
.OUTPUT:
pair
such thatself
is the module tensor product , where is thebase_module()
ofself
.
EXAMPLES:
sage: M = FiniteRankFreeModule(ZZ, 3) sage: T = M.tensor_module(1, 2) sage: T.tensor_type() (1, 2)
- class sage.tensor.modules.reflexive_module.ReflexiveModule_base#
Bases:
ReflexiveModule_abstract
Abstract base class for reflexive modules that are base modules.
- base_module()#
Return the free module on which
self
is constructed, namelyself
itself.EXAMPLES:
sage: M = FiniteRankFreeModule(ZZ, 3, name='M') sage: M.base_module() is M True sage: M = Manifold(2, 'M') # optional - sage.symbolic sage: XM = M.vector_field_module() # optional - sage.symbolic sage: XM.base_module() is XM # optional - sage.symbolic True
- dual()#
Return the dual module.
EXAMPLES:
sage: M = FiniteRankFreeModule(ZZ, 3, name='M') sage: M.dual() Dual of the Rank-3 free module M over the Integer Ring
- tensor_module(k, l, **kwds)#
Return the module of all tensors of type
defined onself
.EXAMPLES:
sage: M = FiniteRankFreeModule(ZZ, 3) sage: M.tensor_module(1, 2) Free module of type-(1,2) tensors on the Rank-3 free module over the Integer Ring
- tensor_type()#
Return the tensor type of
self
, the pair .EXAMPLES:
sage: M = FiniteRankFreeModule(ZZ, 3) sage: M.tensor_type() (1, 0) sage: M = Manifold(2, 'M') # optional - sage.symbolic sage: XM = M.vector_field_module() # optional - sage.symbolic sage: XM.tensor_type() # optional - sage.symbolic (1, 0)
- class sage.tensor.modules.reflexive_module.ReflexiveModule_dual#
Bases:
ReflexiveModule_abstract
Abstract base class for reflexive modules that are the duals of base modules.
- construction()#
Return the functorial construction of
self
.This implementation just returns
None
, as no functorial construction is implemented.
- tensor_type()#
Return the tensor type of
self
.EXAMPLES:
sage: M = FiniteRankFreeModule(ZZ, 3, name='M') sage: M.dual().tensor_type() (0, 1)
- class sage.tensor.modules.reflexive_module.ReflexiveModule_tensor#
Bases:
ReflexiveModule_abstract
Abstract base class for reflexive modules that are tensor products of base modules.
- tensor_factors()#
Return the tensor factors of this tensor module.
EXAMPLES:
sage: M = FiniteRankFreeModule(ZZ, 3, name='M') sage: T = M.tensor_module(2, 3) sage: T.tensor_factors() [Rank-3 free module M over the Integer Ring, Rank-3 free module M over the Integer Ring, Dual of the Rank-3 free module M over the Integer Ring, Dual of the Rank-3 free module M over the Integer Ring, Dual of the Rank-3 free module M over the Integer Ring]