首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一的应用?

统一的应用?
EN

Stack Overflow用户
提问于 2009-11-06 22:01:24
回答 4查看 7.5K关注 0票数 3

Unification的(实际)应用是什么?它在现实世界中的实际应用是什么?

我不能理解它到底是什么,以及为什么它被认为是人工智能的一部分。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-07 07:34:48

统一本质上是一个替换的过程。我见过它被称为“双向匹配”。

在Prolog中,在其他逻辑编程语言中,以及直接基于重写逻辑的语言中(MaudeElan等)。是将自由(逻辑)变量绑定到术语/值的机制。在并发Prolog中,这些变量被解释为通信通道。

国际海事组织,理解它的更好的方法是用一些数学例子(统一曾经/是一个基本的关键机制,例如,在自动定理证明器研究的上下文中,AI的一个子领域;在type inference algorithms中的另一个用途)。下面的示例取自computer algebra systems (CAS)的上下文

第一个示例:

给定一个集合Q和两个二元运算*和+,那么*在+上是左分配的,如果:

代码语言:javascript
复制
X * (Y + Z)   =   (X * Y) + (X * Z)   |1|

这是一个重写规则(一组重写规则是一个)。

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

代码语言:javascript
复制
a * (1 + b)   |2|

我们将术语|2|与|1|的左侧(lhs)统一(通过统一算法),并且我们有这个(故意微不足道的)替换(最通用的,mgu):

代码语言:javascript
复制
{X/a, Y/1, Z/b}   |3|

现在,将|3|应用于|1|的右侧(rhs),我们最终得到了:

代码语言:javascript
复制
(a * 1) + (a * b)

这很简单,为了理解统一所能做的事情,我将展示一个更复杂的示例。

第二个示例:

给定此重写规则:

代码语言:javascript
复制
log(X,Y) + log(X,Z)   =>   log(X,Y*Z)   |4|

我们将它应用于这个方程:

代码语言:javascript
复制
log(e,(x+1)) + log(e,(x-1)) = k   |5|

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

代码语言:javascript
复制
{X/e, Y/(x+1), Z/(x-1)}   |6|

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

我们将此mgu |6|应用于|4|的rhs,然后将其放回|5|中;因此我们有:

代码语言:javascript
复制
log(e,(x+1)*(x-1)) = k   |7|

诸若此类。

(希望我没有犯任何错误,否则这可能会让新手更加困惑。)

票数 8
EN

Stack Overflow用户

发布于 2009-11-07 23:16:06

统一是type inference中的一个关键机制。实际上,在这种情况下的统一将极大地减少您手指的磨损。

票数 5
EN

Stack Overflow用户

发布于 2009-11-06 22:08:53

例如,Prolog使用统一来查找满足规则的变量的值-有关示例,请参阅this explanation。我希望这是逻辑编程语言中的一种典型技术,尽管我没有使用其他语言的经验。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1687789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档