1.3 集合运算与笛卡尔积
在第 1.2 节中,你学会了如何描述一个集合,以及如何判断一个对象是否属于这个集合。现在,我们要把两个集合组合起来。组合有两种常用方式:
- 用来把第一个集合中的一个选择与第二个集合中的一个选择配成一对。
学完本节后,你将能从零开始计算并集、交集、差集、补集与笛卡尔积,并且能解释每个结果的含义,而不只是机械地移动符号。
(universal set)记作 U,表示当前问题中允许讨论的所有对象。它不是“世界上所有东西的集合”,而是由问题的范围决定的。
例如,如果我们只研究从 1 到 6 的整数,就可以规定
U={1,2,3,4,5,6}. 这个问题中的其他集合都看作 U 的子集。令
A={1,2,4,6},B={2,3,6}. 本节前半部分会一直使用这个例子。先固定全集,可以避免一个重要的歧义:“不在 A 中”到底要保留哪些对象,只有先知道允许从哪些对象中选择,才能确定。
想象从 U 中任取一个元素 x,然后依次问两个“是或否”的问题:
1. x 是否属于 A?
2. x 是否属于 B?
成员资格一共只有四种可能区域:
| x∈A 吗? | x∈B 吗? | x 所在的区域 |
|---|
| 是 | 否 | 只在 A 中 |
| 是 | 是 | 同时在 A 与 B 中 |
| 否 | 是 | 只在 B 中 |
| 否 | 否 | 两个集合都不在 |
下面的每一种集合运算,都是从这四个区域中选择一个或多个区域。
并集:保留至少出现在一个集合中的元素
A 与 B 的记作 A∪B。只要一个元素属于 A、属于 B,或者同时属于二者,它就属于并集:
A∪B={x∈U∣x∈A 或 x∈B}. 竖线 ∣ 表示“满足”。整个式子可以读作:“所有满足‘属于 A 或属于 B’的 U 中元素 x 所组成的集合。”这里数学中的“或”是兼或,因此同时属于两个集合的元素也要保留。
在当前例子中,先写出 A 的元素,再补上 B 中尚未出现的元素:
A∪B={1,2,4,6}∪{2,3,6}={1,2,3,4,6}. 集合不记录重复次数,所以重复的元素只写一次。
交集:只保留共同元素
记作 A∩B。一个元素必须同时属于两个集合,才能进入交集:
A∩B={x∈U∣x∈A 且 x∈B}. 逐个检查可知,只有 2 和 6 同时通过两个成员资格条件,所以
A∩B={2,6}. 差集:保留一边,并去掉重叠部分
A∖B 先从 A 开始,再删除其中所有也属于 B 的元素:
A∖B={x∈U∣x∈A 且 x∈/B}. 符号 ∈/ 表示“不属于”。在例子中,从 A 删除 2 和 6,剩下
A∖B={1,4}. 差集有方向。如果交换两个集合,就要从 B 开始:
B∖A={3}. 因此,A∖B 与 B∖A 通常不同。
补集:保留全集中不属于该集合的元素
A 的记作 Ac,它包含固定全集中所有不属于 A 的元素:
Ac=U∖A. 从 U={1,2,3,4,5,6} 中删除 1,2,4,6,得到
Ac={3,5}. 这就是为什么必须先明确全集。即使 A 不变,只要全集改变,A 的补集也可能改变。
对于同一个 U、A 与 B,四个互不重叠的区域分别是
A∖BA∩BB∖AU∖(A∪B)={1,4},={2,6},={3},={5}. “互不重叠”表示没有元素会同时出现在两个区域中;这四个区域合在一起又包含了 U 中的每个元素。因此,它们也可以用来检查答案:U 中每个元素都必须恰好出现一次。
实验把四种成员资格区域变成可投放区域。投放对象前,可以先说出它的两个判断结果,例如“在 A 中,但不在 B 中”,再选择对应区域。这样可以把图形位置与成员资格规则联系起来。
如果直接计算 ∣A∣+∣B∣,那么 A∩B 中的每个元素会在计算 A 时数一次,在计算 B 时再数一次。减去交集的大小,就能去掉多算的那一次:
∣A∪B∣=∣A∣+∣B∣−∣A∩B∣. 在当前例子中,
∣A∪B∣=4+3−2=5, 这与列出的五个元素 {1,2,3,4,6} 一致。这种思路称为两个集合的(inclusion–exclusion)。后续章节会把同一种计数思想扩展到更多集合。
下面两个等式称为(De Morgan’s laws):
(A∪B)c=Ac∩Bc,(A∩B)c=Ac∪Bc. 符号虽然紧凑,但可以直接翻译成日常语言:
- 一个元素,只有当它不在 A 中,也不在 B 中。
- 一个元素,只要它不在 A 中,或者不在 B 中,或者两个集合都不在。
检查第一条定律时,可以跟踪任意一个元素 x。若 x∈/A∪B,说明两个集合都没有接纳它。于是 x∈Ac 且 x∈Bc,所以 x∈Ac∩Bc。这个推理也可以反向进行,因此等式两边包含完全相同的元素。
“且”“或”“非”会在第 2 章成为正式的逻辑运算。本节只需要使用它们在成员资格判断中的普通含义。
集合运算组合的是成员资格条件。接下来要学习的构造组合的是选择。假设一个应用中有两个用户:
P={Ada,Bo}, 并且有三种操作:
Q={读取,编辑,分享}. 要表示“Ada 执行编辑”,需要同时保存一个用户和一种操作。可以完成这件事:
(Ada,编辑). 第一个位置与第二个位置承担不同角色。一般来说,
(a,b)=(b,a). 只有当第一个坐标相同且第二个坐标也相同时,两个有序对才相等:
(a,b)=(c,d)当且仅当a=c 且 b=d. “第一坐标”和“第二坐标”只是两个位置的名称,这里不要求任何几何知识。
A×B 包含所有第一坐标来自 A、第二坐标来自 B 的有序对:
A×B={(a,b)∣a∈A 且 b∈B}. 可以用下面的固定步骤完整列出它:
1. 选择 A 的第一个元素。
2. 把它依次与 B 的每个元素配对。
3. 移到 A 的下一个元素并重复。
若 A={1,2} 且 B={x,y,z},就得到
A×B={(1,x),(1,y),(1,z),(2,x),(2,y),(2,z)}. 也可以把同样的六个有序对排成一个长方形表格:
[(1,x)(2,x)(1,y)(2,y)(1,z)(2,z)]. 这里的方括号只是把有序对整理成行和列,不需要使用矩阵运算。
如果 A 有 2 个选择,B 有 3 个选择,那么每个第一坐标都有 3 个可能搭档,所以共有 2⋅3=6 个有序对。对任意有限集合,都有
∣A×B∣=∣A∣∣B∣. 在像素地板中,每个格子都代表一个有序对。它所在的行固定一个坐标,所在的列固定另一个坐标。涂满所有格子就是构造完整的笛卡尔积;只涂选中的格子,则会得到一个由部分有序对组成的集合。
这样的选中集合 R⊆A×B 称为从 A 到 B 的。现在只需把“关系”理解为“被选中的一些有序对”。第 4 章会从头建立完整理论,本节不预先要求其他关系知识。
如果任何一边没有可选元素,就无法完成一个有序对。因此
A×∅=∅ 且
∅×B=∅。这也符合计数公式,因为任何数乘以
0 都等于
0。
这一章中,你依次学会了识别离散状态、用集合描述对象、对成员资格进行运算,以及构造有序对。你可能已经注意到,“且”“或”“非”在这些定义中反复出现。第 2 章会从这些熟悉的词出发,一步一步把它们变成精确的逻辑命题。