我一直在读一些关于将一阶逻辑(FOL)句子转换为联合正规形式(CNF),然后执行解析的注释。
转换为CNF的步骤之一是Standardize variables
。
我一直在寻找找出解决算法的完整条件违反和健全不违反的原因,如果我不对变量进行标准化的话。
任何人都可以添加细节,为什么只是违反完整性,而且健全性仍然存在?
答案 0 :(得分:1)
这是一个可以帮助您想象这个的示例。假设你的理论是
(for all X : nice(X)) or (for all X : smart(X))
(1)
如果你将标准化分开,将导致CNF:
nice(X) or smart(Y)
也就是说,人口中的每个人都很好,或者人口中的每个人都很聪明,或两者兼而有之。
将标准化分开将产生CNF
nice(X) or smart(X)
相当于
(for all X : nice(X) or smart(X))
(2)
也就是说,对于人口中的每个个人,该个人是好的,或聪明的,或两者兼而有之。
这个理论(2)比原始理论(1)更少,更弱,因为它承认每个人都不好的情况并不是真的,每个人都是聪明的,但 是真的,每个人都是一个或另一个或两者。换句话说,(2)并不意味着(1),但(1)意味着(2)(如果整个人口都很好,那么每个人都很好;如果整个人口都很聪明,那么每个人都很聪明;因此,每个人都很好或聪明)。 (2)所接受的可能世界的集合严格地大于(1)所接受的可能世界的集合。
这对完整性和健全性有什么看法?
使用(2)并不完整,因为我可以向你展示(1)中一个真正定理的反例,但在使用(2)时却没有证明是正确的。考虑一下这个定理“如果约翰不是很好但很聪明,那么利兹很聪明”。这是正确的(1)因为如果整个人口分享这两种品质中的一种,那么它必须是“聪明的”,因为约翰并不好,所以Liz(以及其他所有人)也必须聪明。然而,鉴于(2)这不再是真实的(可能是Liz很好但不聪明,其他人都是其中之一,但仍然可以给予(2))。因此我不能再使用(2)(在将标准化分开之后)证明 true 定理,因此我的推论并不完整。
现在假设我使用(2)证明某些定理T为真。这意味着T在(2)持有的每个可能世界中都有,包括在(1)中持有的子集(根据上面的第三段)。因此,在(1)中T也为真,因此使用(2)进行推理仍然是合理的。
简而言之:当你没有标准化时,你“加入”关于整个领域(人口)的陈述,并将它们与个人联系起来,这些陈述会更弱,并不会暗示以前隐含的某些事实;它们会丢失,你的程序也不会完整。