第二章命题逻辑等值演算
2.1等值式
设公式A,B共同含有n个命题变项,A或B可能有哑元.若A与B有相同的真值表,则说明在所有2n个赋值下,A与B的真值都相同,因而等价式A<->B为重言式
定义2.1设A,B是两个命题公式,若A,B构成的等价式A<->B为重言式,则称A与B是等值的,记作A<=>B
定义中的符号<=>不是联结符,它是用来说明A与B等值(A<->B是重言式)的一种记法,因而<=>是元语言符号.千万不要将台<=>与<->混为一谈,同时也要注意它与一般等号=的区别
下面讨论判断两个公式A与B是否等值的方法,其中最直接的方法是用真值表法判断A<->B是否为重言式
例2.1判断下面两个公式是否等值:
┓(pvq) 与 ┓P^┓q
解用真值表法判断┓(pVq)<->(┓p^┓q)是否为重言式.此等价式的真值表如表2.1所从表示,从表可知它是重言式,因而┓(pVq)与┓P^┓q等值,即┓(pVq)<=>(┓p^┓q)
其实,在用真值表法判断A<->B是否为重言式时,真值表的最后一列(即A<->B的真值表的最后结果)可以省略.若A与B的真值表相同,则A<=>B,否则,A<≠>B(用来表示A与B不等值,
<≠>也是常用的元语言符号)
例2.2判断下列各组公式是否等值
- P->(q→r) 与 (p^q)→r
- (P→q)→r与 (P^q)→r
解 表2.2中列出了p→(q→r),(P∧q)→r和(p→q)→r的真值表.不难看出p→(q→r)与(P^q)→r等值,即
p→(q→r)<=>(P∧q)→r
而(p→q)→r与(p∧q)→r的真值表不同,因而它们不等值,即
(p→q)→r<≠>(P∧q)→r
虽然用真值表法可以判断任何两个命题公式是否等值,但当命题变项较多时,工作量是很大的,证明公式等值的另一个方法是利用已知的等值式通过代换得到新的等值式.例如,用真值表很容易验证p<->┓┓P是重言式如果用任意一个命题公式替换式子中的P,如用p^q替换p得到p^q<->┓┓(P^q),直觉上所得到的新式子也是重言式,事实上,有下述命题:
设A是一个命题公式,含有命题变项p1,P2,…,Pn,又设A1,A2,…,An,是任意的命题公式.对每一个i(i=1,2,…,n),把Pi在A中的所有出现都替换成Ai,所得到的新命题公式记作B.那么,如果A是重言式,则B也是重言式
这是显然的.事实上,对任意的真值赋值,把在这个真值赋值下A1,A2,...,An的真值代人A中的命题变项P1,P2,…,Pn与把这个真值赋值直接代入B是一回事.如果A是重言式,A必为1,B也必为1.从而,B也是重言式
根据这个命题和P<->┓┓p是重言式,我们得到A<=>┓┓A,其中A是任意的命题公式,称这个式子为等值式模式,下面给出16组常用的重要等值式模式,以它们为基础进行演算,可以证明公式等值
- 双重否定律幂等律 A<=>┓┓A (2.1)
- 幂等律 A<=>AVA , A<=>A^A (2.2)
- 交换律 AVB<=>BVA , A^B<=>B^A (2.3)
- 结合律 (AVB) V C <=> A V (BVC)
(A^B) ^ C <=> A ^ (B^C) (2.4)
以上16组等值式模式共包含了24个重要等值式,它们都是用元语言符号书写的,等值式模式中的A,B,C可以替换成任意的公式,每个等值式模式都可以给出无穷多个同类型的具体的等值式.例如,在蕴涵等值式(2.12)中,取A=p,B=q时,得到等值式
- >q<=>┓pVq
当取A= pVqVr,B=p^q时,得到等值式
(pVqvr)->(p^q) <=> ┓(pvqvr)V(p^q)
这些具体的等值式称为等值式模式的代入实例
由已知的等值式推演出另外一些等值式的过程称为等值演算.等值演算是布尔代数或逻辑代数的重要组成部分
在等值演算过程中,要使用下述重要规则,它的内容如下:
置换规则 设Φ(A)是含公式A的命题公式,Φ(B)是用公式B置换Φ(A)中A的所有出现后得到的命题公式,若B<=>A,则Φ(A)<=>Φ(B)
这也是显然的,因为如果B<=>A,那么在任意的真值赋值下B和A的真值相同,把它们代入Φ(・)得到的结果当然也相同,从而Φ(A)<=>Φ(B)
例如,在公式(p→q)→r中,可用┓pVq置换其中的p→q,由蕴涵等值式可知,p→q<=>┓pvq,所以
(p→q)→r<=>(┓pVq)→r
在这里,使用了置换规则.如果再一次地用蕴涵等值式及置换规则,又会得到
(┓pvq)->r<=>┓(┓pvq)vr
再用德摩根律及置换规则,又会得到
┓(┓pvq)vr<=>(p^┓q)vr
再用分配律及置换规则,又会得到
(P^┓q)Vr<=>(pvr)^(┓qvr)
将以上过程连在一起,得到
公式之间的等值关系具有自反性、对称性和传递性、所以上述演算中得到的5个公式彼此之间都是等值的.在演算的每一步都用到了置换规则,因而在以后的演算中,置换规则均不必写出.
下面用实例说明等值演算的用途
例2.3用等值演算法验证等值式:
(pVq)→r<=>(P→r)∧(q→r)
证可以从左边开始演算,也可以从右边开始演算.现在从右边开始演算
(p→r)∧(q->r)
<=>(┓pvr) ^ (┓qvr) (蕴涵等值式)
<=>(┓pv┓q)v (分配律)
<=>┓(pVq)Vr (德摩根律)
<=>(pVq)→r (蕴涵等值式)
所以,原等值式成立.读者亦可从左边开始演算验证之.
例2.3说明,用算值演算法可以验证两个公式等值,但一般情况下,不能用等值演算法直接验证两个公式不等值
例2.4证明:
(p→g)->r <≠> p->(q->r)
证 方法一:真值表法.读者自己证明
方法二:观察法.只要给出一个赋值使得这两个命题公式的真值不同,就表明它们不等值容易看出,010是(p→q)→r的成假赋值,是p→(q->r)的成真赋值,两式不等值得证
方法三:当两个式子比较复杂,一时看不出使它们一个成真另一个成偲的赋值时,可以先通过等值演算将它们化成容易观察真值的情况,再进行判断
A=(p→q)→r
<=>(┓pvq)->r (蕴涵等值式
<=>┓(┓pVq)Vr (蕴涵等值式)
<=>(p^┓q)vr (德摩根律)
B=p->(q->r)
<=>┓pv(┓qvr) (蕴涵等值式)
<=>┓pv┓qvr (结合律)
容易观察到,000,010是A的成假赋值,而它们是B的成真赋值
例2.5用等值演算法判断下列公式的类型
- (p→q)^p→q
- ┓(p→(pVq))^r
- P^ (((pVq)^┓p)->q)
解 在以下的演算中没有写出所用的基本等值式,请读者自己填上
(2) ┓(p->(pvq)) ^r
- P^(((pvq)^┓p)->q)
等值演算中各步得出的等值式所含命题变项可能不一样多,如(3)中最后一步不含q,此时将q看成它的哑元,考虑赋值时应将哑元也算在内,因而赋值的长度为2.这样,可将(3)中各步的公式都看成含命题变项p,q的公式,在写真值表时已经讨论过类似的问题
下面举一个如何利用等值演算解决实际问题的例子
例2.6在某次研讨会的中间休息时间,3名与会者根据王教授的口音对他是哪个省市的人判断如下
甲:王教授不是苏州人,是上海人
乙:王教授不是上海人,是苏州人
丙:王教授既不是上海人,也不是杭州人
听完这3人的判断后,王教授笑着说,你们3人中有一人说得全对,有一人说对了一半,另一人说得全不对.试用逻辑演算分析王教授到底是哪里人
解 设命题
p:王教授是苏州人
q:王教授是上海人
R:王教授是杭州人
p,q,r中必有一个真命题,两个假命题,要通过逻辑演算将真命题找出来
甲的判断为┓p^q
乙的判断为p^┓q
丙的判断为┓q^┓r
于是
甲的判断全对为 B1=┓p^q
甲的判断对一半为 B2=(┓p∧┓q)V(p∧q)
甲的判断全错为 B3=P^┓q
乙的判断全对为 CI=P^┓q
乙的判断对一半为 C2=(P^q)V(┓p∧┓q)
乙的判断全错为 C3=┓p^q
丙的判断全对为 D1=┓q^┓r
丙的判断对一半为 D2=(┓q∧r)V(q∧┓r)
丙的判断全错为 D3=q^r
由王教授所说
E=(B1^C2^D3)V(B1^C3,^D2)V(B2^C1^D3)V
(B2∧C3∧D1)V(B3^C1^D2)V(B3^C2AD1)
为真命题.