Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

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