A domain of this category implements formal linear combinations
of elements from a domain **S** with coefficients
in a domain **R**. 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)

Modified by: Franz Lehner, June 2009

fricas

)sh FreeModuleCategory

FreeModuleCategory(R: Join(SemiRng,AbelianMonoid),S: Comparable) is a category constructor
Abbreviation for FreeModuleCategory is FMCAT
This constructor is exposed in this frame.
------------------------------- Operations --------------------------------
?*? : (S,R) -> % ?*? : (R,S) -> %
?*? : (%,R) -> % ?*? : (R,%) -> %
?*? : (PositiveInteger,%) -> % ?+? : (%,%) -> %
?=? : (%,%) -> Boolean coefficient : (%,S) -> R
coefficients : % -> List(R) coerce : % -> OutputForm
hash : % -> SingleInteger latex : % -> String
leadingCoefficient : % -> R leadingMonomial : % -> S
leadingSupport : % -> S map : ((R -> R),%) -> %
monom : (S,R) -> % monomial : (R,S) -> %
monomial? : % -> Boolean monomials : % -> List(%)
reductum : % -> % support : % -> List(S)
?~=? : (%,%) -> Boolean
?*? : (NonNegativeInteger,%) -> % if and(OR(has(R,AbelianMonoid),has(R,AbelianMonoid)),has(R,CommutativeRing)) or R has OAMON and S has ORDSET or R has OAMONS and S has ORDSET or R has ABELMON
?*? : (Integer,%) -> % if and(OR(has(R,AbelianGroup),has(R,AbelianGroup)),has(R,CommutativeRing)) or R has ABELGRP or R has ABELGRP
-? : % -> % if and(OR(has(R,AbelianGroup),has(R,AbelianGroup)),has(R,CommutativeRing)) or R has ABELGRP or R has ABELGRP
?-? : (%,%) -> % if and(OR(has(R,AbelianGroup),has(R,AbelianGroup)),has(R,CommutativeRing)) or R has ABELGRP or R has ABELGRP
?<? : (%,%) -> Boolean if R has OAMON and S has ORDSET or R has OAMONS and S has ORDSET
?<=? : (%,%) -> Boolean if R has OAMON and S has ORDSET or R has OAMONS and S has ORDSET
?>? : (%,%) -> Boolean if R has OAMON and S has ORDSET or R has OAMONS and S has ORDSET
?>=? : (%,%) -> Boolean if R has OAMON and S has ORDSET or R has OAMONS and S has ORDSET
0 : () -> % if and(OR(has(R,AbelianMonoid),has(R,AbelianMonoid)),has(R,CommutativeRing)) or R has OAMON and S has ORDSET or R has OAMONS and S has ORDSET or R has ABELMON
coerce : S -> % if R has SRING
construct : List(Record(k: S,c: R)) -> %
constructOrdered : List(Record(k: S,c: R)) -> %
hashUpdate! : (HashState,%) -> HashState
leadingTerm : % -> Record(k: S,c: R)
linearExtend : ((S -> R),%) -> R if R has COMRING
listOfTerms : % -> List(Record(k: S,c: R))
max : (%,%) -> % if R has OAMON and S has ORDSET or R has OAMONS and S has ORDSET
min : (%,%) -> % if R has OAMON and S has ORDSET or R has OAMONS and S has ORDSET
numberOfMonomials : % -> NonNegativeInteger
retract : % -> S if R has SRING
retractIfCan : % -> Union(S,"failed") if R has SRING
sample : () -> % if and(OR(has(R,AbelianMonoid),has(R,AbelianMonoid)),has(R,CommutativeRing)) or R has OAMON and S has ORDSET or R has OAMONS and S has ORDSET or R has ABELMON
smaller? : (%,%) -> Boolean if R has COMPAR or R has OAMON and S has ORDSET or R has OAMONS and S has ORDSET
subtractIfCan : (%,%) -> Union(%,"failed") if and(OR(has(R,AbelianGroup),has(R,AbelianGroup)),has(R,CommutativeRing)) or R has OAMONS and S has ORDSET or R has CABMON or R has ABELGRP
sup : (%,%) -> % if R has OAMONS and S has ORDSET
zero? : % -> Boolean if and(OR(has(R,AbelianMonoid),has(R,AbelianMonoid)),has(R,CommutativeRing)) or R has OAMON and S has ORDSET or R has OAMONS and S has ORDSET or R has ABELMON