我们可以限制z3中每个变量的值范围吗?

我们可以限制z3中每个变量的值范围吗?,z3,z3py,Z3,Z3py,例如,我有一个约束x+y>100。我不希望z3给我x的值是1或2,我也不希望z3给我y的值是1或2 所以,x和y可以是除1或2之外的任何数字 我们能对z3实施这样的限制吗 谢谢 当然。。只需断言x>2和y>2。这里是z3py: from z3 import * x = Int('x') y = Int('y') s = Solver() s.add (x > 2) s.add (y > 2) s.add (x+y > 100) s.check() print s.mode

例如,我有一个约束x+y>100。我不希望z3给我x的值是1或2,我也不希望z3给我y的值是1或2

所以,x和y可以是除1或2之外的任何数字

我们能对z3实施这样的限制吗

谢谢

当然。。只需断言x>2和y>2。这里是z3py:

from z3 import *

x = Int('x')
y = Int('y')

s = Solver()
s.add (x > 2)
s.add (y > 2)
s.add (x+y > 100)

s.check()
print s.model()
Z3打印:

$ python a.py
[y = 3, x = 98]

如果我有很多这样的限制,那会增加计算的复杂性吗?例如,如果我希望x不是1,3,100,等等,对于n个术语,n是相对巨大的。它会极大地降低计算速度吗?不尝试就无法判断:还取决于约束的复杂性。但是,如果它们都是这样简单的比较,我相信z3会做得很好。试一试,如果它表现不好,我们可以进一步研究。如果我把这些限制放在前面,而不是后面,理论上会有不同吗?顺序应该不重要,真的。我想知道你是否有其他发现。