谓词逻辑的归结推理
合一
- 可理解为:通过给公式里的变量找合适的替换,来让几个公式变得一模一样
- 设公式集,如果存在一个置换 ,使得,那么这个 就叫做这个公式集的一个合一,而就叫做可合一的。
例子:
- 设有公式集,则
- 这里注意每个位置的值要跟着已有参数来,是而不是
最一般合一(MGU Most General Unifier)
- 差异集:即从左往右找出第一个同位置不同的项构成的集合(当前两个式子中,最先出现的那一对不同子项)
- 步骤:
- 先初始化,原公式集相同,初始置换取恒等置换
- 检查两式子是否相同
- 从左到右,从外到内,找第一处不同的子项
- 若其中一个是变量,另一个是项,并且这个变量不出现在那个项中,就可以做代换。(变量代换为常量)
- 两个都是常量且不同,例如 ,那就不能合一,算法结束。
- 两个都是复合项,但最外层函数符号不同,例如 ,也不能合一。
- 变量出现在它要代换成的项里面,例如想令 ,这不允许,叫出现检查失败,也不能合一。
- 用刚找到的代换作用到当前公式集上,得到新公式集
- 若二者还不同,重复上述过程
归纳语言
设子句写成: 那么一般有:
- a 表示第1个文字
- b 表示第2个文字
- c 表示第3个文字
- d 表示第4个文字
所以:
- 1a = 第1个子句第1个文字
- 1b = 第1个子句第2个文字
- 2a = 第2个子句第1个文字
- 2c = 第2个子句第3个文字
对于:
就是:
将第1个子句中的第1个文字 P(x) 和第2个子句中的第3个文字 作为冲突文字, 用最一般合一 做归结, 得到新子句 。
可判定与不可判定
- 可判定问题:如果存在一个算法或过程,该算法用于求解该类问题时,可在有限步内停止,并给出正确的解答。
- 不可判定问题:不存在上述的算法或过程则称这类问题是不可判定的
归结过程

等价于证明 是不可满足的,也就是能归结出空子句 NIL。 所以先把结论取反,加进知识库。
子句集:
(1)
(2)
(3)
(4)
归结过程:
(5)
(6)
(7)


归结策略
- 宽度有先策略
- 删除策略(纯文字删除法、重言式删除法、包孕删除法)
- 支持集策略
- 线性输入策略
- 单文字策略
- 祖先过滤策略
一般步骤
- 要证,等价于证明
- 子句在转换时要全部变为析取集合
- 将结论取反再变为析取式放入子句集
- 如果原来是合取,那就变成两个子句
- 在子句集中用逗号表示
- 实质上使用析取三段式来不断推出子句
- 直到推出空子句为止
