Python 如何从z3py中的Z3解算器对象中获取现有约束?

Python 如何从z3py中的Z3解算器对象中获取现有约束?,python,z3,z3py,Python,Z3,Z3py,例如,我想从s中获取现有约束,并将其放入优化对象中 from z3 import * a = Int('a') x = Int('x') b = Array('I', IntSort(), IntSort()) s = Solver() s.add(a >= 0) s.add(x == 0) s.add(Select(b, 0) == 10) s.add(Select(b, x) >= a) opt = Optimize() opt.add(s.constraints) ob

例如,我想从s中获取现有约束,并将其放入优化对象中

from z3 import *

a = Int('a')
x = Int('x')
b = Array('I', IntSort(), IntSort())
s = Solver()

s.add(a >= 0)
s.add(x == 0)
s.add(Select(b, 0) == 10)
s.add(Select(b, x) >= a)

opt = Optimize()
opt.add(s.constraints)

obj1 = opt.maximize(a)
obj2 = opt.minimize(a)

opt.set('priority', 'box')   # Setting Boxed Multi-Objective Optimization

is_sat = opt.check()
assert is_sat

print("Max(a): " + str(obj1.value()))
print("Min(a): " + str(obj2.value()))
那么结果是这样的

~$ python test.py 
Max(a): 10
Min(a): 0

如果希望将所有约束的向量添加到
解算器
(或
优化
)实例,可以使用方法
断言()

输出:

~$python test.py
最高(a):10
最小(a):0

如果希望将所有约束的向量添加到
解算器
(或
优化
)实例,可以使用方法
断言()

输出:

~$python test.py
最高(a):10
最小(a):0
 |  assertions(self)
 |      Return an AST vector containing all added constraints.
 |      
 |      >>> s = Solver()
 |      >>> s.assertions()
 |      []
 |      >>> a = Int('a')
 |      >>> s.add(a > 0)
 |      >>> s.add(a < 10)
 |      >>> s.assertions()
 |      [a > 0, a < 10]