这一章主要讨论一阶谓词逻辑描述下的归结(resolution)推理方法,它是一种机械化的可在计算机上加以实现的推理方法。引人注目的人工智能程序设计语言Prolog,就是基于归结原理的一种逻辑程序设计语言。 我们首先介绍命题逻辑下的归结方法,可使读者对归结过程一目了然。进而给出由Herbrand 定理描述的一阶逻辑的半可判定算法,接着介绍本章的中心内容�D�D归结方法,最后讨论几种非归结方法。 2.1 命题逻辑的归结法 设有由命题逻辑描述的命题 ![]() ![]() ![]() ![]() ![]() ![]() 很显然, ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 的成立。这种方法可称作反演推理方法。 2.1.1 建立子句集 为使用归结方法,首先要把 ![]() ![]() ![]() ![]() ![]() ![]() P∧(Q∨R)∧(~P∨~ Q)∧( P∨~Q∨R) 然后将这合取范式写成集合的表示形式,这只是为了说明上的方便。得 S={P,Q∨R,~P∨~Q,P∨~Q∨R}。 合取范式与S不同的仅是∧以,代替了。 称S中的每个元素为一个子句,P,Q∨R,~P∨~Q,P∨~Q∨R 都是子句。而S称为对应于 ![]() ![]() ![]() 2.1.2 归结式 设有两个子句 ![]() ![]() ![]() ![]() 从中消去互补对,所得的新子句 R( ![]() ![]() 便称作子句C1,C2的归结式。没有互补对的两子句没有归结式。 归结推理规则就指的是对两子句做归结,也即求归结式。 为了说明归结推理规则是正确的,必须证明 ![]() ![]() ![]() ![]() 也即归结式是原两子句的逻辑推论,或说任一使 ![]() ![]() ![]() ![]() 设I是使 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 当 ![]() ![]() 有R( ![]() ![]() 这实际上是假言推理P∧(P→Q)TQ。这样说来归结推理规则是假言推理的推广。 当 ![]() ![]() 这两个子句的归结式为空,记作□称作空子句。显然 ![]() ![]() 2.1.3 归结推理过程 从子句集S出发,仅只对S的子句间使用归结推理规则,并将所得归结式仍放入S中,进而再对新子句集使用归结推理规则,重复这些步骤直到得到空子句□。便说明S是不可满足的,从而与S对应的定理A1∧A2∧A3→B是成立的。 因为归结推理规则是正确的推理规则,归结式是原两子句的逻辑推论,于是归结过程出空子句□,说明S中必有矛盾。
一阶谓词逻辑的归结方法比命题逻辑的归结法要复杂多,原因是要对量词和变量做专门处理,从2.2 节开始讨论。 |