python - Z3:Z3能告诉我算术运算是否返回具体值吗?

标签 python z3

我有一个简单的代码,如下所示:

a, b, c = BitVecs('a b c', 32)
a == b + c
c == b + 5

我们可以很容易地看到,(c - b) 返回一个具体值(数字 5),但 (a - b) 返回一些抽象值(因为 a - b == c,其值未知)。

问题是:给定像上面这样的算术运算,Z3 能否告诉我们结果是具体的还是不具体的?如果可以的话,该怎么做?

非常感谢。

最佳答案

Z3是一个定理证明器,但我们也可以将其视为一个约束求解器。我们可以将诸如a == b + c之类的表达式视为约束。 Z3 Python 界面有一个名为 solve 的命令。它试图解决一组约束。也就是说,它试图找到一个使所有约束成立的“任务”。例如,如果我们执行以下命令(也可用 here )。

a, b, c = BitVecs('a b c', 32)
solve(a == b + c, c == b + 5)

它产生解决方案:

[b = 0, a = 5, c = 5]

我们说该解决方案“满足”约束。 Z3 还有其他几个命令和 API。 有关 Z3 的更多信息,请参阅online tutorial .

关于python - Z3:Z3能告诉我算术运算是否返回具体值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16000228/

相关文章:

python - 作为装饰器的类方法

python - 匀称 OSError : Could not find lib c or load any of its variants []

python - 为什么我不能将 True 存储在 Set 中?

python - 检查公式是否为 Z3Py 中的项

python - 添加到集合中时,字符串分成单个字符

python - 提高 lmfit 中多个数据集拟合的速度?字符串调用限制

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

Z3: "qe"策略是否保留等价性或仅保留等价性?

python - z3 smt 求解器采用什么形式的输入?如何使用文件读取需要求解的方程?

c++ - 当 model_completion 设置为 false 时 Z3 会返回什么?