Z3Py中的模型计数

时间:2013-10-24 23:36:47

标签: z3 z3py

我试图通过Z3计算令人满意的作业数量。我想知道Z3是否提供此类信息。如果是这样,我如何计算Z3中的模型,尤其是Z3Py中的模型?

2 个答案:

答案 0 :(得分:2)

不,默认情况下此类信息不可用。但是,您可以通过将模型生成功能与添加断言相结合,轻松地在任何API中实现此(假设模型数量有限),以防止为将来的分配赋予与过去模型相同的值。有关完成此操作的Z3py脚本,请参阅以下答案:

Z3: finding all satisfying models

要计算模型,只需在循环中添加一个计数器,直到它变得不饱和,这样就可以得到模型的数量。

答案 1 :(得分:1)

虽然泰勒的答案会给你满意的作业数量,但它会迭代所有作业。原则上,可以在没有这么昂贵的迭代的情况下完成它,但Z3不提供它。

有命题逻辑的高效模型计数器,与SAT中使用的语言相同(搜索sharpSAT以找到这样的系统),但据我所知,没有可用的模型计数器模理论。