简化Z3中的整数公式

时间:2014-02-11 18:53:22

标签: z3

在Z3中将量词消除应用于线性算术公式h后,我得到一个30行左右的公式。事实证明,这个公式相当于h2=And(n>2, i>=0, i<=n-2),我更喜欢将其作为输出。

我试过ctx-solver-simplify;我越来越: And(Not(n <= 2), Or(Not(i >= 1), Not(n + -1*i <= 1)), i >= 0)

现在,Not(n<=2)可以更简洁地表达为n>=3Not(n + -1*i <= 1)表示为n-i>=2,而且此公式中不需要i >= 1

Repeat(Then('nnf','ctx-solver-simplify'))做得更好(摆脱i>=1)。

是否有更好的简化策略?

同样,是否有一种策略可以将Or(x==0, x==1, x==2, x==3)转换为And(x>=0,x<=3)

1 个答案:

答案 0 :(得分:0)

我目前最好的解决方案是使用Repeat(Then(OrElse('split-clause', 'nnf'), 'propagate-ineqs', 'ctx-solver-simplify')),使用最新的Z3不稳定版本(ctx-solver-simplify中的错误已得到纠正)。