Open simon-king-jena opened 13 years ago
There is a new singular spkg at #8059. However, this does not solve the problem. The only difference is that now one has
sage: I.groebner_basis(algorithm='toy:buchberger2')
[2*x^2 + x*y, 3*x*y, 2*y^2]
Hence, the result is reduced (the first bug is gone), but still wrong.
At least the problem with liftstd
has disappeared in Singular-3-1-1.
But since the bug in slimgb
persists, I reported upstream.
Changed upstream from Not yet reported upstream; Will do shortly. to Reported upstream. Little or no feedback.
Description changed:
---
+++
@@ -21,7 +21,7 @@
[x^2*y, x*y^2, 2*x^2 + x*y, 3*x*y, 2*y^2]
-First bug +First bug (fixed with Singular-3-1-1)
The documentation suggests that toy:buchberger2
is supposed to return a reduced Groebner basis, but it doesn't. So, to the very least, the documentation is a little unclear.
@@ -60,7 +60,7 @@
Conclusion: Under the assumption that there is no bug in reduce and the basic arithmetic, it is proven that slimgb and toy:buchberger(2) give a wrong answer.
-Third bug +Third bug (fixed with Singular-3-1-1)
Of course, if G1
is a Groebner basis then all of its elements must belong to the ideal. Singular provides a command to express the Groebner basis elements as combinations of the given ideal generators: liftstd
.
Replying to @simon-king-jena:
There is a new singular spkg at #8059. However, this does not solve the problem. The only difference is that now one has
sage: I.groebner_basis(algorithm='toy:buchberger2') [2*x^2 + x*y, 3*x*y, 2*y^2]
Hence, the result is reduced (the first bug is gone), but still wrong.
Result is right because reduce is different in field and in ring (please read this book chapter 4).
xy!^2 is reduced to zero on [2x!^2 + xy, 3xy, 2y!^2] because xy!^2 - (y3xy-x2y!^2)=0.
So libsingular:slimgb and toy:buchberger2 are right, and singular:std and libsingular:std has bug.
Replying to @sagetrac-duleorlovic:
Replying to @simon-king-jena:
There is a new singular spkg at #8059. However, this does not solve the problem. The only difference is that now one has
sage: I.groebner_basis(algorithm='toy:buchberger2') [2*x^2 + x*y, 3*x*y, 2*y^2]
Hence, the result is reduced (the first bug is gone), but still wrong.Result is right because reduce is different in field and in ring (please read this book chapter 4).
xy!^2 is reduced to zero on [2x!^2 + xy, 3xy, 2y!^2] because xy!^2 - (y3xy-x2y!^2)=0.
I don't buy this and repeat that this is not a reduction. Martin, do you agree?
Many thanks to Michael Brickenstein who explained here that our misunderstanding comes from the fact that Dusan expects to work with weak Gröbner bases - a notion that I was not aware of.
Singular computes a strong Gröbner basis. So, not a bug.
By the way, the remaining problem with slimgb is solved upstream: By now (i.e., with the current developer version and in the next official release), slimgb will raise an error when being called for an ideal over the integers.
Changed upstream from Reported upstream. Little or no feedback. to Fixed upstream, in a later stable release.
In sage Singular was recently upgraded to 3.1.7.
ring rng = integer,(x,y),dp;
option("redSB");
ideal I = 4*x^2*y^2 + 2*x*y^3 + 3*x*y, 2*x^2 + x*y, 2*y^2;
slimgb(I);
//? not implemented for rings with rings as coeffients}}}
but the slimgb call in sage
sage: R.<x,y>=PolynomialRing(ZZ,2)
sage: I = R*(4*x^2*y^2+2*x*y^3+3*x*y,2*x^2+x*y,2*y^2)
sage: I.groebner_basis(algorithm='libsingular:slimgb')
succeeds. Why is that ??
if there is really a difference between strong and weak groebner basis, then at least the 'toy:buchberger','toy:buchberger2' and 'groebner_basis' documentation should be updated , hoping that nobody intermixes weak and strong groebner bases by accident. (new ticket?)
Remark: the liftstd bug seems fixed
A bug report on sage-devel made me play around with the following example:
First bug (fixed with Singular-3-1-1)
The documentation suggests that
toy:buchberger2
is supposed to return a reduced Groebner basis, but it doesn't. So, to the very least, the documentation is a little unclear.Second bug
The five algorithms return two different reduced Groebner bases. So, at least one of them must be wrong.
libsingular:std
andmagma
agree on this result:while
libsingular:slimgb
,toy:buchberger
andtoy:buchberger2
agree on this result:The following suggests that at least answer
G2
is wrong:Let us check that indeed the element
x*y^2
belongs to the original ideal:Conclusion: Under the assumption that there is no bug in reduce and the basic arithmetic, it is proven that slimgb and toy:buchberger(2) give a wrong answer.
Third bug (fixed with Singular-3-1-1)
Of course, if
G1
is a Groebner basis then all of its elements must belong to the ideal. Singular provides a command to express the Groebner basis elements as combinations of the given ideal generators:liftstd
.But
liftstd
apparently gives a wrong answer:So, up to order and sign, the answer given by
liftstd
coincides withG1
. Now, the matrixm
should transform the list of ideal generators into the Groebner basis. But it does not for the elementx^2*y
:So, there is a bug in
liftstd
as well. At least, it is possible to verify thatx^2*y
(and therefore all ofG1
) belongs to the ideal:Upstream: Fixed upstream, in a later stable release.
CC: @sagetrac-jakobkroeker @jpflori
Component: commutative algebra
Keywords: Groebner basis integer
Issue created by migration from https://trac.sagemath.org/ticket/9645