逻辑程序中的知识表示与否定语义
1. 稳定语义与良基语义的基础
在逻辑程序中,我们常常会遇到知识表示和推理的问题。之前我们已经了解了默认否定的应用,它在能获取完整正信息的领域非常有用。例如,在表示从布达佩斯到美国的航班连接时,我们可以列出所有现有的航班,然后利用默认否定来推导负信息。
但在某些情况下,默认否定就显得不够用了。比如在一个游戏程序 Pgame
中,有事实 move from to(a, b)
、 move from to(b, a)
和 move from to(b, c)
,当我们查询 ?-wins(b)
时,使用 SLDNF 会得到一个无限振荡的 SLD - 树序列,而 WFS(良基语义)能得出正确结果: WFS(Pgame) = { not wins(c), wins(b), not wins(a)}
,这与我们的直觉完全相符。
接下来介绍稳定语义(STABLE),它是一种比 WFS 更强的语义。稳定语义为任何程序 P
关联一组二值模型,类似于经典谓词逻辑。它除了满足之前介绍的一些原则外,还满足“消除矛盾原则”:如果一个程序 P
的规则体中包含相同的原子 A
和 not A
,那么可以在不改变语义的情况下消除这条规则。
通过 Gelfond - Lifschitz 变换,我们可以定义稳定模型。对于程序 P
和模型