【AI学习笔记】置换、合一、归结原理

本文内容来自中科院大学张文生老师的人工智能课件,整理by@tianranhe

3置换与合一.5归结原理.人工智能复习笔记,考试前还是没看懂,考试也来了,转过来好好看 - -


    置换(substitution)

    定义: 置换是一个形如{t1/v1,…, tn/vn}的有限集,其中每个vi是变量,ti是不同于vi的项(常量、变量或函数)(vi≠ti). 当i≠j时,vi≠vj.

    无元素组成的置换称为空置换, 记为ε;

    例子:

  {a/x, w/y, f(s)/z}, {g(x)/x}是置换;

  {x/x}, {y/f(x)}不是置换;

    概念的理解:

    置换:被置换元素必是变量,置换元素是项;

             置换元素必不同于被置换元素;

             在一次置换中,针对同一元素的置换只能出现一次(单次置换的同时性);

             无元素组成的置换,成为空置换;

    

    单次置换同时性:

    θ是一个置换,E是一个表达式,Eθ称为E的实例(instance);

    一次置换中,对所有变量的置换是同时进行的;

    也就是说,一次置换中对不同的变量进行的置换不存在复合关系;

          E=P(x,y,z), θ={a/x,f(b)/y,c/z},Eθ=P(y,z,z)

置换的复合只发生在多次置换中.

置换复合的过程:

θ={t1/x1,...,tn/xn},λ={u1/y1,...,um/ym},求θ° λ

1. 构成{t1λ/x1,...,tnλ/xn,u1/y1,...,um/ym};

2. 如果yj∈(x1,...,xn),   则删除uj/yj;

3. 如果tkλ=xk,         则删除tkλ/xk;

复合置换的性质:

(θ° λ)° μ=θ° (λ° μ) 成立

θ° λ=λ° θ 不一定成立

复合置换的例子:

          θ={t1/x1,t2/x2}={f(y)/x,z/y}

     λ={u1/y1,u2/y2,u3/y3}={a/x,b/y,y/z}

     θλ={t1λ/x1,t2λ/x2,u1/y1,u2/y2,u3/y3} //分别对ti/xi, 进行与λ的复合

       ={f(b)/x,y/y,a/x,b/y,y/z} //注意单次置换的同时性

       ={f(b)/x,y/z}

    

合一(unification)

合一定义:E1θ=...=Enθ, 则称置换θ为{E1,...,En}的合一子(unifier). 如果对{E1,...,En}存在这样的合一子, 则称集合{E1,...,En}可合一.

    例1:

  E={P(a,y), P(x, f(b))},   θ={a/x, f(b)/y}.

  E={P(a,b), P(x, f(b))},   不可合一

    合一子不一定唯一

      E={P(a,y), P(x, f(b))}

      θ1={a/x, f(b)/y}      (唯一)

      E={P(x,y), P(x,f(b))}

      θ1={a/x, f(b)/y}      (不唯一)

      θ2={b/x, f(b)/y}


最一般合一子(most general unifier,mgu)

定义:如果对E的每个合一子θ, 都存在一个置换λ, 使得θ=γ°λ, 则称合一子γ是集合{E1,…,En}的最一般合一子.

例子:

  E={P(x,y), P(x,f(b))}, θ1={a/x, f(b)/y}, θ2={b/x, f(b)/y}

  最一般合一子 γ={f(b)/y}

  θ1= γ° {a/x}, θ2= γ° {b/x}

是否存在寻找E的mgu的一般算法? 如何寻找E的mgu?

合一算法的考虑:

消除两个谓词之间项的差别. {P(x,…), P(a,…)}

非空表达式集W的差别集:

从左向右, 在W中的所有表达式, 遇到第一个不相同符号, 提取从这个符号开始的子表达式, 由此构成一个集合, 称为W的差别集, 记为D.

例子:

   W={P(x,f(y,z),z,w), P(x,a), P(x, g(z),z,b)}

   D={f(y,z), a, g(z)}


合一算法

W的合一算法:

1.  K=0, Wk=W, γk=ε.

2.  如果Wk是单一的, 停机, γk是W的mgu.

否则,求出Wk的差别集Dk.

3.  如果在Dk中存在元素vk与tk, 使vk是一个未出

现在tk中的变量, 转4;

否则,停机, W是不可合一的.

4.  令γk+1=γk°{tk/vk}, Wk+1=Wk 

°γk+1.

5.  K=K+1. 转2.


换名:

  {P(f(x), x), P(x, a)};

  D={f(x), x}.

  换名: {P(f(y), y), P(x, a)};

  mgu: {f(a)/x, a/y}


例1:

求W={P(a,x,f(g(y))), P(z,f(z),f(u))}的mgu.


   D0={a,z},     γ1= ε°{a/z}= {a/z}

  W1= W0 · γ1 

     ={P(a,x,f(g(y))), P(a,f(a),f(u))}


  D1={x,f(a)}, γ2=γ1°{f(a)/x}= {a/z, f(a)/x}

  W2= W1. γ2 

     ={P(a,f(a),f(g(y))), P(a,f(a),f(u))}


  D2={g(y),u}, γ3=γ2°{g(y)/u}={a/z,f(a)/x, g(y)/u}

  W3= W2 · γ3 ={P(a,f(a),f(g(y)))}

  γ3是mgu.


例2:

求W={Q(f(a), g(x)), Q(y, y)}的mgu.


  D0={f(a),y}     γ1= ε°{f(a)/y}= {f(a)/y}

  W1= W0 · γ1 

     ={Q(f(a), g(x)), Q(f(a), f(a))}


  D1={g(x), f(a)}

  不可合一, 没有mgu.


例3:

求W={P(f(y), y), P(x, a)}的mgu.


  D0={f(y),x},  γ1= ε°{f(y)/x}= {f(y)/x}

  W1 = W0 · γ1 ={P(f(y), y), P(f(y), a)}


  D1={y, a},   γ2=γ1°{a/y}= {f(y)/x} °{a/y} = {f(a)/x, a/y}

  W2 = W1 · γ2 ={P(f(a),a)}

 γ2是mgu.

### 关于人工智能中的置换合一人工智能领域,特别是逻辑编程和自动推理方面,**置换合一**是一个核心概念。该过程旨在通过寻找两个表达式的共同形式来解决变量之间的匹配问题[^1]。 #### 定义基本原理 置换成也称为统一,在给定一组项或原子公式的情况下,如果存在一个替换σ使得应用此替换后的结果相等,则称这些项是可以合一的。这个过程中使用的最一般化的替代方案被称为最一般的合一器(MGU)[^2]。 #### 实现方法 实现置换合一通常涉及以下几个要素: - **数据结构的选择**:为了高效处理符号表达式及其子部分间的对应关系,常采用树形或者图状的数据表示法。 - **算法设计**: - 需要遍历输入表达式的各个组成部分; - 对遇到的不同类型的节点执行相应的操作(比如对于函数符号则递归调用自身继续向下查找); - 当发现可变元时尝试建立新的绑定或将已有绑定应用于当前上下文中。 下面给出了一种简单的Python版本的一合实施例程: ```python def unify(x, y, theta={}): if theta is None: return None elif x == y: return theta elif isinstance(x, str) and x.startswith('?'): return unify_var(x, y, theta) elif isinstance(y, str) and y.startswith('?'): return unify_var(y, x, theta) elif isinstance(x, list) and isinstance(y, list) and len(x) == len(y): return unify(x[1:], y[1:], unify(x[0], y[0], theta)) else: return None def unify_var(var, x, theta): if var in theta: return unify(theta[var], x, theta) elif x in theta: return unify(var, theta[x], theta) else: theta[var] = x return theta ``` 上述代码片段展示了如何在一个简单环境中进行一合运算。这里`unify()` 函数接收两个参数以及一个已有的映射表 `theta` ,并返回更新过的映射或者是无法完成的情况下的 `None` 。而辅助性的 `unify_var()` 则专门用于处理当其中一个参数为变量的情形下应采取的动作[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值