一阶逻辑统一的真实世界示例?
Posted
技术标签:
【中文标题】一阶逻辑统一的真实世界示例?【英文标题】:Real world example of Unification in First Order Logic? 【发布时间】:2011-02-27 01:08:45 【问题描述】:我知道这只是编程问题的一部分,但目前,我正在做一点逻辑编程。我仍然不能正确理解的一件事是一阶逻辑中的统一。
我阅读了Wikipedia article,其目的或多或少很清楚,其目的是搜索一个统一两个句子的术语...本文中也有示例,但我只是不明白为什么应该这样做有用。任何人都可以用现实世界的对象而不是 A、B、C 等举个例子吗?我希望这能帮助我理解。谢谢
【问题讨论】:
在这里试试? ***.com/questions/1133289/… 谢谢,但不知何故,我认为这是完全不同的东西,我很喜欢。我对统一的逻辑部分比对编程部分更感兴趣。 【参考方案1】:感谢您提供这些详细的答案。现在我真的明白了。但是,我想在这里写下我在 Stuart Russell 和 Peter Norvig 的“人工智能:一种现代方法”一书中找到的一个例子,以防有人再次寻找同样的问题。我认为这个答案使用了一种非常实用的方法:
提升的推理规则需要找到 不同的替换 逻辑表达式看起来相同。 这个过程称为统一和 是所有一阶的关键组成部分 推理算法。统一 算法需要两个句子和 如果有一个,则为它们返回一个统一符 存在。
让我们看一些例子 UNIFY 应该表现得很好。假设我们有一个 查询 Knows(John, x): 谁知道 John 知道?这个查询的一些答案可以 找到所有句子 统一的知识库 知道(约翰,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 不能接受 John 和 伊丽莎白同时。
【讨论】:
我喜欢这个答案。非常简洁明了,无需赘述。它显示了统一的真正本质。【参考方案2】:如果您正在查看使用统一且有用的实际示例,请查看计算语言学中使用的基于统一的语法,例如 HPSG 和 LFG。表面上看是另一种统一的味道,其实是一样的。
基于统一的语法可以被认为是一种 CFG(上下文无关语法),其中产生式通过统一进行扩展。 CGF 中的每个术语都有一个 AVM(属性值矩阵),它是特征和值的有向无环图。这里的想法有点类似于编译器中使用的属性语法。
想象一下这个玩具语法:
S -> NP VP
NP -> Kim
NP -> The cats
VP -> V NP
V -> see
V -> sees
我们在协议中有些轻微的过度生成:
*猫看到金 [S [NP 猫] [VP [V see] [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 是 reentrancies,意思是这个特征的值必须相同,实际上统一后它们会指向图中的同一个节点,只要成功。这里在实践中我们说动词短语的一致性特征与短语中动词的一致性相同。
V -> See / [ AGR pl ]
V -> Sees / [ AGR sg ]
使用我们的增强玩具语法“Kim see the cats”被拒绝,因为 NP 和 VP 不会统一,其 AGR 功能具有不同的值。 当我们进行解析时,我们将 AVM 统一在一起,因此在表达能力上获得了很大的提升,使语法工程师更容易编写语法。通常,广泛覆盖的 UBG 具有大约一百条规则,而可能不存在的等效 CFG 具有统一的 CFG 是图灵完备的,将具有数千个或更多的规则。
更多详情见 HPSG 和 LFG.
【讨论】:
这很有帮助,但我认为您在第二个代码块的第二行中的意思是“S -> NP_pl VP_pl”而不是“S -> NP_sg VP_pl”。【参考方案3】:逻辑编程,AFAIK,几乎都是统一的。你向解释器提供一个语句,解释器试图将它与它知道是“真实”的东西统一起来,即它的数据库中的东西。
例如
cat(tom) :- true.
断言 tom 是一只猫。
然后就可以查询了
?- cat(X).
prolog 会返回
X = tom
Prolog 查看其数据库并尝试将您提供的语句 (cat(X)
) 与它已经“知道”的事实统一起来。在这种情况下,它会找到cat(tom)
,因此可以告诉您X=tom
。
【讨论】:
引用我的资料:序言示例来自***的序言页面。以上是关于一阶逻辑统一的真实世界示例?的主要内容,如果未能解决你的问题,请参考以下文章