Opened 9 years ago

Closed 9 years ago

## #577 closed bug (fixed)

# ring created with ringlist has internally wrong ordering

Reported by: | Owned by: | somebody | |
---|---|---|---|

Priority: | minor | Milestone: | 4-1-0 and higher |

Component: | singular-kernel | Version: | 3-1-6 |

Keywords: | ringlist, ordering | Cc: | johannes.hoffmann@… |

### Description

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

Resolution: | → not a bug |
---|---|

Status: | new → closed |

### comment:2 Changed 9 years ago by

Resolution: | not a bug |
---|---|

Status: | closed → reopened |

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

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/gr_kstd2.cc:1076 condition: currRing->OrdSgn != -1 _[1]=Dx _[2]=1

i guess we should correct `currRing->OrdSgn`

to be 1 in such a case...

### comment:4 Changed 9 years ago by

Resolution: | → fixed |
---|---|

Status: | reopened → closed |

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: a.global 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.

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.