3

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

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

4

4 回答 4

8

统一本质上是一个替代的过程。我已经看到它被称为“双向匹配”。

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

IMO,理解它的更好方法是使用数学中的一些示例(统一曾经是/是基本密钥机制,例如,在自动定理证明研究的背景下,人工智能的一个子领域;在类型推理算法中的另一种用途)。以下示例取自计算机代数系统 (CAS)的上下文:

第一个例子:

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

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

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

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

a * (1 + b)   |2|

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

{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|

( |5| 的lhs统一到|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|

等等。

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

于 2009-11-06T23:34:47.750 回答
5

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

于 2009-11-07T15:16:06.487 回答
2

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

于 2009-11-06T14:08:53.393 回答
1

统一就像模式匹配,您将两个结构混合在一起,其中一个中的变量可以匹配另一个中的值。

每当您以普通语言调用函数时,都会发生最简单的统一形式。调用者有参数,被调用者有参数。参数“绑定”到参数,并产生函数的实例化。

另一种简单的统一形式是当您使用正则表达式进行匹配时,例如在命令提示符下您可能会说dir x*y*.z*将匹配一些但不是所有文件名。

人工智能喜欢利用推理引擎,尝试从知识库中模拟推理,通常以逻辑语句的形式。举一个愚蠢的例子,你可能“知道”“所有人都会死”,如forall(x)(man(x) implies mortal(x)). 然后如果你问一个问题“Sam mortal” as mortal(Sam)?,你可以将它与规则统一起来得到一个新问题“Sam 是不是男人”man(Sam)?

希望有帮助。

于 2009-12-01T02:51:30.830 回答