一阶逻辑的归结

在命题逻辑中,每个逻辑公式都可以等价于一个析取或合取范式。

斯科伦(Skolem)定理: 在一阶逻辑中,给定任意一个逻辑公式A, 都存在一个子句标准形式AA是等可满足性的, 即: AA.

将一阶逻辑公式转化为子句标准形的方法是:

1.将一阶逻辑公式转化为前束范式。

2A.如果存在量词不出现在全称量词的辖域内, 用一个个体常量替换该存在量词约束的变量。

2B.如果存在量词出现在全称量词的辖域内, 用一个斯科伦函数替换该存在量词约束的变量。

对于x1x2xkyB(x1,x2,,xk,y), 存在量词y的斯科伦函数通常表示成: y=f(x1,x2,,xk).

3.转化为斯科伦标准形:

x1x2xkC.

4.略去所有全称量词。

5.消去合取词, 将母式转化为子句标准形。

例: 求x(p(x)q(x))(xp(x)xq(x))的子句标准形。

解: x(p(x)q(x))(xp(x)xq(x)) x(p(x)q(x))(yp(y)zq(z)) ¬x(¬p(x)q(x))¬yp(y)zq(z) x(p(x)¬q(x))y¬p(y)zq(z) xyz(p(x)¬p(y)q(z))(¬q(x)¬p(y)q(z)) z(p(a)¬p(b)q(z))(¬q(a)¬p(b)q(z))

于是, 可以得到子句标准形: {{p(a),¬p(b),q(z)},{¬q(a),¬p(b),q(z)}}.

例: 求xyp(x,y)yxp(x,y)的子句标准形。

解: xyp(x,y)yxp(x,y) xyp(x,y)wzp(z,w) ¬xyp(x,y)wzp(z,w) xy¬p(x,y)wzp(z,w) xywz(¬p(x,y)p(z,w)) xw(¬p(x,f(x))p(g(x,w),w))

于是, 可以得到子句标准形: {{¬p(x,f(x)),p(g(x,w),w)}}.

将命题逻辑中的归结方法直接应用到一阶逻辑中, 称为触底归结(Ground Resolution).

Res(C1,C2)=(C1{x})(C2{x¯}).

对于命题逻辑,输入: {pq,q¯r}, 输出: {pr}.

对于一阶逻辑, 输入: {q(f(b)),r(a,f(b))},{p(a),¬q(f(b)),s(f(a),b)}, 输出: {p(a),r(a,f(b)),s(f(a),b)}.

除了触底归结, 在一阶逻辑中还需要借助替换(Substitution)操作实现归结。

设: E={p(x),q(f(y))}, θ是一个替换: θ={xy,yf(a)}, 则替换操作Eθ可通过同时替换所有相关变量得到: Eθ={p(y),q(f(f(a)))} 同时替换是必要的, 否则会得到以下错误的替换结果: Eθ={p(y),q(f(y))} Eθ={p(f(a)),q(f(f(a)))} 多个替换可以组合。

若: E={u,v,x,y,z} θ={xf(y),yf(a),zu} σ={yg(a),uz,vf(f(a))} 则:

θσ={xf(g(a)),yf(a),uz,vf(f(a))} E(θσ)=p(z,f(f(a)),f(g(a)),f(a),z) Eθ=p(u,v,f(y),f(a),z) (Eθ)σ=p(z,f(f(a)),f(g(a)),f(a),z)

因此:

E(θσ)=(Eθ)σ

尽管两个文字: p(f(x),g(y))¬p(f(f(a)),g(z)) 不具备触底归结的条件, 但是通过替换: θ1={xf(a),yf(g(a)),zf(g(a))} 可将原文字转换为: p(f(f(a)),g(f(g(a))))¬p(f(f(a)),g(f(g(a)))). 从而可以实现归结。 这个做法称为合一(Unification).

在合一操作中, 替换并不唯一。

例如: θ2={xf(a),ya,za} 的替换结果是: p(f(f(a)),g(a)),¬p(f(f(a)),g(a)) 或者 θ3={xf(a),zy} 替换结果是: p(f(f(a)),g(y)),¬p(f(f(a)),g(y)). 其中, θ3称为公式E最广合一子(Most General Unifier, MGU).

其它替换建立在最广合一子基础之上, 如: θ2=θ3λ1,λ1={ya}θ1=θ3λ2,λ2={yf(g(a))}

例: 已知子句标准形为 {p(f(x),g(y)),q(x,y)},{¬p(f(f(a)),g(z)),q(f(a),z)} 针对L1=p(f(x),g(y))L2c=p(f(f(a)),g(z))两个文字, 可通过最广合一子: {xf(a),yz} 将子句标准形归结为: {q(f(a),z),q(f(a),z)} {q(f(a),z)}.