最佳阵列操作API

时间:2013-04-30 08:06:05

标签: z3

SMT-LIB 2.0阵列初始化和操作有点麻烦。如下面的代码所示,http://rise4fun.com/Z3/kxmrd

使用Python / C / C ++ /。Net API而不是SMT-LIB 2.0,是否有任何优雅的方式来初始化或操作数组?

1 个答案:

答案 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))的内容会很好,但我不知道这是否可行。