当前位置:  开发笔记 > 编程语言 > 正文

统一的应用?

如何解决《统一的应用?》经验,为你挑选了2个好方法。

统一的(实际)应用是什么?它实际上在现实世界中使用的地方?

我无法理解它的真正含义以及为什么它被视为人工智能的一部分.



1> MaD70..:

统一本质上是一种替代过程.我看到它被称为"双向匹配".

在Prolog中,在其他逻辑编程语言和直接基于重写逻辑的语言(Maude,Elan等等)中,自由(逻辑)变量与术语/值绑定的机制.在Concurrent Prolog中,这些变量被解释为通信通道.

IMO,理解它的更好方法是使用数学的一些例子(统一是/是基本的关键机制,例如,在自动定理证明研究的背景下,AI的子领域;在类型推理算法中的另一种用途).以下示例取自计算机代数系统(CAS)的背景:

第一个例子:

给定一个Q和两个二进制运算*和+,然后*在+上左分配,如果:

X * (Y + Z)   =   (X * Y) + (X * Z)   |1|

这是一个重写规则(一组重写规则是一个重写系统).

如果我们想将此重写规则应用于特定情况,请说:

a * (1 + b)   |2|

我们统一(通过统一算法)这个术语,| 2 |,与| 1 |的左侧(lhs).我们有这个(有意无意义)替换(最通用的统一者,mgu):

{X/a, Y/1, Z/b}   |3|

现在,应用| 3 | 在| 1 | 的右侧(rhs),我们终于:

(a * 1) + (a * b)

这很简单,并且要理解统一可以做什么,我将展示一个更复杂的例子.

第二个例子:

鉴于此重写规则:

log(X,Y) + log(X,Z)   =>   log(X,Y*Z)   |4|

我们将它应用于这个等式:

log(e,(x+1)) + log(e,(x-1)) = k   |5|

(lhs of | 5 |统一为| 4 |的lhs),所以我们有这个mgu:

{X/e, Y/(x+1), Z/(x-1)}   |6|

请注意,X和x是两个不同的变量.这里我们有两个变量,X和Y,它们匹配两个复合项,(x + 1)和(x-1),而不是简单的值或变量.

我们将这个mgu,| 6 |应用于| 4 |的rhs 然后我们把它放回| 5 |; 所以我们有:

log(e,(x+1)*(x-1)) = k   |7|

等等.

(希望我没有任何错误,否则这可能会使初学者更加困惑.)



2> Adam Goode..:

统一是类型推断的关键机制.实际上,在这种情况下统一将大大减少手指的磨损.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有