Z3Py:不相等元组的约束
Z3Py: constraint of not equal tuples
我有一堆布尔值:
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 创建一个元组类型 L
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 支持扩展到此类数据类型
但发行版不支持此类扩展。
我有一堆布尔值:
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 创建一个元组类型 L
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 支持扩展到此类数据类型 但发行版不支持此类扩展。