Jupyter notebook Z3Py解算器在Jupyter中产生不同的结果

Jupyter notebook Z3Py解算器在Jupyter中产生不同的结果,jupyter-notebook,z3,z3py,Jupyter Notebook,Z3,Z3py,我正在通过提供的Jupyter笔记本学习如何使用Z3Py,从guide.ipynb开始。在运行布尔逻辑部分中包含的以下示例代码时,我注意到一些奇怪的事情 p=Bool'p' q=布尔'q' r=布尔'r' solveimplessp,q,r==Notq,OrNotp,r 我第一次在Jupyter笔记本上运行它时,它会产生结果[p=False,q=True,r=False]。但是如果我再次运行这段代码或者在Jupyter之外运行,我会得到结果[q=False,p=False,r=True] 为了得

我正在通过提供的Jupyter笔记本学习如何使用Z3Py,从guide.ipynb开始。在运行布尔逻辑部分中包含的以下示例代码时,我注意到一些奇怪的事情

p=Bool'p' q=布尔'q' r=布尔'r' solveimplessp,q,r==Notq,OrNotp,r 我第一次在Jupyter笔记本上运行它时,它会产生结果[p=False,q=True,r=False]。但是如果我再次运行这段代码或者在Jupyter之外运行,我会得到结果[q=False,p=False,r=True]


为了得到这些不同的结果,我做错了什么吗?此外,由于笔记本上没有说明,哪种解决方案实际上是正确的?

如果您同时获得两个结果,即布尔变量的赋值,您将看到每个赋值集都满足您的约束。因此,这两个结果都是正确的

在不同的平台/环境中获得不同的结果这一事实可能很奇怪,但可以解释:SMT解算器通常在其解算过程中使用启发式,这些启发式通常是随机的,不同的环境可能产生不同的随机种子


一句话:这一切都很好:-

听说solve只打印一个解决方案很好,我担心我弄坏了什么。是否有任何内置功能可以打印所有可能的解决方案,或者我必须执行如中所示的操作?@JAKZero AFAIK,手动迭代是获得所有可能解决方案的唯一方法