我正在计算在 QQ 环上定义的理想的 Groebner 基础。一旦我有了这个 Groebner 基,我想获得一组满足 Groebner 基方程的值。我知道全套将是理想的变体,但由于这个对象很大,我可能对找到这些值不感兴趣。在 Maple 中,在计算 Groebner 基之后,我可以在其上调用 solve() 方法,甚至可以设置我想要获得的最大解数。举个小例子:
P.<x,y,z,t>=PolynomialRing(QQ,4)
I = P.ideal(x*(x-1), y*(y-1), z*(z-1), t - x*y*z)
gb = I.groebner_basis()
在这里,我可以调用I.variety()或gb.variety()获得相同的解决方案:
sage: gbI.variety()
[{y: 0, z: 0, t: 0, x: 0},
{y: 0, z: 0, t: 0, x: 1},
{y: 1, z: 0, t: 0, x: 0},
{y: 1, z: 0, t: 0, x: 1},
{y: 0, z: 1, t: 0, x: 0},
{y: 0, z: 1, t: 0, x: 1},
{y: 1, z: 1, t: 0, x: 0},
{y: 1, z: 1, t: 1, x: 1}]
但我想知道是否可以调用类似的方法(我可以在 Maple 中执行此操作):
solve(gb,[max_sol=2])
这样我就可以获得品种的一个子集而不是整个集合。我的动机是我拥有的初始多项式系统的大小比这个例子大得多,并且在减少的 Groebner 基础上找到可行的解决方案更易于管理。我也可能对品种中的所有元素都不感兴趣。最后,如果我将 Groebner 基转换为理想本身并尝试计算该对象的多样性
gbI = ideal(gb)
gbI.variety()
我发现以下错误
RuntimeError: error in Singular function call 'groebner':
int overflow in hilb 3
error occurred in or before standard.lib::stdhilb line 299: ` intvec hi = hilb( Id(1),1,W );`
expected intvec-expression. type 'help intvec;'
leaving standard.lib::stdhilb
leaving standard.lib::groebner