一阶逻辑中统一的真实世界的例子?

时间:2010-06-02 21:18:46

标签: computer-science logic unification

我知道这只是编程问题的一部分,但目前,我正在做一些逻辑编程。我仍然无法正确理解的一件事是一阶逻辑中的统一。

我读了Wikipedia article并且或多或少地清楚了,目的是搜索一个统一两个句子的术语......本文中也有一些例子,但我不明白为什么这个应该是有用的。任何人都可以举例说明真实世界的物体而不是A,B,C等吗?我希望这能帮助我理解。感谢

3 个答案:

答案 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是图灵完成的,将具有数千或更多的规则。

有关详细信息,请参阅 HPSGLFG

答案 2 :(得分:1)

逻辑编程,AFAIK,几乎所有的统一。你向解释器提供一个声明,并且解释器试图将它与它知道为“真实”的东西统一起来,即它在数据库中的东西。

e.g。

cat(tom) :- true.

断言汤姆是一只猫。

然后你可以查询

?- cat(X).

和prolog将返回

 X = tom

Prolog在其数据库中查找,并尝试将您提供的语句(cat(X))与已经“知道”的事实统一起来。在这种情况下,它会找到cat(tom),因此可以告诉您X=tom