Cat::ModuleWithSeveralBases – the category of modules with several bases
Cat::ModuleWithSeveralBases(coeffRing) represents the category of modules over coeffRing with several bases.
Creating the Category
Cat::ModuleWithSeveralBases(coeffRing)
Parameters:
coeffRing: |
A domain which must be from the category Cat::Ring. |
Categories
Cat::Module(coeffRing), Cat::UseOverloading
Details:
The Category Cat::ModuleWithSeveralBases(coeffRing) represents the category of abstract modules over (coeffRing), whose objects are concretely represented by expanding them on one of several bases. The purpose of Cat::ModuleWithSeveralBases is essentially to take care of basis changes and scalar products.
A domain d of the category Cat::ModuleWithSeveralBases(coeffRing) belongs to Cat::Module(coeffRing) where coeffRing is a Cat::Ring. Each element of d is expanded on one basis from a set d::bases. Technically, d is a facade domain for a set d::bases of domains each of which is a module with a distinguished basis (Cat::ModuleWithBasis). All the modules of d::bases are assumed to be naturally isomorphic. Each basis is a domain of Cat::ModuleWithBasis(coeffRing) indexed by some combinatorial class in the category Cat::CombinatorialClass. The combinatorial classes need not to be the same for all the bases.
The main goal Cat::ModuleWithSeveralBases(coeffRing) is two help declaring the appropriate conversions so that one can mix freely in expression elements written on different bases. The basis where the result is expanded is automatically chosen by the overloading mechanism.
Details:
These technical methods are for programmers of domains, not to be used directly by users.
The following entries and methods are used to declare the conversion between the different bases. They can be set up at the creation of the domain using the entries basisChangesBasis, basisChanges, autoDefineBasisChanges, dual and dualBasisPairs on one hand. One the other hand, its possible to add some bases and conversions after the creation of the domain by the methods declareBasisChangesBasis, declareBasisChanges, declareDualBases.
Entries
"coeffRing" |
Returns the coefficient ring. |
"bases" |
Returns the set of bases. |
"autoDefineBasisChanges" |
Boolean that tells the system whether the basis changes that are not defined in basisChangesBasis or basisChanges should be defined when possible by inversion or transposition and automatically added to these tables. |
"basisChangesBasis" |
Hash table to associate pairs of bases with known change of basis. Each entry of the table is of the form (basSource, basTarget) = basSourceTobasTargetChangeBasis where basSource and basTarget are domains of Cat::ModuleWithBasis(coeffRing) and basSourceTobasTargetChangeBasis is a function that takes an element x in basSource::basisIndices and returns the image of the element indexed by basSource(x) expressed in the basis basTarget.The basis change for the elements in basSource is defined by the linear extension of the function basSourceTobasTargetChangeBasis.If this table is not empty at the initialization of the domain, each entry is declared to the overloading system which is set to produce automatic conversions of elements in basSource to expressions of elements in basTarget. |
"basisChanges" |
Hash table to associate pairs with known change of basis. Each entry of the table is of the form (basSource, basTarget) = basSourceTobasTargetChange where basSource and basTarget are domain of Cat::ModuleWithBasis(coeffRing) and basSourceTobasTargetChange is a function that takes an element x in basSource and returns the image of the element indexed by basSource(x) expressed in the basis basTarget. No linear extension is necessary in this case.If this table is not empty at the initialization of the domain, each entry is declared to the overloading system which is set to produce automatic conversions of elements in basSource to expressions of elements in basTarget. |
"dualBasisPairs" |
Set of pairs of dual bases which are used to define the scalar product and to define changes of basis by transposition. |
"dual" |
If the domain is the category has a dual module in this same category, this entry is used to automatically compute changes of basis by transposition. This is done only if the entry autoDefineBasisChanges is set to TRUE. |
scalar – scalar product
Cat::ModuleWithSeveralBases::scalar(dom x, dom y)
Returns the scalar product of x and y.
By default this method is set to operators::scalar.
Technical Methods
declareBasisChangesBasis – declaration of change of bases from basis indexes
Cat::ModuleWithSeveralBases::declareBasisChangesBasis(baseClass basSource, baseClass basTarget, function basChange)
This method declares to the overloading system a new automatic conversion of elements in basSource to expressions of elements in basTarget. The function basChange should take a basSource::basisIndices and returns a basTarget as in basisChangesBasis.
It also adds a new entry to the hash table basisChangesBasis.
declareBasisChanges – declaration of change of bases
Cat::ModuleWithSeveralBases::declareBasisChanges(baseClass basSource, baseClass basTarget, function basChange)
This method declares to the overloading system a new automatic conversion of elements in basSource to expressions of elements in basTarget. The function basChange should take a basSource and returns a basTarget as in basisChanges.
It also adds a new entry to the hash table basisChanges.
declareDualBases – declaration of pairs of dual bases
Cat::ModuleWithSeveralBases::declareDualBases(baseClass basDom, baseClass basDual)
This method constructs the set of pairs dualBasisPairs to tell the system information about duality.
It also adds a new entry to the set dualBasisPairs.
See the guided tour.
Changes in MuPAD 3.2
New Function.