统一是通过查找替换使两个不同的逻辑原子表达式相同的过程。统一取决于替换过程。
它将两个文字作为输入,并使用替换使它们相同。
让Ψ 1 和Ψ 2 是两个原子句子,并且𝜎成为统一体,Ψ 1 𝜎 =Ψ 2 𝜎 ,则可以表示为 UNIFY(Ψ 1 ,Ψ 2 ) 。
示例: 查找Unify {King(x),King(John)}的MGU
让Ψ
1 = King(x),Ψ
2 = King(John),
替换θ = {John/x} 是这些原子的统一体,并应用此替换,两个表达式将相同。
使用UNIFY算法进行统一,该算法采用两个原子语句并返回这些语句的统一符(如果存在)。
统一是所有一阶推理算法的关键组成部分。
如果表达式彼此不匹配,则返回失败。
替换变量称为"最通用统一者"或MGU。
例如,假设有两个不同的表达式, P(x,y)和P(a,f(z))。
在此示例中,我们需要使以上两个语句彼此相同。为此,我们将执行替换。
P(x,y).........(i)
P(a,f(z)).........(ii)
在第一个表达式中将x替换为a,将y替换为f(z),并将其表示为 a/x 和f(z)/y。
通过两个替换,第一个表达式将与第二个表达式相同,并且替换集将为: [a/x,f(z)/y] 。
统一的条件:
以下是统一的一些基本条件:
谓词符号必须相同,具有不同谓词符号的原子或表达式永远不能统一。
两个表达式中的参数个数必须相同。
如果同一表达式中存在两个相似的变量,统一将失败。
统一算法:
算法: Unify(Ψ
1 ,Ψ
2 )
Step. 1: If Ψ1 or Ψ2 is a variable or constant, then:
a) If Ψ1 or Ψ2 are identical, then return NIL.
b) Else if Ψ1is a variable,
a. then if Ψ1 occurs in Ψ2, then return FAILURE
b. Else return { (Ψ2/ Ψ1)}.
c) Else if Ψ2 is a variable,
a. If Ψ2 occurs in Ψ1 then return FAILURE,
b. Else return {( Ψ1/ Ψ2)}.
d) Else return FAILURE.
Step.2: If the initial Predicate symbol in Ψ1 and Ψ2 are not same, then return FAILURE.
Step. 3: IF Ψ1 and Ψ2 have a different number of arguments, then return FAILURE.
Step. 4: Set Substitution set(SUBST) to NIL.
Step. 5: For i=1 to the number of elements in Ψ1.
a) Call Unify function with the ith element of Ψ1 and ith element of Ψ2, and put the result into S.
b) If S = failure then returns Failure
c) If S ≠ NIL then do,
a. Apply S to the remainder of both L1 and L2.
b. SUBST= APPEND(S, SUBST).
Step.6: Return SUBST.
算法的实现
Step.1: 将替换集初始化为空。
Step .2: 以递归方式统一原子句子:
检查相同的表达式匹配项。
如果一个表达式是变量v i ,而另一个表达式是不包含变量v i 的项t i ,则: 将t i /v i 替换为现有替换 将t i /v i 添加到替换集列表中。 如果两个表达式都是函数,则函数名称必须相似,并且两个表达式中的参数数目必须相同。
对于以下每对原子句,找到最通用的统一词(如果存在)。
1、在{p(f(a),g(Y))和p(X,X)}的MGU中查找
Sol: S
0 =>此处,Ψ
1 = p(f(a),g(Y)),Ψ
2 = p(X,X)
SUBSTθ= {f( a)/X}
s1 =>Ψ
1 = p(f(a),g(Y)),Ψ
2 = p(f(a ),f(a))
SUBSTθ= {f(a)/g(y)},统一失败。
这些表达式无法统一。
2、找出{p(b,X,f(g(Z)))和p(Z,f(Y),f(Y))}的MGU
此处,,
1 = p(b,X,f(g(Z)))和Ψ
2 = p(Z,f(Y),f(Y))
S
0 => {p(b,X,f(g(Z))); p(Z,f(Y),f(Y))}
SUBSTθ= {b/Z}
S
1 => {p(b,X ,f(g(b))); p(b,f(Y),f(Y))}
SUBSTθ= {f(Y)/X}
S
2 => {p( b,f(Y),f(g(b))); p(b,f(Y),f(Y))}
SUBSTθ= {g(b)/Y}
S
2 => {p( b,f(g(b)),f(g(b)); p(b,f(g(b)),f(g(b))} 已成功统一。
并且Unifier = {b/Z,f(Y)/X,g(b)/Y} 。
3、找到{p(X,X),和p的MGU(Z,f(Z))}
在这里,Ψ
1 = {p(X,X)和Ψ
2 = p(Z,f(Z))
S
0 => {p(X,X),p(Z,f(Z))}
SUBSTθ= {X/Z}
s1 => {p(Z,Z),p(Z,f(Z))}
SUBSTθ= {f(Z)/Z},统一失败
因此,这些表达式无法统一。
4、找到UNIFY的MGU(prime(11),prime(y))
在这里,Ψ
1 = {prime(11)和Ψ
2 = prime(y)}
S
0 => {prime(11),prime(y)}
SUBSTθ= {11/y}
S
1 => {prime(11),prime(11)},已成功统一。
统一者: {11/y}。
5、找到Q(a,g(x,a),f(y)),Q的MGU(a,g(f(b),a),x)}
此处,Ψ
1 = Q(a,g(x,a), f(y))和Ψ
2 = Q(a,g(f(b),a),x)
S
0 => {Q( a,g(x,a),f(y)); Q(a,g(f(b),a),x)}
SUBSTθ= {f(b)/x}
S
1 => {Q(a, g(f(b),a),f(y)); Q(a,g(f(b),a),f(b))}
SUBSTθ= {b/y}
S
1 => { Q(a,g(f(b),a),f(b)); Q(a,g(f(b),a),f(b))},已成功统一。
统一符: [a/a,f( b)/x,b/y]。
6、 UNIFY(knows(Richard,x)knows(Richard,John))
Ψ1 = knows(Richard, x), and Ψ2 = knows(Richard, John)
S0 => { knows(Richard, x); knows(Richard, John)}
SUBST θ= {John/x}
S1 => { knows(Richard, John); knows(Richard, John)},成功统一。
统一者: {John/x}。