集合是用来描述一批对象的基础语言。在这门课里,集合不是旁支,
而是逻辑、函数、关系,以及后续数系构造共同依赖的语言。
如果你现在觉得符号有些陌生,这是正常的。这一单元的目标就是把这套语言
变得足够精确,好让后面的章节可以直接使用。
集合、属于、相等
定义
集合
集合是一批对象的集合。
如果 x 是集合 A 的元素,我们写 x∈A;如果不是,就写
x∈/A。
例子:
{1, 2, 3} 是集合。
{香港岛、九龙、新界} 是集合。
- ∅ 是空集合,也就是没有任何元素的集合。
同一个集合可以有不同写法,但集合本身只由元素决定。
定理
外延性
两个集合相等,当且仅当它们拥有完全相同的元素。
符号上写成:
A=B⟺∀x(x∈A↔x∈B).
所以证明集合相等的标准方法是先证两个包含关系:
- 证明 A⊂B
- 证明 B⊂A
常见错误
不要把集合相等和描述相等混淆
{1, 2, 3} 和 {3, 2, 1} 是同一个集合,因为元素完全一样。列出的顺序并不重要。
常见错误
子集符号要注意本地约定
本课程用 A⊂B 表示“A 的每个元素都在 B 里”。有些书会用
A⊆B 表示这个意思,而把 A⊂B 留给 strict subset。
读书时要先确认约定。
建立新集合
知道了一些集合之后,我们通常会想造出更多集合。标准运算就是用来做这件事的。
| 运算 | 符号 | 定义 |
| --- | --- | --- |
| 并集 | A∪B | 属于 A 或 B 的元素 |
| 交集 | A∩B | 同时属于 A 和 B 的元素 |
| 差集 | A∖B | 属于 A 但不属于 B 的元素 |
| 补集 | Ac | 在所选全集内,不属于 A 的元素 |
补集一定要先指定全集 E。在这一单元里,我们通常默认所有集合都在某个
固定 E 里面,所以 Ac 就是 E∖A。
例题
追踪元素如何经过几个运算
设
A={1,2,4},B={2,3,4},而全集取为
E={1,2,3,4,5}.那么:
- A∪B={1,2,3,4}
- A∩B={2,4}
- A∖B={1}
- B∖A={3}
- Ac={3,5}
- (A∪B)c={5}
这些等式怎么证
本单元的集合恒等式不是靠死记,而是靠逐个元素追踪来证明。
定理
基本集合代数
对集合 A、B、C:
- A∪∅=A
- A∪B=B∪A
- A∪(B∪C)=(A∪B)∪C
- A∪A=A
- A∩(B∪C)=(A∩B)∪(A∩C)
- A∪(B∩C)=(A∪B)∩(A∪C)
- (A∪B)c=Ac∩Bc
- (A∩B)c=Ac∪Bc
- A⊂B 当且仅当 A∪B=B
- A⊂B 当且仅当 A∩B=A
核心证明法是 element chasing。比如:
x∈A∩(B∪C)⟺x∈A 且 (x∈B 或 x∈C)
等价于
(x∈A 且 x∈B) 或 (x∈A 且 x∈C),
所以又等价于
x∈(A∩B)∪(A∩C).
证明
示范:为什么 A⊂B 会推出 A∪B=B
其他常见构造
这门课后面还会反复用到下面几种集合构造。
笛卡儿积
A×B 是所有有序对 (a, b) 的集合,其中 a∈A 而 b∈B。
顺序是有意义的:(a, b) 和 (b, a) 通常不同。
如果 ∣A∣=5 且 ∣B∣=3,那么 ∣A×B∣=15。
R×R=R2 就是平面。
有限次积
An 表示 A 和自己做 n 次笛卡儿积,也就是所有 n-tuple。
幂集
P(A) 是 A 的所有子集所组成的集合。
如果 A 有 n 个元素,那么 P(A) 有 2n 个元素。另一个很有用的理解方式
是 indicator function:每个子集都可以对应到一个 A→0,1 的函数。
例如
P({a,b})={∅,{a},{b},{a,b}}.
不交并
有时两个集合在原始写法上可能有重叠,但我们又想保留每个元素的来源。
不交并就是通过标签记住每个元素最初属于哪个集合。
直观上,A⊔B 就是“加了标签 1 的 A”和“加了标签 2 的 B”。
怎样仔细证明集合恒等式
到了这里,集合恒等式应该被理解成“属元条件相同”的命题,而不是只靠图形
去记。
标准证明方法通常是:
- 任取一个元素
x;
- 把 x∈ 两边集合翻译成逻辑条件;
- 逐步化简,直到两边变成同一句话。
例题
证明 A∩(B∖C)=(A∩B)∖C
从
x∈A∩(B∖C)出发,就表示:
- x∈A,
- x∈B,
- x∈/C。
而这三个条件合起来,正是
x∈(A∩B)∖C的意思。
由于推理可以反向读回去,所以两边集合相等。
这种逐元素追踪的方法,后面还会再次出现在德摩根律、关系,以及数系构造中。
有限集合怎样计数
集合语言不只用来分类,也直接控制计数。
如果 A、B 都是有限集合,那么:
- ∣A×B∣=∣A∣∣B∣;
- ∣P(A)∣=2∣A∣;
- ∣A∪B∣=∣A∣+∣B∣−∣A∩B∣。
并集公式之所以要减交集,是因为交集中的元素如果直接相加,会被算两次。
例题
计算一个并集和幂集
假设 ∣A∣=6、∣B∣=5、∣A∩B∣=2。
那么
∣A∪B∣=6+5−2=9再设 S={a,b,c}。每个元素都只有两种选择:放进某个子集,或者不放进。
所以总共有
2⋅2⋅2=23=8个子集。因此 ∣P(S)∣=8。
子集证明检查表
子集证明会反复出现,所以最好让它变成固定套路。
如果要证明 A⊆B,就从任取 x∈A 开始,再用 A 的定义推出
足够信息,最后证明同一个 x 其实也在 B 里面。由于 x 是任取,结论
就对 A 的每个元素成立。
这种 direct proof 模式,后面在关系、偏序,以及等价类中都会再次出现。
常见错误
常见错误
补集不等于差集
Ac 是“在全集外面的部分”。A∖B 是“A 里面但不在 B 里面的部分”。
两者有关,但不一样。
常见错误
没有全集就不能写补集
如果你写补集,一定要知道你是在什么 universe 里做运算。否则 c 是含糊的。
常见错误
积集顺序有意义
A×B 和 B×A 一般包含不同的有序对。这就是为什么函数和关系要用积集语言。
小检查
快速检查
如果 A=a,b,c 而 B=b,c,d,A∩B 是什么?
快速检查
为什么在未指定全集之前,Ac 不够清楚?
快速检查
如果 A⊂B,那么 A∪B 和 A∩B 会简化成什么?
为什么这一单元重要
这一单元是后面数系构造的语言基础。
- N2 会用来构造整数。
- 等价类会用来构造有理数。
- 一个集合上的关系会变成偏序和等价关系的语言。
- 幂集和笛卡儿积会在后面讲 family、tuple,以及各种构造时再次出现。
边读边试
比较一对集合
互动探索器让你把元素加入或移出 A 与 B,并即时看见运算结果改变。