前面学习数列和级数时,我们已经反复使用“靠近”“附近”“最终落入某个范围”这些说法。到了函数极限与连续性之前,需要把这些直觉整理成集合语言:一个点是不是在集合内部,集合是否包含自己的边界,哪些点会被集合中的点不断逼近。
本章只在实直线 上工作。目标很具体:会判断常见集合的开闭性,会找内点、边界点、聚点、孤立点,会求闭包和边界,并理解为什么闭有界区间在实分析中格外稳定。

邻域语言把“足够靠近”变成数轴上的开区间。
在实直线上,点 的一个 邻域就是开区间
其中 。这个区间也常叫以 为中心、半径为 的开球,记作 。
它的意思很朴素:只看离 距离小于 的点。用绝对值写就是
实分析中许多定义都在问同一件事:无论把这个观察窗口缩得多小,集合或函数在窗口里会呈现什么行为。
设 。如果存在某个 ,使得
就称 是 的内点。换句话说,站在 处能找到一个小窗口,窗口内的所有点都仍在 里。
例如 时, 是内点。取 ,则
但 不是 的内点,因为任何以 为中心的邻域都会包含负数,也会包含 本身,而它们不在 中。
如果每个以 为中心的邻域都同时碰到 和 的补集 ,就称 是 的边界点。边界点是“怎么放大都能看见两边”的点。
对 ,点 和 都是边界点。点 不是边界点,因为可以取很小的邻域完全落在 内;点 也不是边界点,因为可以取很小的邻域完全落在补集内。
内点看的是“附近是否全在集合里”。边界点看的是“附近是否总能同时看见集合内外”。这两个判断都要围绕任意小的邻域展开。
聚点关注的不是点本身是否属于集合,而是集合中是否有别的点不断靠近它。设 。如果对每个 ,邻域
中都存在某个 中的点 ,并且 ,就称 是 的聚点。
这里的 很关键。它排除了“只靠自己撑场面”的情况。

同一个点可以有多个身份,例如闭区间端点既是边界点,也是聚点。
如果 ,并且存在某个 ,使得
就称 是 的孤立点。它属于集合,但附近没有其他集合点。
例如
中, 是孤立点。取 ,则 与 的交集只有 。
对 , 是聚点,虽然 。因为任意小的 都会包含一些正数,例如 ,而这些正数属于 。
对
点 是聚点,但 。每个 是 中的孤立点,因为可以在它附近找到一个小间隔,不碰到其他 。这个例子特别适合提醒我们:孤立点和聚点不是简单的反义词;它们回答的是不同问题。
判断聚点时,不要只问“这个点在不在集合里”。要问的是:任意小邻域中是否总有另一个集合点。端点、缺失点、极限点常常就在这个细节上显出差别。
集合 的所有内点组成它的内部,记作 。如果 的每个点都是内点,就称 是开集。
等价地说, 开意味着:对每个 ,都能找到一个小邻域完全留在 中。
闭集的直观说法是:集合没有漏掉自己的极限位置。严格说,在实直线上,若 包含它所有的聚点,就称 是闭集。
集合 的闭包记作 ,可以理解为把 和它所有“不可避免的靠近点”一起收进来。常用描述是
其中 表示 的所有聚点。
还有一个很好用的邻域判别:
当且仅当每个 都与 相交。
注意这里没有要求交到的点必须不同于 。所以孤立点也属于闭包,因为它本来就在 中。

闭包把集合可能“贴近但漏掉”的位置补上。
边界记作 。它由那些任何邻域都同时碰到 与补集的点组成。一个常用公式是
也可以写成
第一个公式适合计算,第二个公式适合理解:边界点同时贴着集合和它的外部。
令
它的内部是
它的闭包是
它的边界是
不是开集,因为点 不是内点。 也不是闭集,因为 是它的聚点,但 。
区间是实直线上最稳定、最常见的集合。它们把端点是否包含这件事表现得非常清楚。

空心端点表示端点不属于集合,实心端点表示端点属于集合。
开区间 是开集。对其中任意 ,只要取
就有 。
闭区间 是闭集。它包含自己的两个端点,而端点正是最容易被漏掉的聚点。它不是开集,因为 和 都不是内点。
半开区间 和 通常既不是开集,也不是闭集。它们各自包含一个端点、漏掉另一个端点,因此一边不满足开集条件,另一边不满足闭集条件。
在 自身的拓扑中, 是开集,也是闭集。空集 也是开集,也是闭集。
这听起来有点反直觉,但按定义很自然。 中每个点的小邻域仍在 里,所以它开;它的补集是空集,也可以看作开,因此 闭。空集的开性来自“对每个空集中的点”的条件没有反例。
“开”和“闭”不是日常语言里的相反词。一个集合可以既开又闭,也可以既不开又不闭。判断时要回到邻域、聚点或补集定义。
紧性是实分析后面反复出现的稳定性条件。完整定义使用开覆盖:若一族开集的并集覆盖了 ,并且总能从中挑出有限多个仍覆盖 ,就称 紧。
这句话第一次读会比较抽象。可以把它理解为:无论别人用多少个开窗口盖住 ,都不会真的需要无限多层细节;总能选出有限个窗口完成覆盖。

紧性把“已经被开集覆盖”转化为“有限个开集就够了”。
闭区间 同时有两个好性质。第一,它有界,不会向无穷远逃走。第二,它闭,包含自己的端点和所有聚点,不会在边界处漏点。
这两个性质合在一起,会带来许多熟悉定理的可靠版本。例如连续函数在 上一定能取得最大值和最小值。若把区间改成 ,最大值或最小值就可能只在端点附近逼近,却永远取不到。
一个简单例子是 。在 上,它没有最大值;任意 都还能再往右找一个更大的点。但在 上,最大值就是 。
在实直线中,Heine-Borel 定理给出一个非常可用的判别:
这条定理的意义不只是换了一个说法。开覆盖定义很强,但直接检查困难;闭且有界则容易看见。Heine-Borel 定理告诉我们,在 中,这两个判断完全一致。

Heine-Borel 定理把抽象的有限子覆盖性质,变成实直线上可检查的闭且有界。
在本课程的许多定理中,看到闭有界区间 时,要立刻想到两件事:它不会漏掉边界点,也不会逃向无穷远。Heine-Borel 定理把这份直观精确化为紧性。
判断一个集合的开闭性、闭包和边界时,不要只凭图像说“看起来有端点”。可以按下面的顺序做。
先找内部。对集合中的一般点,问能否找到一个完全落在集合里的小邻域。所有能做到的点组成 。
再找聚点。特别注意端点、被挖掉的点、数列型集合的极限位置,以及无穷远附近是否会产生新的实数聚点。
用 加上所有聚点得到闭包 。若 ,则 是闭集;若 ,则 是开集。
设
求内部、闭包、边界,并判断开闭性。
区间 中的每个点都是内点;孤立点 不是内点,因为任意以 为中心的小邻域都会包含不属于 的点。因此 。
练习 1:求 的内部、闭包和边界,并判断它是否开、是否闭。
内部是 ,闭包是 ,边界是 。它不是开集,因为 不是内点;它也不是闭集,因为 是聚点但 。
练习 2:设
求 的聚点、闭包和边界。
唯一聚点是 。每个 都是孤立点。闭包是 。由于 没有内点,边界为 。
练习 3:判断 在 中是开集、闭集,还是二者都不是。这里 表示有理数集合。
既不是开集,也不是闭集。它没有内点,因为任意实数邻域中都有无理数,所以没有一个有理点的小邻域能完全留在 中。它的闭包是 ,因为任意实数附近都有有理数;因此它没有包含自己的所有聚点,不是闭集。
练习 4:解释为什么 有界但不紧, 紧。
在实直线中,Heine-Borel 定理说明紧集等价于闭且有界。 虽然有界,但不是闭集,因为它漏掉聚点 和 ,所以不紧。 既闭又有界,所以紧。
练习 5:给出一个既不开也不闭的集合,并说明理由。
一个例子是 。它不是开集,因为 属于集合但不是内点;它不是闭集,因为 是聚点但不属于集合。它的内部是 ,闭包是 。
这一章的关键词可以压缩成一句话:邻域负责把“附近”说清楚,闭包负责把“极限位置”补齐,紧性负责把“无限覆盖”压回有限选择。后面学习函数极限、连续性和极值定理时,这些词会一直在幕后工作。
| 闭但不开 |
| 既不开也不闭 |
| 既开又闭 |
| 既不开也不闭 |
最后用 求边界,并回头检查边界点的邻域是否确实同时碰到集合内外。
区间部分的聚点是 中的所有点。点 是孤立点,不是聚点,但因为 ,它仍属于闭包。
所以闭包为 。
边界为 。其中 是边界点,因为任何小邻域都碰到 ,也碰到 外的点。
不是开集,因为 不是内点; 不是闭集,因为聚点 和 没有都包含在 中。