# FreeModuleCategory(R, S)¶

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

=: (%, %) -> Boolean

from BasicType

~=: (%, %) -> Boolean

from BasicType

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
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)

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

AbelianMonoid

AbelianSemiGroup

BasicType

BiModule(R, R)

CancellationAbelianMonoid

Comparable if R has Comparable and S has Comparable

IndexedProductCategory(R, S)

Module R if R has CommutativeRing

SetCategory