我正在阅读这篇研究论文:http ://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.365.9467&rep=rep1&type=pdf
因此,总而言之,他们正在通过实例化(通过 E 匹配)将量化的 horn 子句转换为无量词的 horn 子句,结果验证条件(VC)在论文的图 6 中给出。
根据我的理解,本文建议将图 6 中生成的 VC 传递给任何 SMT 求解器,因为 VC 现在没有量词并且可以由任何 SMT 求解器求解。(如果我在这方面错了,请纠正我。)
因此,根据这种理解,我尝试使用 z3py 编写图 6 VC。
编辑:我的目标是找到图 6 中 VC 的解决方案。我应该添加什么作为 z3 推断的不变 P 的返回类型?有没有更好的方法使用 z3 来做到这一点?感谢您的时间!
这是代码:
from z3 import *
Z = IntSort()
B = BoolSort()
k0, k1, k2, N1, N2 = Ints('k0, k1, k2, N1, N2')
i0, i1, i2 = Ints('i0, i1, i2')
P = Function('P', B, Z)
a0 = Array('a0', Z, B)
a1 = Array('a1', Z, B)
a2 = Array('a2', Z, B)
prove(And(Implies(i0 == 0, P( Select(a0,k0), i0) ),
Implies(And(P(Select(a1, k1),i1), i1<N1), P(Select(Store(a1, i1, 0)), i1+1) ),
Implies(And(P(Select(a2,k2), i2), not(i2<N2)), Implies(0<=k2<=N2, a2[k2]) )))