Opened 9 years ago

Closed 9 years ago

#577 closed bug (fixed)

ring created with ringlist has internally wrong ordering

Reported by: daniel.andres@… Owned by: somebody
Priority: minor Milestone: 4-1-0 and higher
Component: singular-kernel Version: 3-1-6
Keywords: ringlist, ordering Cc: johannes.hoffmann@…


The following bug has been discovered by Johannes Hoffmann (RWTH Aachen).

A ring created using ringlist has internally a wrong (local) ordering. First create the ring directly and everything works as expected:

ring A0 = 0,(x,Dx),(a(1,0),a(1,1),ls);
def A = nc_algebra(1,1);
setring A; A;
1+x+Dx;              // ordering is global
slimgb(ideal(x,Dx)); // 1 as expected
std(ideal(x,Dx));    // same result

Now create the same ring with ringlist by appending the first weight vector. It seems that internally a local/mixed ordering is used.

ring B0 = 0,(x,Dx),(a(1,1),ls);
def B1 = nc_algebra(1,1);
setring B1;
list RL = ringlist(B1);
RL[3] = insert(RL[3],list("a",intvec(1,0)),0);
def B = ring(RL); setring B;
B;                   // the same as above
1+x+Dx;              // ordering is still global
std(ideal(x,Dx));    // not reduced
slimgb(ideal(x,Dx)); // error: "ordering must be global for slimgb"

Change History (4)

comment:1 Changed 9 years ago by hannes

Resolution: not a bug
Status: newclosed

a global ordering requires that all weights (especially all given by a(...)) are positive. Therefore all orderings which include a(1,0) are non-global.

comment:2 Changed 9 years ago by daniel.andres@…

Resolution: not a bug
Status: closedreopened

Please tell me if I'm wrong, but the first NON-zero entry in the respective column of the ordering matrix decides whether the respective variable is global or local. In the code above, the ordering matrix

10 11 -- ls

is used. In particular, both variables are greater than 1 and hence, the ordering is global. Is a different definition being used in the implementation?

comment:3 Changed 9 years ago by Oleksandr

i support Daniel: in this case: x>Dx>1 and thus the ordering is global.

Therefore all orderings which include a(1,0) are non-global.

lexicographical ordering lp(2) can be encoded as (a(1,0), a(0,1)), and it is clearly global... right?!

btw, i get:

>  std(ideal(x,Dx));    // not reduced
// ** Sorry, non-commutative mora is not yet implemented!
// ***dError: assume violation at ../../kernel/ condition: currRing->OrdSgn != -1

i guess we should correct currRing->OrdSgn to be 1 in such a case...

Last edited 9 years ago by Oleksandr (previous) (diff)

comment:4 Changed 9 years ago by hannes

Resolution: fixed
Status: reopenedclosed

you are both right and wrong at same time:

  • instead of "global": "algorithmically global" is meant: global ordering of variable is necessary, but not sufficient. Definition: iff attrib(R,"global")==1
  • ordering "a" as part of a global ordering requires that all weights are positive (but in this case a(1,0) will be simplified to a(1), so this is true here)
  • lp(2) is not a(1,0),a(0,1) in the same way as the matrices (1,0,0,1) and (2,0,0,2) describe the same ordering, but are not the same matrices

It is fixed in this case, but there may be obscure ordering definitions which describe an global ordering, but not an algorithmically global one.(a8d371b294c1193994eb8cd4e64e0c73158a535b)

Note: See TracTickets for help on using tickets.