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

Z3 对于空模型,处理量化公式的正确方法是什么?,z3,smt,first-order-logic,Z3,Smt,First Order Logic,我在玩未被理解的排序和函数,不能完全理解量化公式是如何与空模型交互的。这里(也是这里)有一些简单的例子让我有些困惑: [∀v:False]是unsat,而“直观地”它适用于空模型 检查[∃v:v=v]生成一个空模型,而该模型没有令人满意的赋值 一些公式,似乎相当于[∃v:v=v],以某种方式阻止z3生成空模型[∃v、 v1:v=v1]就是这样一个例子。例如,如果我们将此类公式添加到解算器中,然后尝试创建类似于allsat过程的内容(添加越来越多的约束以排除越来越多的模型),我们将在获得空模型之前

我在玩未被理解的排序和函数,不能完全理解量化公式是如何与空模型交互的。这里(也是这里)有一些简单的例子让我有些困惑:

  • [∀v:False]
    是unsat,而“直观地”它适用于空模型
  • 检查
    [∃v:v=v]
    生成一个空模型,而该模型没有令人满意的赋值
  • 一些公式,似乎相当于
    [∃v:v=v]
    ,以某种方式阻止z3生成空模型<代码>[∃v、 v1:v=v1]就是这样一个例子。例如,如果我们将此类公式添加到解算器中,然后尝试创建类似于allsat过程的内容(添加越来越多的约束以排除越来越多的模型),我们将在获得空模型之前遇到unsat
  • 所以,你能让我参考一下任何描述z3如何处理量词和空模型的文档/论文吗?
    另外,如果我选择将注意力限制在非空模型上,那么向z3询问的正确方法是什么?像
    [∃V,V1:V= V1] 似乎有诀窍,但有更好的方法吗?

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

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