简化Z3表达式

简化Z3表达式,z3,z3py,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)转换(简化)为第二个表达

我在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)?

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