Z3 发出多个(检查sat)调用,直到返回unsat

Z3 发出多个(检查sat)调用,直到返回unsat,z3,Z3,z3版本4.6的发行说明中提到了一个新特性“发出多个(检查sat)调用,直到返回unsat”。 这是否等同于ALLSAT? 在哪里可以找到此功能的其他文档或示例?否,这是为了解决此问题: z3不支持ALLSAT命令;尽管使用“断言前一个模型的否定并重新检查”循环很容易对其进行编码。大多数高级接口在SMT-Lib2的基础上提供这一层。如果您确实希望获得支持,那么最好首先说服SMTLib人员(),以便开发一种标准的方法,并由多个解算器实现。是的,这是关于优化调用的。它与AllSAT无关。ALL-SA

z3版本4.6的发行说明中提到了一个新特性“发出多个(检查sat)调用,直到返回unsat”。 这是否等同于ALLSAT?

在哪里可以找到此功能的其他文档或示例?

否,这是为了解决此问题:


z3不支持ALLSAT命令;尽管使用“断言前一个模型的否定并重新检查”循环很容易对其进行编码。大多数高级接口在SMT-Lib2的基础上提供这一层。如果您确实希望获得支持,那么最好首先说服SMTLib人员(),以便开发一种标准的方法,并由多个解算器实现。

是的,这是关于优化调用的。它与AllSAT无关。ALL-SAT没有内置方法。我同意在循环中使用check SAT并将否定的模型作为断言反馈是模仿ALLSAT的一种简单方法。然而,我可以从我的结果中看出,内部重置策略不受外部环路的影响。至少有一些来自外部的影响是很好的。此外,还有一些问题围绕着所有sat在量词存在的情况下应该如何表现。(一个常见的策略是只打印不同的前缀存在主义,一旦你找到了一个代表所有人的答案,就把其他的都放在一边。)但这些都没有得到很好的规定或普遍的认可。我认为标准(即SMTLib)和工具(z3/yices等)都有空间来设定基本期望,以实现您所提到的“下一个模型”的构建方式。