Z3通过以下选项支持最小的未饱和核检测。
(set-option :smt.core.minimize true)
如here所述。
在API文档中,仅提到了简单地使用跟踪未饱和核。是否可以通过Z3 Python API实现最小最低饱和内核检测。
答案 0 :(得分:0)
您可以使用assert_and_track
函数来实现此目的。请参阅https://github.com/Z3Prover/z3/blob/master/src/api/python/z3/z3.py#L6571-L6599,该文档的示例中有正确的示例。要告诉z3最小化内核,请使用:
s.set(':core.minimize', True)
请注意,“最小”不饱和核的概念并不存在。因为您可以拥有两个具有相同基数的不同集合,而这两个集合都可以充当unsat-core。据我所知,z3除了“尽力而为”之外,没有对“最小化”的保证。
也很相关:https://github.com/Z3Prover/z3/issues/888在策略和非核心最小化方面与其他方法不能很好地发挥作用。