Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SAT solver SAGE_Python_Sage - Fatal编程技术网

Python SAT solver SAGE

Python SAT solver SAGE,python,sage,Python,Sage,我试图理解为什么解算器在这段代码中找不到解决方案 R.<x,y,z,w> = BooleanPolynomialRing() S = PolynomialSequence([x*y+z,x+y]) sol = S.solve(); sol [] R.=布尔多项式环() S=多项式序列([x*y+z,x+y]) sol=S.solve();溶胶 [] 对我来说,解是x=1;y=1和z=1,或者我错了?通过仔细阅读我们正在使用的solve方法的文档,可以找到这个返回值的解释(以及如何

我试图理解为什么解算器在这段代码中找不到解决方案

R.<x,y,z,w> = BooleanPolynomialRing()
S = PolynomialSequence([x*y+z,x+y])
sol = S.solve(); sol
[]
R.=布尔多项式环()
S=多项式序列([x*y+z,x+y])
sol=S.solve();溶胶
[]

对我来说,解是x=1;y=1和z=1,或者我错了?

通过仔细阅读我们正在使用的
solve
方法的文档,可以找到这个返回值的解释(以及如何获得更令人满意的返回值),但我同意你的说法,这个返回值令人费解

要访问该方法的文档,请键入
S.solve?
;要访问源代码,请键入
S.solve???
。这还将显示定义此方法的文件,然后您可以在系统上或在上联机读取此文件

作为参考,我使用Sage 6.3。删除不起作用的
w
,通过编写
Sequence
稍微简化,并且不给解决方案命名,您的示例变成:

sage: R.<x,y,z> = BooleanPolynomialRing()
sage: S = Sequence([x * y + z, x + y])
sage: S.solve()
[]
这是因为此
solve
方法有一个可选参数
remove_linear_variables
,默认情况下设置为
True
,该参数将变量的所有线性引用移除到方程中。在我们的例子中,这只是删除了所有的方程

这个
solve
方法的另一个可能令人惊讶的特性是,如果多项式序列为空,它将返回一个空列表:

sage: S = S[0:]
sage: S.solve()
(然而有人可能会争辩说,任何东西都是方程空列表的解决方案)

要获得多项式序列的解,请执行以下操作:

sage: S.solve(eliminate_linear_variables=False)
[{z: 0, y: 0, x: 0}]
这里我们只有一个解决方案。这是因为
solve
方法的另一个可选参数
n
表示最多返回
n
个解决方案,默认设置为1。将其设置为
Infinity
以获得所有解决方案

sage: obvious_0 = {x: 0, y: 0, z: 0}
sage: obvious_1 = {x: 1, y: 1, z: 1}
sage: S.subs(obvious_0)
[0, 0]
sage: S.subs(obvious_1)
[0, 0]
sage: S.solve(n=Infinity,eliminate_linear_variables=False)
[{z: 0, y: 0, x: 0}, {z: 1, y: 1, x: 1}]