up previous next
 4.8.10 Module Orderings
First we recall the definition of a module term-ordering. We assume that all our free modules have finite rank and are of the type M = R^r where R is a polynomial ring with n indeterminates. Let [e_i|i=1,...,r] be the canonical basis of M. A term of M is an element of the form Te_i where T belongs to the set T(R) of the terms of R. Hence the set T(M), of the terms of M, is in one-to-one correspondence with the Cartesian product, T(R) x [1,...,r].

A module term-ordering is defined as a total ordering > on T(M) such that for all T, T_1, T_2 in T(R), with T not equal to 1, and for all i, j in {1,...,r},
```   (1)  T * T_1 * e_i > T_1 * e_i
(2)  T_1 * e_i > T_2 * e_j  =>  T * T_1 * e_i > T * T_2 * e_j
```
Each term-ordering on the current ring induces several term-orderings on a free module. CoCoA allows the user to choose between the following:

* the ordering called ToPos (which is the default one) defined by:
```      T_1 * e_i > T_2 * e_j <=>  T_1 > T_2 in R
or, if  T_1 = T_2 , i < j
```
* the ordering called PosTo defined by:
```       T_1 * e_i > T_2 * e_j <=> i < j
or, if i = j, T_1 > T_2 in R .
```
The leading term of the vector (x,y^2) with respect to two different module term-orderings:

 Example
 ``` Use R ::= QQ[x,y], ToPos; LT(Vector(x,y^2)); Vector(0, y^2) ------------------------------- Use R ::= QQ[x,y], PosTo; LT(Vector(x,y^2)); Vector(x, 0) ------------------------------- ```