一阶逻辑推理中的前向链接算法详解
1. 一阶逻辑推理基础
在一阶逻辑推理中,我们会遇到各种谓词和子句。例如,像 Employs(x,y) 这样的谓词,通过不同的变量和常量组合,可以形成不同的表达式,如 Employs(x,Richard) 、 Employs(IBM,y) 等。这些表达式可以构成一个包含关系格(subsumption lattice),以 Employs(IBM,Richard) 为最低节点的包含关系格和以 Employs(John,John) 为基础的包含关系格各有特点。在包含关系格中,任何节点的子节点可以通过对其父节点进行一次替换得到,而任意两个节点的“最高”共同后代是应用它们的最一般合一者的结果。
对于参数较少的谓词,为包含关系格中的每个点创建索引是一种不错的权衡。虽然在存储时需要多做一些工作,但可以加快检索速度。然而,对于具有 n 个参数的谓词,格中包含$O(2^n)$个节点。如果允许使用函数符号,节点的数量也会随着要存储的句子中的项的大小呈指数级增长,这可能会导致大量的索引。因此,我们需要将索引限制在查询中可能经常使用的那些上。可以采用固定策略,例如仅在由谓词加单个参数组成的键上维护索引,或者学习一种自适应策略来创建索引以满足查询的需求。
2. 前向链接算法概述
前向链接算法最初是为命题确定子句的知识库设计的,现在我们将其扩展到一阶确定子句。当然,有些逻辑句子不能表示为确定子句,因此不能用这种方法处理,但形式为“前提 ⇒ 结论”的规则足以涵盖各种有趣的现
超级会员免费看
订阅专栏 解锁全文
3553

被折叠的 条评论
为什么被折叠?



