第5章  集合论基础
本章导引
  集合论作为数学中最富创造性的伟大成果之一,是19世纪末由德国数学家格奥尔格·康托尔①创立起来的。现在,集合已经发展成为数学及其他各学科不可缺少的描述工具,并且成为数学中最基本的概念。在计算机科学中,集合论不仅可以表示数和数的运算,还可以应用于非数值领域中信息的表示和处理,在程序设计语言、数据结构、操作系统、数据库以及人工智能等课程中有着广泛的应用。
  一般认为,康托尔建立的集合体系属于朴素集合论体系,将满足相关性质的个体放在一起组成集合。但在康托尔体系中隐含着矛盾,这就是著名的理发师问题②。为了消除悖论,产生了集合论的公理体系。
5.1  集合的概念与表示
  定义?5-1  把具有某种性质的个体汇集在一起,就形成一个集合(set)。在集合中,个体通常被称为元素(element)或成员。
  例如,所有企鹅汇集在一起形成的集合;所有自然数形成的集合;所有鲁东大学的学生汇集在一起形成的集合等。
  一般情况下,用大写字母表示集合,而集合中的元素通常用小写字母表示。如果元素a是集合A中的元素,记为a?A,读作“a属于A”;如果元素a不是集合中的元素,记为,读作“a不属于A”。
  例5-1 (1)全体自然数构成的全体,称为自然数集合,用N表示。
  (2)全体整数构成的全体,称为整数集合,用Z表示。
  (3)全体实数、有理数、复数构成的全体,分别称为实数集合、有理数集合、复数集合,分别用R、Q、C表示。
  (4)C语言中的所有标识符构成的集合。
  (5)全体英文字母构成的集合。
  □
  在集合中,元素之间是互不相同的,相同的元素只能出现一次。同一个元素在集合中的出现没有先后顺序,即集合和集合是同一个集合。对元素而言,要么属于某个集合,要么不属于该集合,二者必居其一。
  一般来说,集合有两种表示方法:列举法和描述法。
  列举法。当一个集合中元素的个数有限时,通常将集合中的所有元素列举出来,这种方法称为列举法,又称枚举法。例如:
?????????

等,都是用列举法表示的集合。
  描述法。通常通过刻画集合中元素具备的性质来表示集合,这种方法称为描述法。一般地,用谓词P(x)表示x具备的性质,用{x|P(x)}表示具有性质P的全体元素构成的集合。例如:
  R={x | x是一个实数}表示实数集合;
  N={x | x是正整数或零}表示自然数集合;
  表示区间中的所有实数组成的集合。
  例5-2  用列举法表示下列集合。
  (1)不大于10的非负偶数组成的集合。
  (2)与轴的交点组成的集合。
  (3)式子的所有值组成的集合。
  解:
  (1)。
  (2)。
  (3)根据a、b的正负值,对上述情况进行如下3种情况的分析。
  ① 当时,;
  ② 当或时,;
  ③ 当时,。
  因此,上述集合用列举法表示为。
  □
  例5-3  用描述法表示下列集合。
  (1)正偶数集。
  (2)被3除余2的正整数的集合。
  (3)平面直角坐标系上坐标轴上的点组成的集合。
  解:
  (1);
  (2);
  (3)。
  □
5.2  集合之间的关系
  定义?5-2  设A、B是两个集合,如果集合A中的每个元素都是集合B中的元素,称集合A是集合B的子集(subset),记作或,如果A不是B的子集,记作。形式化表示如下:

AB???
  例5-4  设,,,则有,,,CA等成立。
  □
  从定义5-2可以看出,对任意集合A来讲,成立。
  定义5-3  设A、B是两个集合,如果A是B的子集,同时B也是A的子集,称两集合相等③,即

如果集合A和B不相等,记为A ? B,即

如果集合A是集合B的子集,并且A ? B,则称集合A是集合B的真子集(proper subset),记为,即

  定义?5-4  不含任何元素的集合称为空集(empty set),记为?。空集可以符号化表示如下。

  需要说明的是,空集是客观存在的。例如,集合就是空集,因为在实数范围内x2+1=0是不成立的。
  定理5-1  空集是一切集合的子集。
  分析:证明空集是任意集合的子集,只能从子集的定义出发。对空集中的任意元素而言,判断它在给定的任意集合中。由于空集中不含任何元素,因此这里需要利用命题逻辑中蕴涵联结词的相关性质,如果前提不成立,蕴涵式一定为真。
  证明:
  由于空集中不含有任何元素,因此x??为假,进而对任意集合A而言,必有x?? x?A为真,即对任意元素x,x??x?A为永真式。因此,?成立。
  □
  推论5-1  空集是唯一的。
  分析:对于唯一性的判断,通常采用反证法进行。利用反证法的思路是,假设存在两个空集?1、?2,通过证明?1=?2来证明空集的唯一性。证明两个集合相等可以根据定义5-3,通过证明二者互为子集来证明,而二者互为子集可以利用定义5-2来证明。
  证明:略。
  定义5-5  在讨论的范围内,一切元素构成的集合称为全集,用U表示。
  集合论中的全集与谓词逻辑中的全总个体域不一样,全总个体域是绝对的,包含了宇宙间的一切个体,而集合论中的全集是相对的,是相对唯一的。
  定义?5-6  集合A中元素的个数称为集合的基数或势(cardinality),记为|A|。如果一个集合的基数是有限的,称该集合为有限集合,反之称其为无限集合。
  常见的集合,例如,自然数集合N、整数集合Z、有理数集合Q、实数集合R等都是无限集合。在这些集合中,自然数集合称为可数集合(enumerable set),因为它的记法与常用的记法一致,其元素可以一个一个地数出来。
  定义5-7  设有A、B两个集合,如果存在一一映射:,则称集合A和B是等势的。凡与自然数集合N等势的集合,称为可数集合(countable set)或可列集。可列集的基数记为,读作“阿列夫零”。
  例5-5  证明以下集合是可数集合。
  (1)。
  (2)整数集合Z。
  (3)素数集合。
  (4)有理数集合Q。
  分析:要证明上述集合是可数集合,只需在上述集合与自然数集合之间建立一一映射         即可。
  证明:
  (1)集合是正奇数集合,可以在该集合与自然数之间建立如下的一一映射:

可见,集合是可数集合。
  (2)在整数集合Z与自然数集合N之间可以建立如下的一一映射:

可见,整数集合Z也是可数集合。
  (3)在素数集合与自然数集合之间可以建立如下的一一映射:

可见,素数集合也是可数集合。
  (4)有理数中的任何数字可以表示为分数的形式(是整数且)。因此可以将有理数中的元素以的形式排列成一个有序图形,然后从开始,沿着一条穿过整个图形的路径把所经过的有理数与自然数配对:


可见,有理数集合也是可数集合。
  □
5.3  集合的运算
  定义5-8  设A、B为两个集合,则
  (1)由A和B的全体元素构成的集合称为A和B的并集(union),记为,即

  (2)?由A和B的公共元素构成的集合称为A和B的交集(intersection),记为,即

  (3)由属于集合A但不属于集合B的元素构成的集合称为A和B的差集(difference),记为,即

  (4)由属于集合A但不属于集合B,或者属于集合B而不属于集合A的元素构成的集合,称为集合A和B的对称差(symmetric difference),记为,即

  (5)设U为全集,对任意,称为集合A的补集(complement),记为          ,即

  例5-6  设U = {1,2,3,4,5,6,7,8,9,10},集合A = {1,2,3,4,5},集合B = {2,4,6,8,10},则有
                         
                         
                         
                         
                         
                         
  □
  例5-7  满足的集合的个数有多少?
  解:通过并集运算的分析,得知集合中必须包含3,而对于元素1和2可以包含,也可以不包含。因此,集合可以是以下4种情况:。即满足上述运算的集合的个数为4个。
  □
  例5-8  已知,,,计算的值。
  解:根据差集运算的定义,有

  因此有。
  □
  上述集合之间的运算可以用韦恩④图(Venn diagram)直观地表示,韦恩图是用封闭曲线表示集合及其关系的图形,其构造方式如下:用一个矩形内部的点代表全集U,用矩形内部的圆或者其他封闭曲线的内部表示U的子集,用阴影区域表示集合之间运算结果构造的新的集合。
  设集合A、B是全集U的子集,图5-1给出了集合的交集、并集、差集、对称差以及补集的韦恩图。

图5-1  集合运算的韦恩图表示
  定义5-9  设A是一个集合,由A的所有子集组成的集合称为A的幂集(power set),记为或,即

  例5-9  设A={1,2,3},求该集合的幂集。


  解:
  按A的全部子集从小到大进行分类。
  含有0个元素的子集,即空集,只有个:?。
  含有1个元素的子集,有个:{1}、{2}、{3}。
  含有2个元素的子集,有个:{1,2}、{1,3}、{2,3}。
  含有3个元素的子集,有个:{1,2,3}。
  所以,集合A={1,2,3}的全部子集总数为

  集合A的幂集为

  □
  定理5-2  设集合A中有n个元素,则中有个元素。
  证明:

  □
  由于中元素的个数即为集合的子集个数,即集合有个不同的子集,读者可以进一步考虑,集合有多少个真子集?有多少个非空子集?又有多少个非空真子集呢?
  进一步考虑,如何通过编程求出一个集合的幂集呢?这是程序设计中非常经典的一个问题——遍历解空间。可以发现,含有3个元素的集合幂集中有8个集合,含有4个元素的集合幂集中有16个集合,恰好对应深度为3和4的完全二叉树的叶结点数目。将该问题与数的进制转换思想结合起来,可以得到集合的幂集,即含有3个元素的集合幂集中有8个元素,可以将元素是否在相应的子集中用1和0表示,则幂集中的8个元素可以用长度为3的二进制串来表示,分别表示为000,001,…,111,对应0~7的二进制;而含有4个元素的集合幂集中有16个元素,可以用长度为4的二进制串来表示,分别表示为0000,0001,…,1111,对应0~15的二进制。程序5-1如下所示。
程序5-1  计算集合的幂集
   #include<stdio.h>
   #include<math.h>
   #define N 3
   int main()
   {
       int a[N]={1,2,3};
       int number,temp;
       int i;
   
       for(number=0;number<(int)pow(2.0,N);number++)
       {
           temp=number;
           for(i=0;i<N;i++)
           {
               if(temp%2)
                   printf("%d",a[i]);
               temp=temp/2;
           }
           printf("\n");
       }
       return 0;
   }
  
  程序运行结果如图5-2所示。

图5-2  程序运行结果
  根据集合的运算,可以得到如下有关运算的许多性质。
  定理5-3  设全集为U,A、B为U的子集,则有如下恒等式成立。
  (1)交换律:,。
  (2)结合律:,。
  (3)分配律:,。
  (4)吸收律:,。
  (5)幂等律:,。
  (6)德摩根律:,。
  (7)矛盾律:。
  (8)排中律:。
  (9)零律:,。
  (10)同一律:,。
  (11)双重否定律:。
  对上述恒等式的证明,可以采用韦恩图来说明,也可以采用两个集合相等的定义进行严格证明。以为例说明上述恒等式的证明过程。
  证明:
  为了证明,考虑到恒等式两边都是集合,因此根据两个集合相等的定义,需要证明二者互为子集,即和,下面分别证明。
  (1)??对任意的,有,因此有和都成立,即,。因而有。因此,成立。
  (2)对任意的,有和都成立,即,。因而有    ,即。因此,。
  □
5.4  序偶与笛卡儿积
  定义5-10  设有两个元素x、y,二者按照一定的顺序组成的二元组称为序偶(ordered pair),记为< x, y >,其中x称为序偶的第一元素,y称为序偶的第二元素。
  例?5-10  平面直角坐标系中点的坐标就是序偶,如(1,2)、(?1,3)等;<操作码,地址码>这条单地址指令也是序偶。
  在序偶中,元素是有顺序的,即两个序偶< x, y >和< u, v >相等,当且仅当它们的第一元素和第二元素都相等。
  例5-11  设序偶,根据序偶相等的条件,可知
  ,
解得。
  考虑序偶反映的是两个元素按照一定的顺序构成的二元组,可以在此基础上进行推广,得到n元有序组的概念。
  定义?5-11  设有n个元素,它们按照一定的顺序组成的n元组称为n元有序组,记为<>。
  同样,两个n元有序组<>和<>相等,当且仅当ai=bi,其中。
  定义5-12  设A、B为两任意集合,以集合A中的元素为第一元素,集合B中的元素为第二元素组成序偶,所有这样的序偶构成的集合,称为A与B的笛卡儿⑤积(Cartesian product)或叉积,记为,符号化表示为

  例5-12 (1)设集合,集合,则有

  (2)设R为实数集合,则是平面直角坐标系上所有点构成的集合。
  可以证明,。当时,可以表示为。
  定理5-4 (1)笛卡儿积不满足交换律,即,如果,则。
  (2)笛卡儿积对集合的交运算和并运算满足分配律,即




  该定理中的(1)是显然的,以(2)中的前两个公式为例对分配律进行证明。
  分析:要证明笛卡儿积对集合的交运算和并运算满足分配律,关键在于要清楚笛卡儿积的本质是集合,不同的是集合中的元素是序偶。而要证明两个集合相等,只需证明二者互为子集即可。
  证明:
  (1)证明。
  对中的任意序偶< a, b >,根据笛卡儿积的定义,有,。根据集合并集的定义,知或。进一步可得或。即,因此。
  对中的任意序偶,根据集合并集的定义,有或,即或。所以,。因此有。所以有。
  根据上述两点,可以得到。
  (2)证明。
  对中的任意序偶,根据笛卡儿积的定义,可得。根据集合交集的定义,有,。因而有,。所以。因此,。
  对中的任意序偶,根据交集的定义,可得,。因此有,,成立,即,。所以。因此,。
  □
  与序偶到n元有序组的扩展类似,可以将笛卡儿积的定义从两个集合推广到n个集合。
  定义?5-13  设为任意n个集合,它们的笛卡儿积为由这些集合中的元素构成的所有n元有序组构成的集合,表示为,形式化表示如下:

5.5  容斥原理
  定义5-14  容斥,指在计算某类物的数目时,要排斥那些不应包含在这个数目中的数目,但同时要包容那些被错误排斥了的数目作为补偿。这种原理称为容斥原理(the principle of inclusion-exclusion),又称包含排斥原理(include exclusion principle)。
  定理5-5  设A、B为任意有限集合,则有