一个命题是一个或真或假的陈述。 在命题逻辑中,我们将命题看做基础,看看我们能做什么。 既然这是数学,我们需要能够谈论命题,而不是说我们在说什么特定的命题,所以我们用符号来代表它们。 我们始终使用小写字母,如p
,q
和r
来表示命题。 以这种方式使用的字母称为命题变量。 记住,当我说“假设p
是一个命题”的时候,我的意思是“对于讨论其余部分,让符号p
代表一些特定的陈述,它是真的或假的(虽然我现在没有做出 关于它的任何假设)。讨论具有数学一般性,因为p
可以代表任何陈述,并且无论它代表什么语句,讨论都是有效的。
我们用命题做的事情是,将它们与逻辑运算符组合起来。 逻辑运算符可以应用于一个或多个命题,来产生新的命题。 新命题的真值完全由运算符和所应用命题的真值确定 [1]。在中文中,逻辑运算符用“和”,“或”和“非”表示,例如,“我想离开并且我离开了”,这个命题由两个简单的命题通过“和”组合而成。在“我离开了”这个命题中加上“非”一词表示“我没有离开” (经过一点必要的语法调整)。
[1] 句子的真值可以根据其组成部分的真值确定,并不总是真的。 例如,如果
p
是一个命题,那么“莎拉·佩林认为p
”也是一个命题,所以“莎拉·佩林认为”是某种运算符。 然而,它不算作逻辑运算符,因为知道p
是否为真,我们根本就不知道“莎拉·佩林认为p
”是否为真。
但自然语言对于数理逻辑来说有点太丰富了。 当你读“我想离开并且我离开了”这个句子时,你可能会看到一个因果关系的内涵:我离开了,因为我想离开。 这个含义并不符合“我想离开”和“我离开了”这两个命题的真值的逻辑组合。或者考虑“我想离开但我没有离开”这个命题的逻辑组合,在这里, “但”具有与“和”一词相同的逻辑含义,但内涵却非常不符。 因此,在数理逻辑中,我们使用符号来表示逻辑运算符。 这些符号不具有超出其定义的逻辑意义的任何内涵。 对应于中文词语“和”,“或”和“非”的逻辑运算符是∧
,∨
和¬
。
定义 1.1:假设p
和q
都是命题,那么p∧q
、p∨q
和¬p
也都是命题,它们的真值由以下规则确定:
- 当
p
和q
都是真时,p∧q
是真,否则是假。 - 当
p
和q
至少一个是真时,p∨q
是真,否则是假。 - 当
p
时假时¬p
是真,反之亦然。
运算符∧
,∨
和¬
分别被称为合取,析取和否定。 (请注意,p∧q
读为“p
和q
”,p∨q
读为“p
或q
”,¬p
读为“非p
”)。
这些运算符可以用于更复杂的表达式,如p∧(¬q)
或(p∨q)∧(q∨r)
。 由简单的命题和逻辑运算符组成的命题被称为复合命题。 可以在复合表达式中使用括号来表示运算符的求值顺序。 在没有括号的情况下,求值顺序由优先规则确定。 对于上面定义的逻辑运算符,规则是¬
具有较高优先级,∧
次之并优先于∨
(就像乘法优先于加法)。 这意味着在没有括号的情况下,首先对任何¬
运算符进行求值,其次是任何∧
运算符,最后是任何∨
运算符。
例如,表达式¬p∨q∧r
等价于表达式(¬p)∨(q∧r)
,而p∨q∧q∨r
等效于p∨(q∧q)∨r
。 实际上,当你构造自己的表达式时,通常最好放在括号中,使你的意思清楚。 记住,即使你省略括号,你的表达也有明确的含义。 如果你的意思是¬(p∧q)
,那么你说成¬p∧q
就错了!
这仍然没有说明表达式∧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
的值的所有可能的组合,并检查对于所有这些组合,两个复合表达式确实具有相同的值。 将此计算组织成一个真值表是很方便的。 真值表是一个表,其中显示了所包含的命题变量值的每个可能组合的,一个或多个复合命题的值。 图1.1是一个真值表,将p∧(q∧r)
的值与p
,q
和r
的所有可能值进行比较。 表中有八行,因为分配给p
,q
和r
的真值正好有八种不同的组合方式 [2]。在这个表中,我们看到最后两列,表示(p∧q)∧r
和p∧(q∧r)
相同。
[2] 一般来说,如果有
n
个变量,那么有2^n
个不同的方法来为变量赋值真值。 如果你尝试提出一个方案,系统地列出所有可能的值集合,这可能会变得清楚。 如果没有,你将在本章后面找到严格的事实证明。
p q r p∧q q∧r (p∧q)∧r p∧(q∧r)
false false false false false false false
false false true false false false false
false true false false false false false
false true true false true false false
true false false false false false false
true false true false false false false
true true false true false false false
true true true true true true true
图1.1:一个真值表,证明了(p∧q)∧r
和p∧(q∧r)
的逻辑等价性。 该表的最后两列相同的事实表明,这两个表达式对于p
,q
和r
的值的所有八种可能的组合具有相同的值。
更一般地说,我们说如果它们总是具有相同的值,则两个复合命题在逻辑上是等价的,无论它们包含的命题变量是什么真值。 如果命题变量的数量很少,则很容易使用真值表,来检查两个命题是否在逻辑上等价。
除了∧
,∨
和¬
之外,还有其他的逻辑运算符。 我们将考虑条件运算符→
,双向运算符↔
,和异或运算符⊕
[3],这些运算符可以由真值表完全定义,它显示了p
和q
的真值的四种可能组合的值。
[3] 请注意,本书中为逻辑运算符使用的符号不是通用的。
∧
,∨
和→
是相当标准的,¬
通常由~
代替,↔
有时由≡
或⇔
表示。 异或甚至更不标准,但是它通常不如运算符那么重要。
p q p → q p ↔ q p⊕q
false false true true false
false true true false true
true false false false true
true true true true false
当这些运算符在表达式中使用时,如果没有括号表示求值顺序,则使用以下优先规则:异或运算符⊕
与∨
具有相同的优先级。 条件运算符→
具有比∧
,∨
,¬
和⊕
更低的优先级,因此在它们之后进行求值。 最后,双向运算符↔
具有最低的优先级,因此最后求值。 例如,表达式p→q∧r↔¬p⊕s
求值为(p→(q∧r))↔((¬p)⊕s)
。
为了高效处理逻辑运算符,你需要更多了解它们的含义,以及它们与自然语言表达式的关系。
命题p→q
称为蕴含或条件。它通常读作“p
蕴含q
”。在自然语言中,p→q
通常表示为“若p
则q
”。例如,如果p
表示命题“比尔·盖茨是穷人”,q
表示“月亮是绿色奶酪制成的”,然后p→q
可以表示为“如果比尔·盖茨是穷人,那么月亮是绿色奶酪制成的”。在这个例子中,p
是假的,q
也是假的。检查p→q
的定义,我们看到p→q
是一个真实的陈述。大多数人会同意这一点。类似的例子值得一看。假设我断言“如果 Mets 是一个伟大的团队,那么我就是法国的国王”,这个说法就是m→k
,其中m
是“Mets 是一个伟大的团队”,k
是命题“我是法国的国王”,现在我显然不是法国的国王,所以k
是假的。因为k
是假的,所以m→k
为真的唯一方法是,m
也是假的。 (检查表中的→
的定义!)所以,通过断言m→k
,我确实认为 Mets 不是一个伟大的团队。
或者考虑这个陈述,“如果聚会在星期二,那么我会参加”。如果我主张这个陈述,我该怎么说?我认为p→q
是真的,其中p
代表“聚会在星期二”,q
表示“我将参加聚会”。假设p
是真实的,那就是聚会实际上在星期二。检查→
的定义,我们看到,在p
为真且p→q
为真的唯一情况下,q
也为真。所以从“如果聚会在星期二,我将参加聚会”和“派对实际上在星期二”的事实,你可以推断,“我将参加聚会”也是正确的。但是,另一方面,假设聚会实际上在星期三。那么p
是假的。当p
为假并且p→q
为真时,p→q
的定义允许q
为真或假。所以,在这种情况下,你不能对我是否参加聚会做任何推导。陈述“如果聚会在星期二,那么我会参加”不会宣布,如果聚会在星期二之外的其他日子会发生什么。
蕴含(¬q)→(¬p)
被称为p→q
的逆否。 一个蕴含在逻辑上等同于它的逆否。 “如果今天是星期二,那么我们在比利时”的逆否是“如果我们不在比利时,那么今天不是星期二”。这两个句子断言了完全一样的东西。
注意,p→q
在逻辑上不等同于q→p
。 蕴含q→p
称为p→q
的逆。 “如果今天是星期二,那么我们在比利时”的逆是“如果我们在比利时,那么今天是星期二”。请注意,这些陈述中的任何一个是可以的,而另一个是假的。 在自然语言中,我可以表达这样的一个事实,即“如果今天是星期二,那么我们在比利时,反之亦然”。在逻辑上,这可以使用(p→q)∧(q→p)
来表示。
双向条件运算符与条件运算符密切相关。事实上,p↔q
在逻辑上等同于(p→q)∧(q→p)
。 命题p↔q
通常读取为“p
当且仅当q
”(“p
当q
”部分表示q→p
,而“p
仅当q
”是另一种断言p→q
的方式)。 也可以表示为“若p
则q
,反之亦然”。有时候在中文中,“如果…那么”的真实含义是“当且仅当”,例如,如果一个父母告诉一个孩子 “如果你听话,圣诞老人会带给你玩具”,父母可能真的意味着说“圣诞老人会带给你玩具,当且仅当你听话”(父母可能不会回应孩子的完全合乎逻辑的辩解:“但是你从来没有说过,如果我不听话就会发生什么事情”)。
最后,我们转向异或运算符。 中文的“或”其实有些含糊不清。 两个运算符⊕
和∨
表示这个单词的两个可能的含义。 命题p∨q
可以明确地表示为“p
或q
或都有”,而p⊕q
表示“p
或q
,但不能同时存在”。如果菜单说可以选择汤或沙拉, 这意味着你不能同时拥有这两个。 在这种情况下,“或”是异或。 另一方面,“如果你吸烟或喝酒,那么你有心脏病的风险”,或是包容性的,因为如果你吸烟并且喝酒,你肯定会陷入困境。 在数学中,“或”这个词总是表达为p∨q
的包容性含义。
现在,使用任何→
,↔
和⊕
运算的任何复合命题,都可以重写为仅使用∧
,∨
和¬
的逻辑等效命题。 很容易检查p→q
在逻辑上等同于(¬p)∨q
。 (只需检查(¬p)∨q
的真值表)。同样,p↔q
可以表示为((¬p) ∨q) ∧((¬q) ∨p)
,所以在严格的逻辑意义上,→
,↔
和⊕
是不必要的。 (不过,它们是实用和重要的,我们不会放弃它们。)
更是如此:在严格的逻辑意义上,我们可以没有合取运算符∧
。 很容易检查p∧q
在逻辑上等同于¬p∨¬q
,所以使用∧
的任何表达式都可以重写为仅使用¬
和∨
的表达式。 或者,我们可以没有∨
,并以¬
和∧
来编写一切。
某些类型的命题,将在我们进一步的逻辑使用中发挥特殊的作用。 特别是,我们定义的重言式和矛盾如下:
定义1.3。 一个复合命题是重言式,当且仅当对于它包含的命题变量的真值的所有可能组合,它都是真的。 一个复合命题是矛盾,当且仅当对于它包含的命题变量的真值的所有可能组合,它都是假的。
例如,命题((p∨q)∧-q)→p
是一个重言式。 这可以用真值表检查:
p q p∨q ¬q (p∨q)∧¬q ((p∨q)∧¬q) → p
false false false true false true
false true true false false true
true false true true true true
true true true false false true
最后一列中的所有条目都为真的事实告诉我们,这个表达式是一种重言式。 注意,对于任何复合命题P
,P
是重言式,当且仅当¬P
是矛盾时。 (这里和以后我用大写字母代表复合命题,P
代表由简单命题,命题变量和逻辑运算符组成的任何公式。)逻辑等价可以根据重言式定义:
定义1.4。 当且仅当命题P↔Q
是重言式时,两个复合命题P
和Q
被认为是逻辑等价的。
在逻辑上等同于Q
的断言,象征性地表示为P≡Q
。例如,(p→q)≡(¬p∨q)
和p⊕q≡(p∨q)∧¬(p∧q)
。
练习
一、给出三个真值表,定义逻辑运算符∧
,∨
和¬
。
二、将括号插入以下复合命题中,来展示运算符求值顺序:
a) ¬p∨q
b) p∧q∨¬p
c) p∨q∧r
d) p∧¬q∨r
三、列出四个命题变量s
,p
,q
,r
的真值的16种可能的组合。 尝试找出一个系统的方式来列出值。 (提示:就像图1.1中的真值表那样,从p
,q
和r
的八个值的组合开始,现在,解释为什么五个变量可能组合的值有32个,并描述如何系统地列出它们)。
四、以下复合命题中,一些是重言式,一些是矛盾,一些都不是。 对于每个情况,使用真值表来判断命题属于哪一类:
a) (p∧(p → q)) → q
b) ((p → q)∧(q → r)) → (p → r)
c) p∧(¬p)
d) (p∨q) → (p∧q)
e) p∨(¬p)
f) (p∧q) → (p∨q)
五、使用真值表来证明,以下每个命题在逻辑上等同于p↔q
。
a) (p → q)∧(q → p)
b) (¬p) ↔ (¬q)
c) (p → q)∧((¬p) → (¬q))
d) ¬(p⊕q)
六、→
是结合运算嘛? 也就是(p→q)→r
在逻辑上等同于p→(q→r)
嘛? ↔
是结合运算嘛?
七、让p
代表“你离开”的命题,让q
代表“我离开”的命题。使用p
和q
将以下句子表示为复合命题,并表明它们在逻辑上等价:
a) 要么你离开,要么我离开(或者都是)。
b) 如果你不离开,我就离开。
八、假设m
代表“地球移动”的命题,c
代表“地球是宇宙的中心”,而g
代表“伽利略被抓了”。将以下复合命题翻译成中文:
a) ¬g ∧c
b) m →¬c
c) m ↔¬c
d) (m → g)∧(c →¬g)
九、给出以下每个中文句子的逆和逆否:
a) 如果你听话,圣诞老人会给你玩具。
b) 如果包裹重量大于一盎司,你需要付额外的邮费。
c) 如果我有选择,我就不吃茄子。
十、在普通的 52 张扑克牌组中,有多少张卡满足条件:
a) 这张卡是红桃 10。
b) 这张卡是红桃,或者 10。
c) 如果这种卡是 10,那么它是红桃。
d) 这张卡是 10,当且仅当它是红桃。
十一、定义逻辑运算符↓
,使得p↓q
在逻辑上等同于¬(p∨q)
。 (这个操作符通常被称为“或非”)。 证明每个命题¬p
,p∧q
,p∨q
,p→q
,p↔q
和p⊕q
可以重写为逻辑等价命题,使用↓
作为其唯一运算符。