Computer science 一阶逻辑中统一的真实例子?

Computer science 一阶逻辑中统一的真实例子?,computer-science,logic,unification,Computer Science,Logic,Unification,我知道这只是编程问题的一部分,但目前我正在做一点逻辑编程。有一件事我仍然不能正确理解,那就是一阶逻辑中的统一 我读了这篇文章,它或多或少地清楚,目的是寻找一个统一两个句子的术语。。。本文中也有一些例子,但我不明白为什么这应该是有用的。有人能举一个真实世界对象而不是A、B、C等的例子吗。?我希望这能帮助我理解。谢谢逻辑编程基本上都是统一的。您向解释器提供一条语句,解释器尝试将其与它知道为“真”的内容(即数据库中的内容)统一起来 e、 g 声称汤姆是只猫 然后你可以查询 ?- cat(X). pr

我知道这只是编程问题的一部分,但目前我正在做一点逻辑编程。有一件事我仍然不能正确理解,那就是一阶逻辑中的统一


我读了这篇文章,它或多或少地清楚,目的是寻找一个统一两个句子的术语。。。本文中也有一些例子,但我不明白为什么这应该是有用的。有人能举一个真实世界对象而不是A、B、C等的例子吗。?我希望这能帮助我理解。谢谢

逻辑编程基本上都是统一的。您向解释器提供一条语句,解释器尝试将其与它知道为“真”的内容(即数据库中的内容)统一起来

e、 g

声称汤姆是只猫

然后你可以查询

?- cat(X).
prolog将返回

 X = tom

Prolog查看其数据库,并试图将您提供的语句(
cat(X)
)与它已经“知道”的事实统一起来。在本例中,它找到了
cat(tom)
,因此可以告诉您
X=tom

如果您正在查看使用统一且有用的实际示例,请查看计算语言学中使用的基于统一的语法,例如HPSG和LFG。表面上看,这看起来像是另一种统一的味道,但实际上它们是一样的

基于统一的语法可以被认为是一种CFG(上下文无关语法),其中产品是通过统一进行扩展的。CGF中的每个术语都得到一个AVM(属性值矩阵),它是特征和值的有向无环图。这里的想法有点类似于编译器中使用的属性语法

想象一下这个玩具语法:

 S -> NP VP  
 NP -> Kim  
 NP -> The cats  
 VP -> V NP  
 V -> see  
 V -> sees
我们在协议中有一些轻微的过度生成:

*猫看见了金姆 [S[NP猫][VP[V sees][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表示法是可重入性,这意味着此功能的值必须相同,事实上,统一后,如果成功,它们将指向图形中的同一节点。在实践中,我们说动词短语的一致性特征与短语中动词的一致性特征相同

 V -> See / [ AGR pl ]  
 V -> Sees / [ AGR sg ]
在我们的增强玩具语法中,“Kim see the cats”被拒绝,因为NP和VP不会统一,其AGR特性具有不同的值。 当我们进行解析时,我们将AVM统一在一起,因此在表达能力方面获得了很大的提高,这使得语法工程师编写语法变得很容易。一般来说,一个广泛的覆盖范围UBG有大约100条规则,而同等的CFG(可能不存在,具有统一作用的CFG是图灵完备的)将有数千条或更多的规则

有关更多详细信息,请参阅 及
.

感谢您提供这些详细的答案。现在我真的明白了。然而,我想在这里写下一个例子,我在斯图尔特·拉塞尔和彼得·诺维格的《人工智能:现代方法》一书中找到了这个例子,以防有人再次寻找同样的问题。我认为这个答案使用了一种非常实用的方法:

提升推理规则需要查找 使不同的 逻辑表达式看起来相同。 这一过程被称为统一与发展 是所有一级结构的关键组成部分 推理算法。统一 算法需要两个句子和两个句子 如果需要,则返回一个统一体 存在

让我们看一些例子,说明如何 你应该表现好。假设我们有一个 (约翰,x):约翰认识谁 知道吗?对于这个问题的一些答案可以 通过查找所有的句子来找到 与之相结合的知识库 知道(约翰,x)。以下是结果 四不统一 可能在句子中的句子 知识库:

最后一次统一失败是因为x 不能接受约翰和约翰的价值观 伊丽莎白在同一时间


在这里试试?谢谢,但不知何故,我认为这是完全不同的东西,我为之奋斗。我对Unificiton的逻辑部分比对编程部分更感兴趣。引用我的资料来源:prolog示例来自wikipedia的prolog页面。这很有帮助,但我认为你的意思是“s->NP_pl VP_pl”,而不是第二个代码块第二行中的“s->NP_sg VP_pl”。我喜欢这个答案。非常清晰、简洁,不会冗长。它显示了统一的真正本质。
 V -> See / [ AGR pl ]  
 V -> Sees / [ AGR sg ]
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