SMT-LIB 2.0阵列初始化和操作有点麻烦。如下面的代码所示,http://rise4fun.com/Z3/kxmrd。
使用Python / C / C ++ /。Net API而不是SMT-LIB 2.0,是否有任何优雅的方式来初始化或操作数组?
答案 0 :(得分:2)
您可以使用常规的Python结构(如for i in range(n)
)来实现您的目标:
s = Solver()
a = Array('a', IntSort(), IntSort())
xs = [20, 23, 27, 12, 19, 31, 41, 7]
for i in range(len(xs)):
s.add(Select(a, i) == xs[i])
a1 = Array('a1', IntSort(), IntSort())
s.add(a1 == Store(a, 3,9 ))
print s.check()
m = s.model()
for d in m.decls():
print "%s = %s" % (d.name(), m[d])
在线运行here。
如果你能写出类似s.add(a == xs)
或s.add(a.startsWith(xs))
的内容会很好,但我不知道这是否可行。