使用Z3获取符号值

时间:2014-04-16 09:37:00

标签: z3

请考虑以下声明。

  

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"?即,我有兴趣根据尚未使用任何特定值进行实例化的变量来获取符号值。

1 个答案:

答案 0 :(得分:0)

我不是专家,但我认为使用Z3-SMT-LIB是不可能的。但是可以使用Z3Py。

x = Int('x')
y = 10
z = x + y
print z

,输出

x + 10