处理空模型的量化公式的正确方法是什么?

时间:2013-03-01 01:05:32

标签: z3 smt first-order-logic

我正在玩未经解释的排序和功能,并且无法理解量化公式如何与空模型相互作用。这里(也在这里http://rise4fun.com/Z3Py/6ets)是一些简单的例子,有点让我困惑:

  1. [∀v : False]是不可取的,而“直观地”它适用于空模型。
  2. 检查[∃v : v = v]会产生一个空模型,但没有令人满意的任务。
  3. 某些公式,似乎等同于[∃v : v = v],以某种方式阻止z3生成空模型。 [∃v, v1 : v = v1]就是这样一个例子。例如,如果我们将这样的公式添加到求解器中然后尝试创建类似于allsat过程的东西(添加越来越多的约束来排除越来越多的模型),那么在获得空模型之前我们会遇到不满。
  4. 那么,请您介绍一下描述z3如何处理量词和空模型的文件/论文? 另外,如果我选择仅将注意力限制在非空模型上,那么问z3的正确方法是什么?像[∃v, v1 : v = v1]这样的事情似乎可以解决问题,但还有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

Z3不考虑空模型。这是一阶逻辑中的标准假设。有关详细信息,请搜索“一阶逻辑空模型”,您将获得许多链接,解释此约定的动机。 wikipedia page for first-order logic有一个简短的描述(“空域”部分)。

此外,我们不应该将[]与空模型混淆。只是说为了满足输入公式,Z3不需要为输入公式中的任何未解释符号分配解释。 Z3仅显示满足公式所需的符号的解释。例如,公式[∃v : v = v]不包含任何未解释的符号,则Z3只显示空作业 []