本章介绍离散数学的基础知识。有三个主要内容:逻辑、集合和函数。逻辑规则给出数语语句的准确含义。 例如,逻辑规则有助于我们理解下列语句及推理:“存在一个不是两个整数的平方和的整数”, 以及“对每个整数n,小于等于n的正整数之和是n(n+1)/2”。 逻辑是所有数学推理的基础,对计算机设计、系统规范说明、人工智能、计算机程序设计、程序设计语言以及计算机科学的其他领域,逻辑都有实际的应用。
为了理解数学,就必须理解正确的数论证(即证明)是由什么组成的。为了学习数学, 就需要构造数学论证而不仅仅是阅读说明。 本章的目的在于讲授正确的数学论证是由什么组成的,并且介绍构造这些论证的工具。证明不仅对于数学是重要的,而且在计算机科学的很多方面也是重要的,包括程序验证、算法正确性和系统的安全性等。而且,自动推理系统已经被构造出来,允许计算机构造自己的证明。
离散数学的不少内容是研究用于表示离散对象的离散结构的。许多重要的离散结构都是用集合构造的,而集合则指的是一组对象。 从集合构造的离散结构例子包括:计数时广为应用的对象组合,也就是无序的对象集;表示对象之间相互关连的关系,也就是有序偶的集合;图形,也就是顶点集合及边边连接顶点的边集合;以及用于模拟计算机的有限状态机。
函数概念是离散数学中特别重要的概念。函数为一个集合中每个元素恰好指派另一个集合中的某个元素。像序列和字符串等这些有用的结构都是函数的特例。函数在整个离散数学中扮演着重要的角色,主要用于表示算法的计算复杂性,研究集合的大小,对不同类型别的对象计数,以及不计其数的其他方面。
1.1 逻辑
1.1.1 引言
逻辑规则给出数学语句的准确含义, 这些规则用来区分有效和无效的数学论证。由于本书的一个主要目的是教会读者如何构造正确的数学论证,所以我们从介绍逻辑开始离散数学的学习。
逻辑不仅对理解数学推理十分重要,而且在计算机科学中有许多应用。这些逻辑规则用于计算机电路设计、计算机程序构造、程序正确性证明以及许多其他方面。在随后的几章中将逐一讨论这些应用。
1.1.2 命题
我们首先介绍逻辑的基本成分----命题。命题是一个或真或假的陈述语句,但不能既真又假。
例1 下面的陈述句均为命题
1. 华盛顿是美国的首都。
2. 多伦多是加拿大的首都。
3. 1+1=2。
4. 2+2=3。
命题1和3成真,命题2和4为假。
下一例子给出了不是命题的若干语句。
例2 考虑下述语句:
1. 几点了?
2. 仔细读这个。
3. x+1=2。
4. x+y=z。
语句1和2不是命题,因为它们不是陈述语句。语句3和4不是命题,因为它们既不成真,也不为假,这里由于语句中的变量没有赋值。在1.3 节将讨论这一类语句形成命题的多种方法。
命题通常用字母表示,就像用字母表示变量那样。习惯上用来表示命题的字母是p,q,r,s, ... 等。如果一个命题是真命题,它的真值为真, 用T表示;如果它是假命题,其真值为假,用F表示。
涉及命题的逻辑领域称为命题演算或命题逻辑。它最初是由亚里士多德系统地佛建的。
现在我们转而注意从那些已有的命题产生新的命题的方法,这些方法在1854年曾由英国数学家布尔在他的题为《The Laws of Thought》的书中讨论过。许多数学陈述都是由一个或多个命题组合而来。称为复合命题的新命题由已有的命题用逻辑运算符组合而来。
定义1 命题p为一命题,则语句
“不是P所说的情形。”
是另一个命题,称为p的否定,p的否定用¬表示,命题¬p读作“非p”.
例3. 找出命题
“今天是星期五。”
的否定,并用中文表示。
解 否定为
“并非今天是星期五。”、
也可以更简单地表述为
“今天不是星期五。”
注意: 严格地说,像例3这种含有可变时间的语句不是命题,除非假定了一个确定的时间。同样,除非假定了确定的地点,否则含有可变地点的语句不是命题;除非假定了确定的人,否则含有可变代词的语句不是命题。
真值表给出了命题真值之间的关。 在确定由较简单命题组成的命题之真值时,真值表别有用。表1-1给出的命题p及其否定命题¬p所有可能的真值。
命题的否定也可以看作非运算符作用在命题上的结果。非运算符从一个已有的命题构造出一个新命题。现在将引入从两个或者多个已有命题构造新命题的逻辑运算符, 这些逻辑运算符也称为联接词。
表1-1 命题之否定的真值
p | q |
T | F |
F | T |
定义2 令 p 和 q 为命题。用 p ∧q 表示的命题“p而且q”是这样一个命题:当p和q 均成真时它成真,否则为假。命题 p ∧q 称为p和q的合取。
表1-2 给出了 p ∧q 的真值表。注意真值表中共有四行,每行对应命题p和q 真值的一种组合。
例4 找出命题p和q的合取,其中p的命题“今天是星期五”,q的命题“今天下雨”。
解 这两个命题的合取p ∧q 是命题“今天是星期五而且下雨”。 这一命题在下雨天的星期五成真,不是星期五的日子为假,不下雨的星期五也为假。
定义3 令p和q为命题,用p∨q 表示命题“p或q”是这样一个命题:它的真值在p和q均为假时为假,否则成真。命题p∨q 称为p和q的析取。
p∨q 的真值表如表1-3所示。 联接词“或”在析取中的使用对应于词“或”(or)包含两种情况之一,即是“同或”(inclusive or)。析取所含两命题之一成真或者均成真时,析取的真值为真。例如,下面这句话中,“或”表达的即是“同或”;
“选修过微积分或计算机科学的学生可以选修本课程。”
这里我们指的是,选修过微积分或计算机科学两门课的学生以及只选修过其中一门课的学生都可以选修本课。另一方面,当我们说:
“学习过微积分或学过计算机科学,但不是两者都学过的学生,可以注册要课。”的时候,使用的“或”是“异或”。这里我们的意思是既学过微积分,又学过计算机科学的学生不能选本课;只有那些恰好在这两门课中选修过一门的学生可以选修本课。
同样, 若餐馆的菜单上写着“汤或沙拉,加一道小菜”。一般情况这都表示顾客可以选择汤,也可以选择沙拉, 但不是妈选择汤又选择沙拉,才加一道小菜。因此, 这里是“异或”而不是“同或”。
例5 若 p 和q 就是例4中的两个命题,它们的析取是什么。