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:

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