由上面的定理,我们对SG的讨论,可以用较为简单的S1 ∪ S2 ∪
S3 ∪ …∪ Sn来代替。为方便起见,也称S1 ∪ S2
∪ S3 ∪ …∪ Sn为G的子句形,即: SG=S1 ∪ S2 ∪ S3 ∪ …∪ Sn。根据以上定理可对一个谓词表达式分而治之,化整为零,大大减少了计算复杂度。 例2-3 对所有的x,y,z来说,如果y是x的父亲,z又是y的父亲,则z是x的祖父。又知每个人都有父亲,试问对某个人来说谁是它的祖父? 用一阶逻辑表示这个问题,并建立子句集。 解: 这里我们首先引入谓词: P(x, y) 表示x是y的父亲 Q(x, y) 表示x是y的祖父 ANS(x) 表示问题的解答 于是有: 对于第一个条件,"如果y是x的父亲,z又是y的父亲,则z是x的祖父",一阶逻辑表达式如下: A1:(x)(y)(z)(P(x, y)∧P(y, z)→Q(x, z)) 则把A1化为合取范式,进而化为Skolem标准形,表示如下: S A1:~P(x ,y)∨~P(y, z)∨Q(x, z) 对于第二个条件:"每个人都有父亲",一阶逻辑表达式如下: A2:(y)(x)P(x, y) 化为Skolem标准形,表示如下: S A2:P(f(y), x) 结论:某个人是它的祖父 B:(x)(y)Q(x, y) 否定后得到子句: S~B:~Q(x, y)∨ANS(x) 则得到的相应的子句集为:{ S A1,S A2,S~B } 解毕。 |