# Solving Groebner Basis of an ideal that includes parameters with order=lex yields non triangular equations

From this reference, it seems that a Groebner basis with respect to lexicographic order should yield a 'triangular system': www dot scholarpedia.org/article/Groebner_basis. My system has three equations and three unknowns, which I want to transform into a series of three 1-D root finding problems.

R.<x0,x1,x2,x3,x4,x5,x6,x7,x8> = PolynomialRing(QQ)
F=R.fraction_field()
S.<x9,x10,x11> = PolynomialRing(F,order='lex');

I = S.ideal(
-x7*x10*x9 + x8*x2*x11**2 + x3*x0*x11 - x4*x10,
-x7*x10*x9 + x8*x2*x11**2 + 2*x5*x1*x11**2 - 2*x6*x9**2,
2*x7*x10*x9 - 2*x8*x2*x11**2 - x3*x0*x11 + x4*x10 - 2*x5*x1*x11**2 + 2*x6*x9**2
)

B = I.groebner_basis()
print('\n\n'.join(map(str,B)))


This yields four equations (rather than 3) which do not seem to exhibit this triangular property (first three equations mention all three variables x9,x10,x11, and the last one involves both x9 and x10).

x9^2 + ((-x4)/(2*x6))*x10 + ((-2*x1*x5)/(2*x6))*x11^2 + x0*x3/(2*x6)*x11

x9*x10 + x4/x7*x10 + ((-x2*x8)/x7)*x11^2 + ((-x0*x3)/x7)*x11

x9*x11^2 + 2*x0*x3/(2*x2*x8)*x9*x11 + ((-x4*x7)/(2*x2*x6*x8))*x10^2 + ((-2*x1*x5*x7)/(2*x2*x6*x8))*x10*x11^2 + x0*x3*x7/(2*x2*x6*x8)*x10*x11 + 2*x4^2/(2*x2*x7*x8)*x10 + ((-2*x4)/(2*x7))*x11^2 + ((-2*x0*x3*x4)/(2*x2*x7*x8))*x11

x10^3 + 2*x1*x5/x4*x10^2*x11^2 + ((-x0*x3)/x4)*x10^2*x11 + ((-2*x4*x6)/x7^2)*x10^2 + 4*x2*x6*x8/x7^2*x10*x11^2 + 4*x0*x3*x6/x7^2*x10*x11 + ((-2*x2^2*x6*x8^2)/(x4*x7^2))*x11^4 + ((-4*x0*x2*x3*x6*x8)/(x4*x7^2))*x11^3 + ((-2*x0^2*x3^2*x6)/(x4*x7^2))*x11^2


Do I have a misunderstanding about what to expect from Sage's output? Or is there a test to see if my system of equations is pathological in some way?

If I ignore the fact that variables x1...x8 are parameters, I am surprised to get a basis of three equations which is also not triangularizable with respect to x9,x10,x11.

S.<x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11> = PolynomialRing(QQ,order='lex');

I = S.ideal(
-x7*x10*x9 + x8*x2*x11**2 + x3*x0*x11 - x4*x10,
-x7*x10*x9 + x8*x2*x11**2 + 2*x5*x1*x11**2 - 2*x6*x9**2,
2*x7*x10*x9 - 2*x8*x2*x11**2 - x3*x0*x11 + x4*x10 - 2*x5*x1*x11**2 + 2*x6*x9**2
)

B = I.groebner_basis()
print('\n\n'.join(map(str,B)))

>>x0*x3*x6*x9^2 + 1/2*x0*x3*x7*x9*x10 - x1*x4*x5*x10*x11 - x1*x5*x7*x9*x10*x11 - 1/2*x2*x4*x8*x10*x11 + x2*x6*x8*x9^2*x11

x0*x3*x11 + x2*x8*x11^2 - x4*x10 - x7*x9*x10

x1*x5*x11^2 + 1/2*x2*x8*x11^2 - x6*x9^2 - 1/2*x7*x9*x10

edit retag close merge delete

Sort by » oldest newest most voted My system has three equations and three unknowns, which I want to transform into a series of three 1-D root finding problems.

For this to be possible the system must have a finite number of solutions, but your system has an infinite number of solutions.

is there a test to see if my system of equations is pathological in some way?

You can compute I.dimension(). (By the way, this uses the Gröbner basis.) For 0-dimensional ideals in $\mathbb{Q}[x_1,\ldots,x_n]$ (like the Scholarpedia example) there are finitely many solutions over $\mathbb{C}$, and the output will be what you expect.

You can also call I.variety(ring=R) to solve the system of equations over R (e.g. CC or RR for approximate solutions, AA or QQbar for exact solutions), which will give an error if the ideal is not 0-dimensional.

more