Z3 最佳数组操作API

Z3 最佳数组操作API,z3,Z3,SMT-LIB 2.0数组的初始化和操作有点麻烦。正如下面的代码所解释的那样 使用Python/C/C++/.NETAPI而不是SMT-LIB2.0,是否有任何优雅的方法来初始化或操作数组 您可以使用常规的Python构造,例如范围(n)中的i的,来实现您想要的: s=Solver() a=数组('a',IntSort(),IntSort()) xs=[20,23,27,12,19,31,41,7] 对于范围内的i(len(xs)): s、 添加(选择(a,i)=xs[i]) a1=数组('a1

SMT-LIB 2.0数组的初始化和操作有点麻烦。正如下面的代码所解释的那样


使用Python/C/C++/.NETAPI而不是SMT-LIB2.0,是否有任何优雅的方法来初始化或操作数组

您可以使用常规的Python构造,例如范围(n)中的i的
,来实现您想要的:

s=Solver()
a=数组('a',IntSort(),IntSort())
xs=[20,23,27,12,19,31,41,7]
对于范围内的i(len(xs)):
s、 添加(选择(a,i)=xs[i])
a1=数组('a1',IntSort(),IntSort())
s、 加(a1==存储(a,3,9))
打印s.检查()
m=s.模型()
对于m.decls()中的d:
打印“%s=%s”%(d.name(),m[d])
在线运行它

如果您可以编写类似于
s.add(a==xs)
s.add(a.startsWith(xs))
的内容,那就太好了,但我不知道这是否可行