z3' check() 可以做什么?

What can z3' check() do?

最近遇到一个使用z3的C#项目。我发现当程序运行到check()时,会持续很长时间,以至于解法得不到结果。 更具体地说,这个项目至少有 40 个约束和至少 8 个变量。约束和变量的数量是与输入相关的倍数。 只有输入为1的时候才能解决,但是只要输入大于1就会卡在check()中。然而,实际上,我的输入必须大于1。

请问check()有什么用。如果有其他方法可以替代,甚至可以删除。 (我试过删掉,意外的是当输入大于1的时候,可以很快得到结果。)

调用 check 确保给定的约束是可满足的。如果你不调用 check,那么显然 z3 不会为你检查任何东西,所以速度更快也就不足为奇了。

关于是否可以删除对check的调用;好吧,您还没有告诉我们这个项目是什么,也没有告诉我们它使用 z3 做什么。但总的来说,没有;您无法删除对 check 的调用。它会 return satunsat 作为结果(当然,它也可能无法终止或 return unknown 取决于断言的约束。 ) 然后你会根据调用的结果进行。

我建议查看您的代码如何使用调用结果进行检查。或者第一时间联系开发商。