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

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

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

闭包把集合可能“贴近但漏掉”的位置补上。
边界与闭包的关系
边界记作 ∂A。它由那些任何邻域都同时碰到 A 与补集的点组成。一个常用公式是
∂A=A∖int(A)
也可以写成
∂A=A∩R∖A
第一个公式适合计算,第二个公式适合理解:边界点同时贴着集合和它的外部。
例子:半开区间
令
A=(0,1]
它的内部是
int(A)=(0,1)
它的闭包是
A=[0,1]
它的边界是
∂A={0,1}
A 不是开集,因为点 1∈A 不是内点。A 也不是闭集,因为 0 是它的聚点,但 0∈/A。
区间的开闭结构
区间是实直线上最稳定、最常见的集合。它们把端点是否包含这件事表现得非常清楚。

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

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

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