SAT验证者python

时间:2017-02-03 10:16:59

标签: python sympy sat

我正在使用python和Sympy。

我有以下格式的规则:Or(x,And(y,z))。 不幸的是,Sympy subsxreplace函数没有提供足够快的实现来验证上述规则是否满足x = False,y = True和z = True。

如何有效地将此表达式转换为给定x,y,z和规则的其他库,无论此赋值是否满足规则,我都将获得True / False?

1 个答案:

答案 0 :(得分:0)

你可以通过两种方式在纯python中做到这一点(使用x=True/False, y=True/False, z=True/False):

x or (y and z)

或(作为0 == False, 1 == True):

x | (y & z)

然后你可以用以下方法迭代所有组合:

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()

为了将sympy函数转换为python表达式,您可以尝试lambdify module

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))

希望能够像你希望的那样加快解决问题...