合    一

上承

     4、合成的性质

    合成具有以下性质:  

   (1)(Es1)s2=E(s1s2),即置换s1和s2依次作用于表达式E相当于置换s1和s2的合成s1s2作用于E。

   (2)(s1s2)s3=s1(s2s3),即合成满足结合律。一般来说,合成不满足交换律,即s1s2=s2s1通常是不成立的。

    把置换s作用于集合{Ei}中的每一个公式得到的例的集合用{Ei}s表示。如果存在一个置换s,使Es1=Es2=Es3=...,则称公式集{Ei}是可合一的,置换s称为{Ei}的合一者。例如有公式集合

    {Ei}={P[x,f(y),b],P[x,f(b),b]}和一个置换s={A/x,b/x},使得

             {Ei}s={P[A,f(b),b],P[A,f(b),b]}

因此公式集{Ei}是可合一的,且置换s为{Ei}的合一者。但s并不是最简单的,因为置换{b/y}就是足以使公式集{Ei}合一。为此,我们定义最简合一者mgu(Most General unifier)。如果对公式集{Ei}所有的合一者S,都存在一个置换s',使{Ei}s={Ei}gs',则称g为公式集{Ei}的最简合一者。可以证明,除了变量的符号可以不同外,一个公式的最简合一者是唯一的

    

    下面给出一个求最简合一者的程序UNIFY,它使用表结构来表示表达式,例如公式P[x,f(A,y)]表示成(P x (f A y))。

    递归过程UNIFY(E1,E2)

   (1)if ATOM(E2) then 变换E1和E2的位置;如果E1、E2之中至少有一个是原子的话,把该原子放在前面。

      (2)if ATOM(E1) then

   (3)   begin

   (4)   if E1=E2 then return NIL;NIL为空。

   (5)   if E1为变量 

   (6)     begin

   (7)     if  E2中有E1 then return FaiL; f(x)不能代替x。

   (8)     return  {E2/E1}

   (9)     end 

   (10)  if E2为变量 then return {E1/E2}  

   (11)  return   FaiL

   (12)  end

   (13)F1¬(car E1), T1¬(cDR E1)

   (14)F2¬(car E2), T2¬(cDR E2)

   (15)Z1¬UNIFY(F1, F2)

   (16)if Z1=FaiL then return FaiL

   (17)G1¬T1Z1;Z1作用于T1

   (18)G2¬T2Z1;Z1作用于T2

   (19)Z2¬UNIFY(G1, G2)

   (20)if Z2=FaiL then return FaiL

   (21)return Z1Z2;返回Z1、Z2的合成

   当E1和E2可合一时,程序返回E1和E2的最简合一者,否则推导失败,下面是对几个公式集得到的结果:

       {P(x),P(A)}                            ®{A/x} 

       {P[f(x),y,g(y)],P[f(x),z,g(x)]}       ®{x/y,x/z}

       {P[f(x,g(A,y)),g(A,y)], P[f(x,z), z]} ®{g(A,y)/z}        

    合一可用来解决两个表达式的匹配问题,合一过程得到的最简合一者作用于两个表达式就可得到匹配的例。但模式匹配中只允许一个表达式有变量,因此合一过程更为一般化。

  

    习题

    1、求出集合{P(x,y,z),P(w,u,w),P(A,u,u)}的mgu。

                                                                                                              返回