115 lines
2.6 KiB
Python
115 lines
2.6 KiB
Python
|
|
|
|
# This file was *autogenerated* from the file test_f5.sage
|
|
from sage.all_cmdline import * # import sage library
|
|
|
|
_sage_const_3301 = Integer(3301); _sage_const_44 = Integer(44); _sage_const_112 = Integer(112); _sage_const_0 = Integer(0); _sage_const_1 = Integer(1); _sage_const_2 = Integer(2)
|
|
from random import randint
|
|
from tqdm import tqdm
|
|
from sage.rings.polynomial.msolve import variety as msolve_variety
|
|
|
|
F = GF(_sage_const_3301 , names=("z", ))
|
|
|
|
f_a = list(F)
|
|
|
|
# m = 32
|
|
# n = 80
|
|
|
|
# m = 44
|
|
# n = 112
|
|
|
|
# m = 72
|
|
# n = 184
|
|
|
|
# m = 8
|
|
# n = 20
|
|
|
|
# m = 2
|
|
# n = 5
|
|
|
|
m = _sage_const_44
|
|
n = _sage_const_112
|
|
|
|
|
|
print("vars: ", n)
|
|
print("eqns: ", m)
|
|
|
|
print("actual vars: ", n - m)
|
|
print("actual eqns: ", m + m)
|
|
|
|
O = random_matrix(F, (n - m), m)
|
|
|
|
output = ""
|
|
poly_m = []
|
|
|
|
z = zero_matrix(F, m, (n - m))
|
|
|
|
for i in tqdm(range(m)):
|
|
|
|
P1 = random_matrix(F, (n - m), (n - m))
|
|
|
|
for j in range(_sage_const_0 , len(P1.rows())):
|
|
for k in range(_sage_const_0 , j): P1[j, k] = _sage_const_0
|
|
P2 = random_matrix(F, (n - m), m)
|
|
P3 = -O.T * P1 * O - O.T * P2
|
|
|
|
for j in range(_sage_const_0 , len(P3.rows())):
|
|
for k in range(j+_sage_const_1 , len(P3.rows())):
|
|
P3[j, k] += P3[k, j]
|
|
P3[k, j] = _sage_const_0
|
|
|
|
for i in P1:
|
|
for j in i:
|
|
output += hex(f_a.index(j))[_sage_const_2 :]
|
|
|
|
for i in P2:
|
|
for j in i:
|
|
output += hex(f_a.index(j))[_sage_const_2 :]
|
|
|
|
for i in P3:
|
|
for j in i:
|
|
output += hex(f_a.index(j))[_sage_const_2 :]
|
|
|
|
P = block_matrix([ [P1, P2], [z, P3]])
|
|
poly_m.append(P)
|
|
|
|
v = matrix(F, n, _sage_const_1 , [randint(_sage_const_0 , _sage_const_1 ) for i in range(n)])
|
|
|
|
oil_basis = block_matrix(F, _sage_const_2 , _sage_const_1 , [O, identity_matrix(F, m)])
|
|
|
|
var_list = ','.join([f'x{i}' for i in range(n - m)])
|
|
R = PolynomialRing(F, var_list)
|
|
|
|
|
|
value = zero_matrix(R, n, _sage_const_1 )
|
|
hint = zero_matrix(R, n, _sage_const_1 )
|
|
hint2 = zero_matrix(R, n, _sage_const_1 )
|
|
|
|
for i in oil_basis.columns():
|
|
value += F.random_element() * matrix(F, n, _sage_const_1 , list(i))
|
|
hint += F.random_element() * matrix(F, n, _sage_const_1 , list(i))
|
|
hint2 += F.random_element() * matrix(F, n, _sage_const_1 , list(i))
|
|
|
|
print(value)
|
|
|
|
print()
|
|
print(n - m)
|
|
|
|
print()
|
|
for i in range(n - m):
|
|
value[i] = R(f'x{i}')
|
|
|
|
polys = []
|
|
for i in poly_m:
|
|
polys.append((value.T * i * value)[_sage_const_0 ][_sage_const_0 ])
|
|
polys.append((value.T * (i + i.T) * hint)[_sage_const_0 ][_sage_const_0 ])
|
|
polys.append((value.T * (i + i.T) * hint2)[_sage_const_0 ][_sage_const_0 ])
|
|
|
|
I = R.ideal(*polys)
|
|
|
|
|
|
|
|
print(msolve_variety(I, F, proof=False))
|
|
|
|
|