Polynomial system without solution in char. 0: classification of char. p with solution
Let r be an integer and let S be a finite set of polynomials f∈Q[x1,…,xr]. Assume that the ideal I(S) generated by S is Q[x1,…,xr] itself, i.e. the Groebner basis is trivial (no solution in char. 0). Then we can lift 1, i.e. for all f∈S there is kf∈Q[x1,…,xr] such that ∑f∈Skff=1.
For simplicity, assume that S⊂Z[x1,…,xr]. Let Sp⊂GF(p)[x1,…,xr] be the set of polynomials in S modulo p. The problem here is how to classify all the prime numbers p for which the ideal I(Sp) is not GF(p)[x1,…,xr], i.e. the Groebner basis is not trivial (solution in char. p). Let PS be the set of all such primes.
More precisely, the problem is how to get PS in practice, because in theory, we just need to check every element of the finite set of prime divisors of the denominators of the (simplified) rational coefficients of kf, for all f in S.
I am interested in the system in the function TwoParallel in Appendix (slightly different from the one in this post).
sage: %time TwoParallel(0)
CPU times: user 48.5 s, sys: 0 ns, total: 48.5 s
Wall time: 48.5 s
[1]
Here is the expected classification for p<107:
sage: P=Primes()
sage: L=[]
....: for p in range(10000000): # about 1 day of computation
....: if p in P and p!=5:
....: G=TwoParallel(p)
....: if G!=[1]:
....: L.append(p)
sage: L
[11, 17, 29, 41, 1979, 2767, 5791, 13469, 20681]
As 20681≪107, we could naively guess that there is no other such prime p, but it is not true...
The following strategy due to Ricardo Buring (see this answer, where the system is slightly different) provides other such p>107: let M be the multiplication matrix on the normal basis associated to C1+C2, of the extra polynomial. The numerator of det is equal to n^2, with the following prime factorization for n:
n = 11^4 * 17^2 * 1979 * 2767 * 5791 * 13469 * 20681 *
4151025112783 * 15929905087813 * 2628354959317319 *
21815977082618267790114673 * 253027658769045762395418314237453 *
7255303910453681802448954810627649 * 3770507507964245954661482843443342675673959607
TwoParallel does not map to trivial from p dividing n, but the converse is not true (see p = 29, 41).
The problem is that we cannot in practice lift 1 from A1+A2+extra, but only from C1+C2+extra (see how in the answers of the post mentioned above). It seems hard to lift C1 from A1, the coefficients may be colossal.
Appendix
def TwoParallel(p):
if p==0:
F=QQ
else:
F=GF(p)
R1.<u0,u1,u2,v0,v1,v2,v3,v4,v5,v6>=PolynomialRing(F,10)
A1=[u0+7/F(5)*u1+7/F(5)*u2-4/F(125),
5*v0+5*v1+7*v3+7*v5+1/F(5),
25*v0^2+25*v1^2+35*v3^2+35*v5^2-4/F(5),
5*v0^3+5*v1^3+7*v3^3+7*v5^3-v0^2+1/F(125),
5*v0*v1^2+5*v1*v2^2+7*v3*v4^2+7*v5*v6^2+1/F(125),
5*u0*v1-v1^2+7*u1*v3+7*u2*v5+1/F(125),
5*v1+5*v2+7*v4+7*v6+1/F(5),
25*v0*v1+25*v1*v2+35*v3*v4+35*v5*v6+1/F(5),
5*v0^2*v1+5*v1^2*v2+7*v3^2*v4+7*v5^2*v6-v1^2+1/F(125),
25*v1^2+25*v2^2+35*v4^2+35*v6^2-4/F(5),
5*v1^3+5*v2^3+7*v4^3+7*v6^3-u0+1/F(125),
5*u0*v2-v2^2+7*u1*v4+7*u2*v6+1/F(125)]
Id1=R1.ideal(A1)
G1=Id1.groebner_basis()
C1=[g for g in G1]
R2.<y0,y1,y2,z0,z1,z2,z3,z4,z5,z6>=PolynomialRing(F,10)
A2=[y0+7/F(5)*y1+7/F(5)*y2-4/F(125),
5*z0+5*z1+7*z3+7*z5+1/F(5),
25*z0^2+25*z1^2+35*z3^2+35*z5^2-4/F(5),
5*z0^3+5*z1^3+7*z3^3+7*z5^3-y0+1/F(125),
5*y0*z0-z0^2+7*y1*z3+7*y2*z5+1/F(125),
5*z0*z1^2+5*z1*z2^2+7*z3*z4^2+7*z5*z6^2-z1^2+1/F(125),
5*z1+5*z2+7*z4+7*z6+1/F(5),
25*z0*z1+25*z1*z2+35*z3*z4+35*z5*z6+1/F(5),
5*z0^2*z1+5*z1^2*z2+7*z3^2*z4+7*z5^2*z6+1/F(125),
5*y0*z1-z1^2+7*y1*z4+7*y2*z6+1/F(125),
25*z1^2+25*z2^2+35*z4^2+35*z6^2-4/F(5),
5*z1^3+5*z2^3+7*z4^3+7*z6^3-z2^2+1/F(125)]
Id2=R2.ideal(A2)
G2=Id2.groebner_basis()
C2=[g for g in G2]
R.<u0,u1,u2,v0,v1,v2,v3,v4,v5,v6,y0,y1,y2,z0,z1,z2,z3,z4,z5,z6>=PolynomialRing(F,20)
C=C1+C2+[5*u0*z2 + 7*u1*z4 + 7*u2*z6 - u0 + 1/F(125)] # extra polynomial
Id=R.ideal(C)
G=Id.groebner_basis()
return G