我们从一个问题开始。证明开区间 (0,1) 和闭区间 [0,1] 等势。
标准证明是这样的。定义从 [0,1] 到 (0,1) 的 函数
可以验证 是一个双射。所以(0,1) 和 [0,1] 等势。
这个证明百分百正确,但不是一个好的证明,因为它使用了一个具体的函数,掩盖了问题的本质。
这个问题的思路其实很简单。和开区间(0,1)相比,闭区间[0,1]就是多出了两个端点0和1。所以,我们只需要在(0,1)上随便找一个不重复的无穷序列来“吸收”这两个点(如下图所示),其余的点原封不动。
这个和标准证明是同一个思路。但是标准证明使用了 explicit 的表达式。读者一眼看上去就是一个复杂的有三个分支的函数。读者首先要把这个函数的图像画出来或者想象出来,然后分析第二个分支的规律。这个证明就相当于把思路 encrypt 了一下。读者看这个证明就像在看一个没有注释的程序,要耗费一番脑力才能搞清楚作者定义这个函数的意图是什么。
有些读者可能会研究这个数列的单调性。这个数列的极限是0,刚好是其中一个端点,有些读者可能会想这当中有没有联系。所有这些不必要的细节都在干扰着读者。即使读者最终能确定
的确是一一对应,他也可能会以为
这个表达式具有某种特殊的性质,对证明起了关键的作用,不一定能看得出“无穷序列吸收两个点”这个本质。
《The Princeton Companion to Mathematics》里面的一个例子更能说明这个问题。证明存在这样一个正整数,它能以10种不同的方式写成4个立方数之和。
这个问题一看上去就是个数论的问题,而且很难,找不到可以下手的地方。立方数这个条件太难用了。但如果你把“写成4个立方数之和”抽象成做一件事,问题就变成证明存在一个正整数能以10种不同的方式做一件事,这又好像是一个组合数学的问题。立方数这个条件可能不是本质的,本质的是立方数的大致大小。这就提示我们,可能可以用简单的 counting 来解决这个问题。
我们来 count 一下。在1到之间一共有1000个立方数。在这1000个立方数之中选取4个,一共有
种方法。把这4个立方数加起来,最大是。我们想象把这些立方和覆盖1到
的数字,平均每个数字被覆盖的次数是
所以至少有一个数字被覆盖至少10次。
这是一个很有意思的例子。它告诉我们,有时候我们主动丢弃一部分干扰信息,反而更能看清楚问题的本质。如果我们以为这是一个数论的问题,我们可能会研究立方数的性质,研究三次不定方程。一旦我们知道了这本质上是一个组合数学的问题,最先想到的就是 counting。
再看一个例子。给定一个集合和一个点
,怎样描述
和
任意接近(即某种连续性。直观地看,
粘在
上面)?

看到“接近”两个字,最直接的想法就是用距离。我们可以这样尝试:对任意给定的,存在
使得
。
这个定义好像解决了问题。但是,我把图形扭曲一下。

我们看到,经过这个操作,距离完全变了,但是连续性没变。和
仍然任意接近(
仍然粘在
上面)。这个例子告诉我们,要描述连续性,距离不是本质的。需要寻找比距离更本质的东西。
在历史上数学家们用了几十年的时间才找到比距离更本质的东西,那就是开集。用开集的语言来描述和
任意接近,就是:任何一个包含
的开集都会碰中
里面的元素。从此,数学家们开始研究只有开集、没有距离(或者说不一定有距离)的数学结构,这就是拓扑空间。
(此文为本人原创,转载或者引用本文内容请注明来源及原作者)