SATCHMO 定理证明器是最早使用模型生成的系统之一,即自下而上的证明过程。该证明器由一个小型的 Prolog 程序给出,该程序实现了一个表格证明过程。一个限制是,它需要范围受限公式。
一阶子句 称为 *范围受限*,如果出现在头部 中的每个变量也出现在主体 中。
- 将子句转换为范围受限形式
- 在 Prolog 数据库中断言范围受限子句和 dom 子句。
- 调用 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.
通过级别饱和修改实现一阶完备性。该证明过程在地面情况下实现了超表格。
所有开放分支仅包含正文字。以以下子句集为例
一个 *文字树* 是一个对 ,由一个有限的、有序的树 和一个标记函数 组成,该函数将文字分配给 的每个非根节点。
在一个有序树 中,节点 的 后继序列 是所有直接前驱为 的节点的序列,按照 给出的顺序排列。
一组子句 的 (子句)真值表 是一个文字树 ,其中,对于 中的每个后继序列 ,分别标记为文字 ,都存在一个替换 和一个子句 ,使得对于每个 都有 。 称为 真值表子句,真值表子句的元素称为 真值表文字。
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。它的单个分支标记为“打开”。
超扩展步骤:如果
- 是 的一个开放超 Tableau,(即 被选择在 中由 )具有开放的叶节点 ,并且
- 是 中的一个子句(,),在此上下文中称为扩展子句,并且
- 使得(称为 *超条件*)。
那么文字树 是 的超表格,其中 是通过将 个子节点 附加到 上,并分别用以下标签标记:
并将每个新的分支 标记为“打开”,并标记每个新的分支 标记为“关闭”。
子句集 显然有两个不同的模型: 和 。在集合包含下,这些模型可以进行比较,在某些任务中,计算最小模型(或一般来说是 *一个* 最小模型)是合适的。例如,以下情况就是如此:
- 知识表示、循环定义
- 默认否定的基础(GCWA)
- 应用:演绎数据库更新、诊断
基本上有两种不同的方法来计算最小模型。
给定一组地子句,这些方法应用一个模型生成过程,例如超表格,它能够生成所有模型。
引理 1: 对于每个最小模型 存在一个分支,其文字为 。
假设 是来自 的子句头部出现的原子集,那么以下引理成立。
引理 2: 是 的最小模型当且仅当
这提供了一种通用方法:生成模型候选者,并使用引理 2 进行测试。
在我们上面的例子中不是最小模型,因为 当且仅当 不可满足,但事实并非如此,因此 不对应于最小模型,因此该分支被关闭。
是最小的,因为 当且仅当 不可满足。这是正确的,因此 是最小的,该分支保持打开状态。
特性: 健壮性(根据引理 2) 完备性(根据引理 1),空间效率。
例如,我们有集合
引理: 使用补码分割时,最左边的开放分支是 的一个最小模型。
通用方法: 重复:生成最小模型 ,将 添加到 。 属性: 由于引理的健全性,完整性与之前相同,可能有指数级的新子句 。