统一的应用有哪些?

合一(Unification)有哪些(实际的)应用?它在现实世界中实际被用在哪里?

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


回答:

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

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

我认为,理解它的更好方法是使用一些数学例子(合一曾经/现在都是一个基础的关键机制,例如,在自动化定理证明器研究的上下文中,它是人工智能的一个子领域;另一个用途是在类型推断算法中)。下面的例子取自计算机代数系统 (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|

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

等等。

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注