请考虑以下声明。
y:= 10
z:= x + y
执行这两个陈述之后" z"有价值" x + 10"在哪里" x"代表一种象征价值;这些符号值在程序验证中很重要 - 例如,使用Dijkstra最弱的前置条件方法来计算路径特征。
现在,请考虑Z3的以下代码。
(declare-const x Int)
(declare-const y Int)
(declare-const z Int)
(assert (= y 10))
(assert (= z (+ x y)))
(check-sat)
(get-value (z))
它产生以下输出,因为它考虑了解释的位置" y"有10和" x"值为0.
sat
((z 10))
有什么方法可以让Z3产生输出" x + 10"?即,我有兴趣根据尚未使用任何特定值进行实例化的变量来获取符号值。
答案 0 :(得分:0)
我不是专家,但我认为使用Z3-SMT-LIB是不可能的。但是可以使用Z3Py。
x = Int('x')
y = 10
z = x + y
print z
,输出
x + 10