使用Z3 Python API生成最小的unsat核心

时间:2019-05-07 11:32:28

标签: z3 z3py unsatcore

Z3通过以下选项支持最小的未饱和核检测。

(set-option :smt.core.minimize true)

here所述。

在API文档中,仅提到了简单地使用跟踪未饱和核。是否可以通过Z3 Python API实现最小最低饱和内核检测。

1 个答案:

答案 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在策略和非核心最小化方面与其他方法不能很好地发挥作用。