z3 - 简化 Z3 表达式

标签 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)?

最佳答案

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

关于z3 - 简化 Z3 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30736834/

相关文章:

z3 - 使用push命令在Z3中增量求解

python - z3py 中的 if 断言

c - Z3:使用C API找到所有可能的解决方案

python - Z3 优化,严格不等式

z3 - Z3Py 中的 K-out-of-N 约束

java - Z3:解析SMTLIB2文件/字符串

z3 - 如何更改 get-model 或 get-value 输出以打印小数而不是分数

Z3Python : example of array?

logic - 使用 Z3py 对 horn 子句进行不变归纳

python - z3py 对有效的 SMT2 文件抛出解析器错误