1 | initial version |
If you change R
to have the lex
monomial ordering by PolynomialRing(QQ, order='lex')
, and then compute a Groebner basis by list(Id.groebner_basis(algorithm='singular:slimgb'))
(avoiding a Singular bug), you get a "triangular" system of equations for your variety. If it were 0-dimensional, then you could start with the last equation and get a finite number of solutions, then use those to solve the second-to-last equation and get finitely many solutions, etc., all the way down. Since the ideal is not 0-dimensional, you will instead reach some point where you have infinitely many solutions, e.g. here you get c12 + c14
where neither value has been fixed before, so you can fix one of them and continue, e.g. adding c14-1, c11-1, c4-1
makes it 0-dimensional. (To check this you have to change the monomial ordering back, to avoid the same Singular bug.) Normally one would then call .variety()
at this point, but an alternative that happens to work here is to solve symbolically:
sage: I = Id + R.ideal(c14-1, c11-1, c4-1)
sage: solve(list(map(SR,list(I.groebner_basis(algorithm='singular:slimgb')))),list(map(SR,R.gens())))[0]
[a0 == (1/2),
a1 == (-1/2),
a10 == (1/3),
a11 == (1/3),
a12 == (-1/6),
a13 == (-1/6),
a14 == (-1/6),
a15 == (-1/6),
a2 == (1/3),
a3 == (1/3),
a4 == 0,
a5 == -1/6*sqrt(3),
a6 == 1/6*sqrt(3),
a7 == 1/6*sqrt(3),
a8 == -1/6*sqrt(3),
a9 == (1/3),
b0 == -1/2*(-1)^(1/4),
b1 == 1/2*(-1)^(1/4),
b10 == (1/2*I),
b11 == (1/12),
b12 == (-1/36),
b13 == (1/6*I),
b14 == (1/36),
b15 == (1/6*I),
b2 == (-1/3),
b3 == (2/9*I),
b4 == (1/9),
b5 == 0,
b6 == (1/12),
b7 == (1/6),
b8 == (1/2*I),
b9 == (1/12*I),
c0 == 1/3*I*(-1)^(1/4),
c1 == -1/3*I*(-1)^(1/4),
c10 == (-1/6*I),
c11 == 1,
c12 == -1,
c13 == (-1/6*I),
c14 == 1,
c15 == (-1/6*I),
c2 == (-1/3),
c3 == (-1/2*I),
c4 == 1,
c5 == 0,
c6 == 1,
c7 == (1/6),
c8 == (-1/6*I),
c9 == (-1/3*I),
s2 == -sqrt(2),
s3 == -sqrt(3)]