Z3Py:不等于元组的约束

时间:2016-09-25 23:26:56

标签: z3 z3py

我有很多Bools:

a=Bool('a')
...
z=Bool('z')

如何将这些bool中的一些包装到元组中然后添加关于它们不相等的约束?

我试过了:

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

但这不起作用。

1 个答案:

答案 0 :(得分:1)

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支持扩展到这样的数据类型 但是发行版不支持此类扩展。