学过集合论的朋友应该会知道,按照定义,判断两个集合的“势”相同的最直接的方法就是给出这两个集合之间的一个双射。然而,这样的双射往往不容易想到,比如

请给出一个[0,+)(0,+)的双射

但是,直观地看,这两个集合的势一定是相当的,而且这两个集合之间的双射有无穷多个。然而,大多数的我们却很难想出一个双射来。当我们看到构造出来的双射时,第一反应往往是:这样的证明是怎么想到的!?比如,上述问题的答案之一是:

h(x)={x2+1,x=0,1,2,5,26,677,x,x[0,+)x0,1,5,26,

其中序列0,1,2,5,26,677,的后一项是前一项的平方加1。这样构造出来的双射无疑会让我们惊叹!

直观分析

怎么样才能构造出这样的双射来呢?想法是很美妙的。首先,假设集合AB的势相当,虽然AB的双射不容易给出,但是AB的一个单射f通常是很容易给出的,也就是给出AB的一个子集的双射;同样地,我们也可以给出BA的一个单射g。一个很“经济”的想法是:能否用fg1“拼凑”出AB的一个双射来?

答案是肯定的,这就是被我们称之为“Cantor-Bernstein定理”的内容!下面我们来简单描述一下其中的思想。

Step One:先考虑BA的双射gg的值域是g(B),也就是说,g1的定义域最多是g(B),这样一来,AB的双射中,Ag(B)的那部分,只能由f来定义,记C0=Ag(B)

Step Two:如果C0=,那么双射就可以只由g1定义了。如果C0,那么C0部分就得由f定义。但是,这不意味着剩下部分就由g1定义了。因为剩下部分(也就是g(B))通过g1可以映射到整个B,而且f又将C0映射到部分的B,这样一来构造出来的就不是双射了。

Step Three:为了消除Step Two的困难,唯一的办法就是将f的定义域扩大一点,将g1的定义域缩小一点。因为既然C0部分已经必须由f定义了,那么要更改的只能是增大f的定义域。C0B中的像(值域)就是f(C0),我们不能让g1的像跟它有交集(g1的像就是g的定义域,g1的定义域就是g的像),那么就是说从g1的定义域(即g的像g(B))中扣除g(f(C0))=C1这部分即可,扣除了之后,g1(x)不再可能属于f(C0)

Step Four:但是,现在扣除了C0的影响了,却多出了C1出来,我们必须用同样的技巧扣除C1的影响,但这必然会产生C2=g(f(C1))的影响......直至无穷。扣除了这无穷的影响后,得到的就是合理的双射了。

用数学的语言表述如下:
h(x)={f(x),xCg1(x),xAC
其中C=n=0Cn,Cn+1=g(f(Cn))
可以证明,这就是AB的一个双射。具体证明这里就不写出来了,读者可以参考维基百科的“康托尔-伯恩斯坦-施罗德定理”条目。

例子演示

现在我们来看如何给出[0,+)(0,+)的一个双射。记
{f(x)=x2+1,x[0,+)g(x)=x,x(0,+)
f,g分别是[0,+)(0,+)(0,+)[0,+)的单射,g1(x)=x。可以算得:
C0=[0,+)(0,+)={0}C1=g(f(C0))={1}C2=g(g(C1))={2}
所以
C=n=0Cn={0,1,2,5,26,677,}
于是可以得到双射
h(x)={x2+1,x=0,1,2,5,26,677,x,x[0,+)x0,1,5,26,

转载到请包括本文地址:https://spaces.ac.cn/archives/2951

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

如果您需要引用本文,请参考:

苏剑林. (Sep. 19, 2014). 《Cantor-Bernstein 定理(给出双射!) 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/2951

@online{kexuefm-2951,
        title={Cantor-Bernstein 定理(给出双射!)},
        author={苏剑林},
        year={2014},
        month={Sep},
        url={\url{https://spaces.ac.cn/archives/2951}},
}