1、2.合一合一当某一个置换 S作用于表达式集合 Ei 的每一个元素,此时我们用 EiS来表示置换例子的集合。如果存在一个置换 S ,使得 E1S = E2S= = EiS= 则我们称表达式集合 Ei 是可合一的,并称 s 为Ei 的合一者。原因是它的作用是使集合 Ei 成为单一形式。 其中,Ei 是原子谓词公式。例:例: 表达式集合Px , f(y) , B , Px , f(B) , B的合一者为是 s = A/x , B/y Px , f(y) , Bs = PA , f(B) , B Px , f(B) , Bs = PA , f(B) , B最通用合一者最通用合一者如果 s 是 Ei 的
2、任意一个合一者,又存在某一个 s,使得 s = g s 或者 Ei s = Ei g s则 称 g 是 Ei 的最通用(最一般)的合一者,记作mgu。 例:例:s = A/x , B/y 是表达式集合 Px , f(y) , B , Px , f(B) , B的一个合一者,该集合的最一般的合一者是: g = B/y分歧集分歧集(或不一致集合)的定义。设有一非空有限公式集合 F = F1 , , Fn,从 F中各个公式的第一个符号同时向右比较,直到发现第一个彼此不尽相同的符号为止,从 F 中的各个公式中取出那些以第一个不一致符号开始的最大的子表达式为元素,组成一个集合 D ,称为 F 的分歧集(
3、不一致集合)。 其中,F i ( i=1 , , n)是原子谓词公式例:例:公式集:F=P(x , g( f(y , z) , x) , y), P(x , g( a , b) , b) , P(x , g( g(h(x) , a) , y) , h(x)分歧集为: D=f(y , z) , a , g(h(x) , a) 合一算法:合一算法:设 F 为非空有限表达式集合,则可以按下列步骤求出 mgu: 置 k=0 ,Fk = F ,k=(空置换,即不含元素的置换)。 若 Fk 只有一个表达式,则算法终止,其中k就是要求的mgu。 找出 Fk 的分歧集 Dk 。若 Dk 中存在元素 ak 和
4、tk ,其中 ak 是变元,tk是项,且 ak 不在 tk 中出现,则置: k+1 =k tk / ak Fk+1 = Fk tk / ak k = k+1然后转向。否则,继续。1算法终止,F的 mgu 不存在。 合一算法的流程图:合一算法的流程图:说明:1、合一算法是消解原理的基础。2、合一算法中的公式集就是从谓词合适公式化成的子句集。例:例:求F= P(a , x , f(g(y), P(z , h(z , u) , f(u)的最一般的合一者。解:我们根据合一算法一步一步地求出mgu。第一步:k = 0, F0= F, 0= F0的分歧集合D0=a , z 置换:a/z 1 =0a/z =
5、 a/z F1 = F0 a/z = P(a , x , f(g(y), P(a , h(a , u) , f(u) k=1 F1 不是单一表达式第二步:D1x , h(a,u) 置换:h(a , u)/x 21h(a , u)/x=a/z , h(a , u)/x F2=F1h(a , u)/x =P(a , h(a , u) , f(g(y), P(a , h(a , u) , f(u) k=2第三步:D2g(y) , u2 置换:g(y)/u 32g(y)/u=a/z , h(a,g(y)/x , g(y)/u F3=F2g(y)/u=P(a , h(a , g(y) , f(g(y) k=3F3是单一表达式,所以 3a/z , h(a , g(y)/x , g(y)/u是 F 的最一般合一者 3