Z3Py:不相等元组的约束

Z3Py:不相等元组的约束,z3,z3py,Z3,Z3py,我有一大堆傻事: a=Bool('a') ... z=Bool('z') 如何将其中一些布尔值打包到元组中,然后对它们的非相等性添加约束 我试过: tuple1=(a,b,c,d) tuple2=(e,f,g,h) # so far so good s=Solver() s.add(tuple1 != tuple2) 但是这不起作用。python元组不会反映到Z3元组中。 您可以通过以下方式为Z3创建元组类型 from z3 import * a,b,c,d,e,f,g,h = Ints('

我有一大堆傻事:

a=Bool('a')
...
z=Bool('z')
如何将其中一些布尔值打包到元组中,然后对它们的非相等性添加约束

我试过:

tuple1=(a,b,c,d)
tuple2=(e,f,g,h)
# so far so good
s=Solver()
s.add(tuple1 != tuple2)

但是这不起作用。

python元组不会反映到Z3元组中。 您可以通过以下方式为Z3创建元组类型

from z3 import *
a,b,c,d,e,f,g,h = Ints('a b c d e f g h')

tuple = Datatype('tuple')
tuple.declare('tuple',('1', IntSort()), ('2', IntSort()), ('3', IntSort()), ('4', IntSort()))
tuple = tuple.create()
tuple1=tuple.tuple(a,b,c,d)
tuple2=tuple.tuple(e,f,g,h)
# so far so good
s=Solver()
s.add(tuple1 != tuple2)
print s.check()
print s.model()
在本例中,您得到了Z3理解的元组分离质量。 Z3不理解!=或==python元组之间的运算符。 也许可以将python支持扩展到此类数据类型
但是发行版不支持这种扩展。

只有一个问题:我可以用数组替换元组吗,数组的大小将在运行时设置?然后填写并比较?