逻辑程序中的知识表示:否定与语义探索
1. 引言
在知识表示(KR)领域,带有否定的逻辑程序表现出了显著的优势,它能够自然且直接地对默认陈述进行形式化。然而,为这类程序定义合适的语义以及找到高效的查询回答方法仍然是待解决的问题。接下来我们将探讨两种不同的处理方法。
2. 处理否定的两种方法
- LP 方法 :主要在逻辑编程社区被采用,该方法尽量贴近 SLD 归结,将否定视为“有限失败”,由此产生了 SLDNF 归结,这是一种用于查询回答的过程机制。
- NML 方法 :由非单调推理领域的研究者提出,核心问题是“什么是正确的语义”,即先寻找符合直觉且能恰当处理各种 KR 任务的语义,而实现该语义的过程演算则是次要考虑因素。
3. 否定作为有限失败
3.1 处理默认原子的思路
对于包含默认原子的查询,在修改 SLD 归结时,可按以下步骤处理默认原子:
- 当原始查询的子目标为默认原子“not A”时,记住当前的 SLD 树,然后尝试解决“A”,开启新的 SLD 树。
- 若解决“A”成功,则“not A”为假,当前分支失败,需回溯并考虑其他子查询。
- 若“A”的 SLD 树有限且所有分支都失败,则称 A 有限失败,回到原始 SLD 树,将“not A”视为已成功解决,继续处理当前列表中的下一个子目标。
需要注意的是,正原子的 SLD 树可能无限但失败,例如规则“p ← p”对于查询“p”的 SLD 树就是无限且失败的。