我正在玩未经解释的排序和功能,并且无法理解量化公式如何与空模型相互作用。这里(也在这里http://rise4fun.com/Z3Py/6ets)是一些简单的例子,有点让我困惑:
[∀v : False]
是不可取的,而“直观地”它适用于空模型。[∃v : v = v]
会产生一个空模型,但没有令人满意的任务。[∃v : v = v]
,以某种方式阻止z3生成空模型。 [∃v, v1 : v = v1]
就是这样一个例子。例如,如果我们将这样的公式添加到求解器中然后尝试创建类似于allsat过程的东西(添加越来越多的约束来排除越来越多的模型),那么在获得空模型之前我们会遇到不满。那么,请您介绍一下描述z3如何处理量词和空模型的文件/论文?
另外,如果我选择仅将注意力限制在非空模型上,那么问z3的正确方法是什么?像[∃v, v1 : v = v1]
这样的事情似乎可以解决问题,但还有更好的方法吗?
答案 0 :(得分:3)
Z3不考虑空模型。这是一阶逻辑中的标准假设。有关详细信息,请搜索“一阶逻辑空模型”,您将获得许多链接,解释此约定的动机。 wikipedia page for first-order logic有一个简短的描述(“空域”部分)。
此外,我们不应该将[]
与空模型混淆。只是说为了满足输入公式,Z3不需要为输入公式中的任何未解释符号分配解释。 Z3仅显示满足公式所需的符号的解释。例如,公式[∃v : v = v]
不包含任何未解释的符号,则Z3只显示空作业 []
。