一阶逻辑的归结
在命题逻辑中,每个逻辑公式都可以等价于一个析取或合取范式。
斯科伦(Skolem)定理:
在一阶逻辑中,给定任意一个逻辑公式, 都存在一个子句标准形式与是等可满足性的, 即: .
将一阶逻辑公式转化为子句标准形的方法是:
1.将一阶逻辑公式转化为前束范式。
2A.如果存在量词不出现在全称量词的辖域内, 用一个个体常量替换该存在量词约束的变量。
2B.如果存在量词出现在全称量词的辖域内, 用一个斯科伦函数替换该存在量词约束的变量。
对于, 存在量词的斯科伦函数通常表示成:
3.转化为斯科伦标准形:
4.略去所有全称量词。
5.消去合取词, 将母式转化为子句标准形。
例: 求的子句标准形。
解:
于是, 可以得到子句标准形:
例: 求的子句标准形。
解:
于是, 可以得到子句标准形:
将命题逻辑中的归结方法直接应用到一阶逻辑中,
称为触底归结(Ground Resolution).
对于命题逻辑,输入:
输出:
对于一阶逻辑, 输入:
输出:
除了触底归结, 在一阶逻辑中还需要借助替换(Substitution)操作实现归结。
设:
是一个替换:
则替换操作可通过同时替换所有相关变量得到:
同时替换是必要的, 否则会得到以下错误的替换结果:
多个替换可以组合。
若:
则:
因此:
尽管两个文字: 和 不具备触底归结的条件, 但是通过替换:
可将原文字转换为:
从而可以实现归结。
这个做法称为合一(Unification).
在合一操作中, 替换并不唯一。
例如:
的替换结果是:
或者
替换结果是:
其中, 称为公式的最广合一子(Most General Unifier, MGU).
其它替换建立在最广合一子基础之上, 如:
例: 已知子句标准形为
针对和两个文字, 可通过最广合一子:
将子句标准形归结为:
或