【发布时间】:2017-07-20 21:18:11
【问题描述】:
有什么方法可以让下面的代码工作,并打印出一个有效的 unsat core?
from z3 import *
a = Int('a')
b = Int('b')
s = Solver()
s.add(a == 1)
s.add(a == 2)
s.add(b == 3)
s.check()
# This prints [], and I would like it to print [a == 1, a == 2]
print(s.unsat_core())
我知道我可以这样做:
from z3 import *
a = Int('a')
b = Int('b')
s = Solver()
s.assert_and_track(a == 1, 'p1')
s.assert_and_track(a == 2, 'p2')
s.assert_and_track(b == 3, 'p3')
s.check()
# This prints [p1, p2]
print(s.unsat_core())
但对于我正在从事的实际项目,遍历并为每个约束命名会很痛苦(由于它们的体积以及它们的生成方式。)
【问题讨论】: