我知道这只是编程问题的一部分,但目前,我正在做一些逻辑编程。我仍然无法正确理解的一件事是一阶逻辑中的统一。
我读了Wikipedia article并且或多或少地清楚了,目的是搜索一个统一两个句子的术语......本文中也有一些例子,但我不明白为什么这个应该是有用的。任何人都可以举例说明真实世界的物体而不是A,B,C等吗?我希望这能帮助我理解。感谢
答案 0 :(得分:5)
感谢您的详细解答。现在我真的明白了。但是,我想在这里写下我在Stuart Russell和Peter Norvig所着的“人工智能:现代方法”一书中找到的一个例子,以防有人再次寻找同样的问题。我认为这个答案使用了一种非常实用的方法:
解除推理规则需要查找 取代使得不同 逻辑表达式看起来相同 这个过程称为统一和 是所有一阶的关键组成部分 推理算法。 UNIFY 算法需要两个句子和 如果有的话,返回一个unifier 存在。
让我们看一下如何做的一些例子 UNIFY应该表现得很好。假设我们有一个 查克知道(约翰,x):约翰是谁 知道?这个查询的一些答案可以 通过查找所有句子找到 统一的知识库 知道(约翰,x)。结果如下 统一与四个不同 可能在的句子 知识库:
UNIFY(Knows(John, x), Knows(John, Jane)) = {x/Jane}
UNIFY(Knows(John, x), Knows(y, Bill)) = {x/Bill, y/John}
UNIFY(Knows(John, x), Knows(y, Mother(y))) = {y/John, x/Mother(John)}
UNIFY(Knows(John, x), Knows(x, Elisabeth)) = fail
最后一次统一失败,因为x 不能承担约翰和。的价值观 伊丽莎白在同一时间。
答案 1 :(得分:2)
如果您正在查看使用统一且有用的实际示例,请查看计算语言学中使用的基于统一的语法,例如HPSG和LFG。从表面上看,这看起来像另一种统一的味道,但它们实际上是一样的。
基于统一的语法可以被认为是CFG(无上下文语法),其中制作是通过统一扩展的。 CGF中的每个项都得到一个AVM(属性值矩阵),它是特征和值的有向无环图。这里的想法有点类似于编译器中使用的属性语法。
想象一下这个玩具语法:
S -> NP VP
NP -> Kim
NP -> The cats
VP -> V NP
V -> see
V -> sees
我们在协议中有一些轻微的过度生成:
*猫看到金 [S [NP The cats] [VP [V见] [NP Kim]]]
为了解决这个问题,我们可以改进CFG以包含协议的概念:
S -> NP_sg VP_sg
S -> NP_sg VP_pl
NP_sg -> Kim
NP_pl -> The cats
VP_sg -> V_sg NP_sg
VP_sg -> V_sg NP_pl
V_sg -> sees
V_pl -> see
VP_pl -> V_pl NP_pl
VP_pl -> V_pl NP_sg
在这里,我们将拒绝之前的过度生成。但这很快就会导致组合表现。然而,我们可以用AVM扩充每个术语,并在我们解析时将它们统一起来:
S -> NP VP , C = A unified with B.
NP -> kim /[ AGR sg ]. We mark Kim as being singular
NP -> The cats / [ AGR pl ]
VP[ AGR #1 ] -> V [ AGR #1 ] NP
#1-notation是重入,这意味着此功能的值必须相同,实际上它们将在统一后指向图中的同一节点,如果它成功的话。在实践中,我们说动词短语的一致性特征与短语中动词的一致性相同。
V -> See / [ AGR pl ]
V -> Sees / [ AGR sg ]
随着我们的增强玩具语法“Kim see the cats”被拒绝,因为NP和VP不会统一,其AGR功能具有不同的值。 当我们解析AVM时,我们将AVM统一起来,因此在表达方面获得了很大的好处,使语法工程师可以轻松地编写语法。通常,广泛覆盖的UBG具有大约一百个规则,而等价的CFG(可能不存在),具有统一性的CFG是图灵完成的,将具有数千或更多的规则。
答案 2 :(得分:1)
逻辑编程,AFAIK,几乎所有的统一。你向解释器提供一个声明,并且解释器试图将它与它知道为“真实”的东西统一起来,即它在数据库中的东西。
e.g。
cat(tom) :- true.
断言汤姆是一只猫。
然后你可以查询
?- cat(X).
和prolog将返回
X = tom
Prolog在其数据库中查找,并尝试将您提供的语句(cat(X)
)与已经“知道”的事实统一起来。在这种情况下,它会找到cat(tom)
,因此可以告诉您X=tom
。