我正在尝试使用z3py简化表达式,但无法找到有关不同策略的文档。我找到的最好的资源是stack overflow question,它按名称列出了所有的策略。
有人能够将我链接到有关战术的详细文档吗? 在线python教程是不够的。
或者有人可以推荐一种更好的方法来实现这一目标。
问题的一个例子是如下表达式:
x < 5, x < 4, x < 3, x = 1
我希望将其简化为x = 1
。
使用策略unit-subsume-simplify
似乎适用于此示例。
但是当我尝试更复杂的例子,例如x > 1, x < 5, x != 3, x != 4
时,我得到x > 1, x < 5, x ≠ 3, x ≠ 4
作为结果。当我想要x = 2
时。
使用z3py实现此类简化的最佳方法是什么?
谢谢马特
答案 0 :(得分:0)
可能的解决方案:
x = Int('x')
s = Solver()
s.add(x < 5, x < 4, x < 3, x == 1)
print s.check()
m = s.model()
print m
s1 = Solver()
s1.add(x > 1, x < 5, x != 3, x != 4)
print s1.check()
m1 = s1.model()
print m1
输出:
sat
[x = 1]
sat
[x = 2]
在线运行此解决方案here
答案 1 :(得分:0)
Redlog Reduce示例。请让我知道您的想法。