z3py表达式简化

时间:2013-07-18 02:49:38

标签: z3 z3py

我正在尝试使用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实现此类简化的最佳方法是什么?

My current solution

谢谢马特

2 个答案:

答案 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示例。请让我知道您的想法。

enter image description here