数学基础
映射与基数
映射 称为单射,是指它绝不会把两个不同元素送到同一处;称为满射,是指 的每个元素都被取到;两者都成立则称双射。双射使我们能够比较无限集合的大小:,因为这三者都与 存在显式双射。康托尔定理 ,通过使用 的对角线论证证明,说明幂集总是严格更大,因此存在无穷无尽的无穷层级;康托尔-伯恩斯坦-施罗德定理说明 và ,使得只需两个容易构造的单向单射,而非一个困难的双射,就能比较基数。这些思想是哈希碰撞、数据压缩的极限以及某些问题不可计算性的基础。
直观把两堆物品配对,看哪一堆更大
映射 给 的每个元素恰好指定 中的一个元素。可把它想象成从 到 的箭头:单射指没有两支箭头落在 的同一点上,满射指 的每一点都被某支箭头击中,双射指两者同时成立——完美的一一对应。当 、 都是无限集合时,存在双射正是说它们大小相同、具有相同基数的方式,即便逐个计数不可能。
大学单射、满射、双射:形式化定义
定义: 单射、满射、双射
映射 称为单射,是指 中不同元素总映到 中不同元素。称为满射,是指 中每个元素都是 中某元素的像。两者都成立则称双射,此时存在良定义的逆映射 。
这是单射性的形式化判据:只要两个输入给出相同输出,它们本来就必须是同一个输入。满射性则从另一个方向判定,要求每个目标都是可以到达的。
| 性质 | 例子 | 单射? | 满射? |
|---|---|---|---|
| 双射 | 是 | 是 | |
| 仅单射 | 是 | 否 | |
| 仅满射 | 否 | 是 | |
| 两者都不是 | 否 | 否 |
大学两条关键定理及完整证明
对任意集合 ,:不存在从 到其幂集 的满射,因此幂集严格更大。
为什么成立?
这说明不存在"最大的无穷"——无论集合多大,只要取其幂集就总能得到一个严格更大的集合。正是这条定理使得无穷的层级不可避免地无限延伸,其对角线论证的证明技巧,正是用来证明某些问题不可计算的论证方法的直接源头。
证明
为导出矛盾,假设存在满射 ;下面推出矛盾,从而说明这样的满射不可能存在。
定义"对角线"集合 :它收集了 中所有不属于自身在 下的像的元素。由于 是 的子集,它是 的一个元素。
由于假设 是满射,必存在 使得 。现在提出关键问题: 吗?
若 ,则由 的定义,;但 ,这就说明 ——矛盾。若 ,则由 的定义(恰好排除满足 的元素),这迫使 ——同样矛盾。
无论哪种情况都得到矛盾,故满射 不可能存在。结合从 到 的单射 ,即得 。
若 và ,即存在单射 与单射 ,则 与 之间存在双射。
为什么成立?
仅通过单射来比较基数(每个集合都能嵌入另一个之中),就已经像有限集合那样迫使两个集合大小完全相同。这使得我们可以通过构造两个容易的单向嵌入,而不是一个困难的直接双射,来证明 ——下面的例子正是用这种方法说明区间 与 具有相同的基数。
证明
设 与 为给定的两个单射。基本思路是对每个元素追踪其"祖先链"——通过交替撤销 与 得到,再依据每条链"从哪里开始",分块构造最终的双射。
对 ,定义其反向链 ,只要所需的逆映射有定义就继续,对 同理定义。每个元素的链要么无限地往回延伸,要么停在 中某个没有 -原像的元素处,要么停在 中某个没有 -原像的元素处。这把 划分成三部分:(链停在 )、(链停在 )、(链永不停止),同样把 划分成 。
在停于 或永不停止的链上, 本身就已给出该部分 到 对应部分的双射(因为这些元素是通过单射到达的,且 一侧不会先"用完")。在停于 的链上,是 给出了该部分 回到对应部分 的双射,因此其逆 给出了该部分 到该部分 的双射。
定义 :当 时 ,当 时 。由于三部分两两不相交,且各自双射到 中对应部分( 映到 , 映到 ),合并后的映射 就是从整个 到整个 的双射,证明了 。
大学实际应用与典型例题
基数不仅仅是抽象的记账工具。哈希函数把一个巨大的定义域(所有可能的文件、所有可能的密码)映射到一个小得多的值域(一个32位或64位整数);由于定义域严格大于值域,康托尔式的鸽笼原理保证无论哈希函数多么精巧,碰撞都必然存在。无损数据压缩恰恰是从较长比特串到较短比特串的单射;由于短字符串严格少于长字符串,没有任何压缩器能缩小每一个可能的输入——某些输入必然变大或保持不变。不可计算性结果(例如停机问题的不可判定性)使用了与康托尔定理相同的对角线论证:存在不可数多个可能的函数 ,但计算机程序只有可数多个,因此几乎每个函数都无法被任何程序计算。
例题: 与 之间的具体双射
设 ,当 时 ,当 时 。证明 是双射,并由此得出 。求 。
解答
该 把非负整数送到自然数中的偶数,把负整数送到自然数中的奇数,向外锯齿状排列:、、、、
单射性:偶数输出只来自 (此时 唯一确定 ),奇数输出只来自 (此时 唯一确定 ),且每种情形下 都严格单调,故不会有两个不同整数共享同一输出。
满射性:每个偶自然数 ()都是 ,每个奇自然数 ()都是 ,故每个自然数都能取到。
由于 是双射 , 与 具有相同基数 ,即便 看起来大一倍,仍确认 。
最后求 :因为 ,使用 ,所以 。
例题: 哈希碰撞的鸽笼原理
某哈希函数把任意文件映射为一个 位编码,因此恰好有 种可能编码。某公司存储了 十亿个不同文件()。请用基数/鸽笼原理解释为什么必定至少有两个文件共享同一哈希码,并估算最少不可避免的"碰撞对"数量。
解答
该哈希函数的值域恰好有 个元素——记这个集合为 。被哈希的文件构成的定义域 有 个元素,由于 ,故 。
由(有限版)鸽笼原理——即"不存在从较大有限集合到较小集合的单射"的有限版本——把哈希函数看作映射 ,它不可能是单射:若是单射则给出 ,与 矛盾。因此至少有两个不同的文件必须被赋予相同的哈希码。
估算最少不可避免的碰撞数:把 个文件尽可能均匀地分配到 个桶中,至少会有 个文件落入某个桶,被迫重复的"多余"文件数至少为 。
所以至少约有 百万个文件被迫落入已被其他文件占用的桶中——这是 直接且不可避免的后果,无论哈希函数设计得多么精巧都无法避免。
要使 中不同元素总映到 中不同元素, 需要具有什么性质?
若 ,由康托尔定理 是多少?
一个16位哈希函数有 种可能输出。若系统对 个不同文件进行哈希,鸽笼/基数论证保证了什么?
康托尔-伯恩斯坦-施罗德定理的前提条件要求什么?
参考文献
- Paul R. Halmos (1960). Naive Set Theory
- Karel Hrbacek, Thomas Jech (1999). Introduction to Set Theory