跳转到内容

计算机科学家逻辑/谓词逻辑/SATCHMO

来自维基教科书,开放的世界,开放的书籍

SATCHMO 定理证明器是最早使用模型生成的系统之一,即自下而上的证明过程。该证明器由一个小型的 Prolog 程序给出,该程序实现了一个表格证明过程。一个限制是,它需要范围受限公式。

定义 30

[编辑 | 编辑源代码]

一阶子句 称为 *范围受限*,如果出现在头部 中的每个变量也出现在主体 中。

  1. 将子句转换为范围受限形式
  2. 在 Prolog 数据库中断言范围受限子句和 dom 子句。
  3. 调用 satisfiable
kill satisfiable :-    assume(X) :- asserta(X).     
       (Head <- Body)            assume(X) :-  
       Body, not Head, !,          retract(X), !, fail.  
       component(HLit, Head),      component(E, (E ; _)).      
       assume(HLit),               component(E, (_ ; R)) :-    
       not false,                   !, component(E, R).   
       satisfiable.                component(E, E).  
  satisfiable.

通过级别饱和修改实现一阶完备性。该证明过程在地面情况下实现了超表格。

超表格 - 地面情况

[编辑 | 编辑源代码]

所有开放分支仅包含正文字。以以下子句集为例

定义 31(文字树,子句表格)

[编辑 | 编辑源代码]

一个 *文字树* 是一个对 ,由一个有限的、有序的树 和一个标记函数 组成,该函数将文字分配给 的每个非根节点。

在一个有序树 中,节点 后继序列 是所有直接前驱为 的节点的序列,按照 给出的顺序排列。

一组子句 (子句)真值表 是一个文字树 ,其中,对于 中的每个后继序列 ,分别标记为文字 ,都存在一个替换 和一个子句 ,使得对于每个 都有 称为 真值表子句,真值表子句的元素称为 真值表文字

定义 32 (分支、开放和封闭真值表、选择函数)

[edit | edit source]

A branch of a tableau is a sequence () of nodes in such that is the root of , is the immediate predecessor of for , and is a leaf of . We say branch is a prefix of branch , written as or , iff for some nodes , . The branch literals of branch are the set . We find it convenient to use a branch in place where a literal set is required, and mean its branch literals. For instance, we will write expressions like instead of .

为了记住一个分支包含矛盾这一事实,我们允许将一个分支标记为 开放封闭。如果真值表中的每个分支都是封闭的,那么该真值表是 封闭 的,否则它是 开放 的。

选择函数是一个全函数 ,它将一个开放的 tableau 映射到它的一个开放分支。如果 ,我们也说选择在 中由

请注意,分支始终是有限的,因为 tableau 是有限的。幸运的是,对使用哪种选择函数没有限制。例如,可以使用一个始终选择“最左侧”分支的选择函数。

定义 33 (超 Tableau - 基本情况)

[编辑 | 编辑源代码]

是一个有限的子句集,而 是一个选择函数。对于 的超 Tableau 如下所示递归定义
初始化步骤:一个单节点文字树是 的超 Tableau。它的单个分支标记为“打开”。

超扩展步骤:如果

  1. 的一个开放超 Tableau,(即 被选择在 中由 )具有开放的叶节点 ,并且
  2. 中的一个子句(),在此上下文中称为扩展子句,并且
  3. 使得(称为 *超条件*)。

那么文字树 的超表格,其中 是通过将 个子节点 附加到 上,并分别用以下标签标记:



并将每个新的分支 标记为“打开”,并标记每个新的分支 标记为“关闭”。

最小模型推理

[edit | edit source]

子句集 显然有两个不同的模型:。在集合包含下,这些模型可以进行比较,在某些任务中,计算最小模型(或一般来说是 *一个* 最小模型)是合适的。例如,以下情况就是如此:

  • 知识表示、循环定义
  • 默认否定的基础(GCWA)
  • 应用:演绎数据库更新、诊断

基本上有两种不同的方法来计算最小模型。

最小模型推理 - Niemel¨a 的方法

[edit | edit source]

给定一组地子句,这些方法应用一个模型生成过程,例如超表格,它能够生成所有模型。

引理 1: 对于每个最小模型 存在一个分支,其文字为

假设 是来自 的子句头部出现的原子集,那么以下引理成立。

引理 2: 的最小模型当且仅当

这提供了一种通用方法:生成模型候选者,并使用引理 2 进行测试。

在我们上面的例子中不是最小模型,因为 当且仅当 不可满足,但事实并非如此,因此 不对应于最小模型,因此该分支被关闭。

是最小的,因为 当且仅当 不可满足。这是正确的,因此 是最小的,该分支保持打开状态。

特性: 健壮性(根据引理 2) 完备性(根据引理 1),空间效率

最小模型推理 - Bry & Yayha 的方法

[edit | edit source]

例如,我们有集合


引理: 使用补码分割时,最左边的开放分支是 的一个最小模型。

通用方法: 重复:生成最小模型 ,将 添加到 属性: 由于引理的健全性,完整性与之前相同,可能有指数级的新子句

华夏公益教科书