# FreeModuleCategory(R, S)¶

poly.spad line 16 [edit on github]

R: Join(SemiRng, AbelianMonoid)

S: SetCategory

A domain of this category implements formal linear combinations of elements from a domain `Basis`

with coefficients in a domain `R`

. The domain `Basis`

needs only to belong to the category SetCategory and `R`

to the category Ring. Thus the coefficient ring may be non-commutative. See the XDistributedPolynomial constructor for examples of domains built with the FreeModuleCategory category constructor. Author: Michel Petitot (petitot@lifl.`fr`

) Note (Franz Lehner, June 2009): `FreeModule`

originally was not of FreeModuleCategory. Some functions (like `support`

, `coefficients`

, `monomials`

, …) from here could be moved to `IndexedDirectProductCategory`

but at the moment there is no need for this.

- 0: %
from AbelianMonoid

- *: (%, R) -> %
from RightModule R

- *: (Integer, %) -> % if R has AbelianGroup
from AbelianGroup

- *: (NonNegativeInteger, %) -> %
from AbelianMonoid

- *: (PositiveInteger, %) -> %
from AbelianSemiGroup

- *: (R, %) -> %
from LeftModule R

- +: (%, %) -> %
from AbelianSemiGroup

- -: % -> % if R has AbelianGroup
from AbelianGroup

- -: (%, %) -> % if R has AbelianGroup
from AbelianGroup

- coefficient: (%, S) -> R
`coefficient(x, s)`

returns the coefficient of the basis element`s`

- coefficients: % -> List R
`coefficients(x)`

returns the list of coefficients of`x`

.

- coerce: % -> OutputForm
from CoercibleTo OutputForm

- construct: List Record(k: S, c: R) -> %
from IndexedProductCategory(R, S)

- constructOrdered: List Record(k: S, c: R) -> % if S has Comparable
from IndexedProductCategory(R, S)

- hash: % -> SingleInteger
from SetCategory

- hashUpdate!: (HashState, %) -> HashState
from SetCategory

- latex: % -> String
from SetCategory

- leadingCoefficient: % -> R if S has Comparable
from IndexedProductCategory(R, S)

- leadingMonomial: % -> % if S has Comparable
from IndexedProductCategory(R, S)

- leadingSupport: % -> S if S has Comparable
from IndexedProductCategory(R, S)

- leadingTerm: % -> Record(k: S, c: R) if S has Comparable
from IndexedProductCategory(R, S)

- linearExtend: (S -> R, %) -> R if R has CommutativeRing
`linearExtend: (f, x)`

returns the linear extension of a map defined on the basis applied to a linear combination

- listOfTerms: % -> List Record(k: S, c: R)
from IndexedDirectProductCategory(R, S)

- map: (R -> R, %) -> %
from IndexedProductCategory(R, S)

- monomial?: % -> Boolean
from IndexedProductCategory(R, S)

- monomial: (R, S) -> %
from IndexedProductCategory(R, S)

- monomials: % -> List %
`monomials(x)`

returns the list of`r_i*b_i`

whose sum is`x`

.

- numberOfMonomials: % -> NonNegativeInteger
from IndexedDirectProductCategory(R, S)

- opposite?: (%, %) -> Boolean
from AbelianMonoid

- reductum: % -> % if S has Comparable
from IndexedProductCategory(R, S)

- sample: %
from AbelianMonoid

- smaller?: (%, %) -> Boolean if R has Comparable and S has Comparable
from Comparable

- subtractIfCan: (%, %) -> Union(%, failed)

- support: % -> List S
`support(x)`

returns the list of basis elements with nonzero coefficients.

- zero?: % -> Boolean
from AbelianMonoid

AbelianGroup if R has AbelianGroup

BiModule(R, R)

Comparable if R has Comparable and S has Comparable

IndexedDirectProductCategory(R, S)

IndexedProductCategory(R, S)

Module R if R has CommutativeRing