简化Z3表达式

时间:2015-06-09 15:45:15

标签: z3 z3py

我在Python中使用z3来简化一些逻辑表达式,我有疑问。当我执行以下代码时

x = BitVec('x', 8)
e = ULT(x - 5, 10)
Then('simplify', 'propagate-values', 'ctx-solver-simplify')(e).as_expr()

我得到了结果:

Not(ULE(10, 251 + x))

但是,这相当于

And(UGE(x, 5), ULT(x, 15))

有没有办法将第一个表达式(Not)转换(简化)到第二个表达式(And)?更具体地说,是否可以向z3询问特定变量可以采用的值的范围(在此示例中x> = 5&& x< 15)?

1 个答案:

答案 0 :(得分:1)

您可以通过在一组模板中合成更简单的表达式,在Z3之上构建一个简化器。但Z3并没有尝试在许多其他方面进行这种特殊的简化。