SAT验证器python
我正在使用python和Symphy 我有以下格式的规则:SAT验证器python,python,sympy,sat,Python,Sympy,Sat,我正在使用python和Symphy 我有以下格式的规则:或(x和(y,z))。 不幸的是,Sympysubs和xreplace函数没有提供足够快的实现来验证上述规则是否满足x=False、y=True和z=True 我如何才能有效地将这个表达式转换为其他库,给定x、y、z和一个规则,无论这个赋值是否满足规则,我都将得到True/False?在纯python中,可以通过两种方式(使用x=True/False,y=True/False,z=True/False)实现这一点: 或者(如0==Fals
或(x和(y,z))
。
不幸的是,Sympysubs
和xreplace
函数没有提供足够快的实现来验证上述规则是否满足x=False、y=True和z=True
我如何才能有效地将这个表达式转换为其他库,给定x、y、z和一个规则,无论这个赋值是否满足规则,我都将得到True/False?在纯python中,可以通过两种方式(使用
x=True/False,y=True/False,z=True/False
)实现这一点:
或者(如0==False,1==True
):
然后,您可以使用以下方法对所有组合进行迭代:
from itertools import product
for x, y, z in product((True, False), repeat=3):
print(x, y, z)
print(x or (y and z))
print(x | (y & z))
print()
为了将symphy函数转换为python表达式,您可以尝试:
希望它能像您希望的那样加快您的问题的速度…您可以在纯python中通过两种方式实现这一点(使用
x=True/False,y=True/False,z=True/False
):
或者(如0==False,1==True
):
然后,您可以使用以下方法对所有组合进行迭代:
from itertools import product
for x, y, z in product((True, False), repeat=3):
print(x, y, z)
print(x or (y and z))
print(x | (y & z))
print()
为了将symphy函数转换为python表达式,您可以尝试:
希望这能像你希望的那样加速你的问题…这些都是很好的建议,但问题是如何有效地将Symphy中的表达式转换为你建议的新形式。@JackStevens:好的,误解了,对不起。添加了一个更新。希望有帮助。谢谢你的建议,看起来不错。我试图在代码中实现它,这导致了另一个问题,我发布了另一个stackoverflow。这是一个很好的建议,但问题是如何有效地将Sympy中的表达式转换为您建议的新形式。@JackStevens:好的,误解了,抱歉。添加了一个更新。希望有帮助。谢谢你的建议,看起来不错。我试图在代码中实现它,结果导致了另一个问题,我发布了另一个stackoverflow。
from itertools import product
for x, y, z in product((True, False), repeat=3):
print(x, y, z)
print(x or (y and z))
print(x | (y & z))
print()
from sympy import lambdify, Or, And, var
x, y, z = var('x y z')
or_and = lambdify((x, y, z), Or(x, And(y, z)))
print(or_and(True, False, False))