紧性与连续函数的全局结论
上一章里,我们把连续性说得很精确:固定一个点 c,别人先提出函数值误差 ε,我们再在 c 附近找一个合适的 δ。这个定义解决的是“一个点附近会不会突然失控”。它并没有承诺同一个 δ 能照顾整个区间。
这一区别起初很容易被忽略。对每个 c∈(0,1),函数 1/x 都连续;可越靠近 0,要想控制函数值,允许的输入范围就得越小。若把每个点得到的半径都堆在一起,它们可能一路缩向 0,根本没有一个正的最小值可拿出来给全区间使用。
本章要回答的正是这个问题:什么时候能把“每一点各有一套局部控制”变成“整个集合共用一套控制”?答案不是连续性本身,而是定义域的紧性。紧性会把一大族局部邻域缩成有限多个;有限以后,最大值、最小值和统一的正半径才有机会出现。

从无限局部信息到有限控制
先把这里用到的语言说清楚。设 K⊂R。一族实直线中的开集 {Uα}α∈A 称为 K 的一个开覆盖,是指每个 x∈K 至少落在其中一个 Uα 里,即
K⊂α∈A⋃Uα.
这族开集可以无限多。若能从中挑出有限个 Uα1,…,Uαm,而且仍有
K⊂Uα1∪⋯∪Uαm,
就称它们是一个有限子覆盖。紧性说的不是“原来的覆盖只有有限个”,而是“无论原覆盖多长,总有有限部分已经够用”。证明中也会遇到形如 K∩O 的相对开集,其中 O 在 R 中开;把这类集合拿来覆盖 K 与使用实直线中的开集等价,有限子覆盖性质不变。
在实直线上,紧集有一个极方便的等价刻画:
集合 K⊂R 是紧集,当且仅当它既闭又有界。空集也紧;讨论最大值、最小值时会另外要求定义域非空。
这句话把“开覆盖”这个看似抽象的条件变成了可检查的闭有界性。不过在本章的证明里,真正干活的是有限子覆盖性质。闭和有界只是实直线给我们的一个快捷入口;到了更一般的度量空间,“闭且有界”未必足以推出紧,开覆盖才是稳妥的定义。
为什么少一个条件都不行
闭区间 [a,b] 既闭又有界,所以紧。相反,下面两类失败分别暴露了“闭”和“有界”各自的作用。
对开区间 (0,1),考虑开区间族
Un=(n1,1),n=2,3,….
它们确实覆盖 (0,1):给定 x>0,取足够大的 n 使 1/n<x 即可。但有限挑出若干个以后,设其中最大的下标为 N,这些集合的并至多是 UN=(1/N,1),靠近 0 的那一段仍没有覆盖。这里缺掉的是端点 0;局部区间可以不断往它追,却永远不能在有限步封住它。
对无界集合 [0,∞),考虑
Vn=(−n,n),n∈N.
它们覆盖了整个 [0,∞),但任意有限部分都被某个 VN 包住,而 N+1 不在 VN 中。这里没有漏掉边界点,而是集合一直延伸,有限多个局部范围无法管到无穷远。
有限化到底做了什么
设 f:K→R 在紧集 K 上连续。固定每个 t∈K,点连续性允许我们取一个开区间 It,使得
x∈It∩K⟹∣f(x)−f(t)∣<1.
所有 It 当然覆盖 K,因为每个 t 都在自己的区间中。紧性把这无限族区间压成
It1,It2,…,Itm.
现在任意 x∈K 至少落在一个 Iti 中,于是
∣f(x)∣≤∣f(x)−f(ti)∣+∣f(ti)∣<1+∣f(ti)∣.
而右边只涉及有限多个数 f(t1),…,f(tm)。令
M=1+1≤i≤mmax∣f(ti)∣,
就得到 ∣f(x)∣≤M 对所有 x∈K 成立。连续性原本只在一个点附近给控制;紧性让我们只需记住有限个点的函数值,于是局部有界性变成了全局有界性。
下面的交互件把这个“从许多小区间中抽出有限个”的动作画出来。它不是一种通用的选取算法;定理保证的是有限选择一定存在。
连续函数把紧集送到紧集
这个结论会把有关定义域的紧性转移到函数值那边。
若 K⊂R 紧,且 f:K→R 连续,那么 f(K) 紧。
证明的动作很值得慢慢看。任取 f(K) 的一个开覆盖 {Wα}α∈A。我们不能直接把它当作 K 的覆盖,因为这些集合活在函数值轴上。于是把每个集合拉回定义域:
f−1(Wα)={x∈K:f(x)∈Wα}.
连续性的一个等价表述是:开集的原像在相对定义域 K 中开。因此这些原像是刚才说明过的相对开集。又因为每个 f(x) 都落在某个 Wα 中,原像族覆盖 K:
K⊂α∈A⋃f−1(Wα).
由紧性,可取有限多个原像覆盖 K。把它们对应回去,Wα1,…,Wαm 就覆盖 f(K)。这正是 f(K) 紧的定义。
在 R 中,紧集闭且有界,所以这一定理立刻给出:连续函数在非空紧集上有界,且它的值域不会在极限处留下缺口。后面的极值定理就是把这句话再推进一步。
连续函数不会跳过中间高度
“图像不跳”是连续性的有用直觉,但它还不是可以证明的说法。真正可用的结论是介值定理。设 a<b,f:[a,b]→R 连续。若实数 μ 严格位于 f(a) 和 f(b) 之间,那么存在 c∈(a,b),使得
f(c)=μ.
若 μ=f(a) 或 μ=f(b),结论也成立,不过取到它的点可以就是端点。因此做题时最好先分清“严格在中间”还是“包含端点”。
上确界如何找出那个点
我们证明 f(a)<μ<f(b) 的情形;另一种方向只需把 f 换成 −f。令
S={x∈[a,b]:f(x)≤μ}.
a∈S,所以 S 非空;b 是它的上界。因此实数完备性保证
c=supS
存在。c 可以理解为“函数还没有越过高度 μ 的最右边界”。证明只剩下排除 f(c) 比 μ 小或大的两种可能。
若 f(c)<μ,连续性告诉我们:在 c 右边足够近的点上,函数值仍小于 μ。又因 f(b)>μ,此时 c=b,所以能找一个 c 右侧的点仍在 [a,b] 内,且属于 S。这与 c 是 S 的上界矛盾。
若 f(c)>μ,连续性告诉我们:在 c 左边足够近的点上,函数值仍大于 μ。但 c=supS 的意思是,对任意小的正长度,c 左侧都必须有 S 中的点;否则可以把上界往左挪。这个点一方面属于 S,应满足 f(x)≤μ,另一方面又落在局部的 f(x)>μ 范围内,仍然矛盾。
两边都排除后,只能有
f(c)=μ.
这段证明里,连续性负责让不等式在局部保持,完备性负责保证“最右边界” c 存在。少了完备性,集合未必有这样的边界点;少了连续性,函数可以在边界处直接跳过 μ。
例题:先证明根存在
证明方程
x3−3x+1=0
在 (0,1) 内至少有一个实根。
设 p(x)=x3−3x+1。多项式在 R 上连续,因此 p 在闭区间 [0,1] 上连续。
端点值为 p(0)=1 和 p(1)=−1。零严格夹在这两个数之间。
对 p 在 [0,1] 上应用介值定理,存在 c∈(0,1),使 p(c)=0。这一步只说明至少有一个根;不调用后面才会证明的导数工具,就不额外声称根唯一。
这里没有把根写成一个漂亮的公式,也没有妨碍我们得到存在性。二分法之所以可靠,正是因为每次保留一个端点异号的闭区间,介值定理始终保证根还在里面。
连续像为什么仍是区间
设 I⊂R 是区间,f:I→R 连续。任取 u,v∈f(I),并设
u<r<v.
存在 x,y∈I 使 f(x)=u、f(y)=v。由于 I 是区间,x 与 y 之间的整个闭区间仍包含在 I 中;在该闭区间上使用介值定理,就能找到 z 使 f(z)=r。因此 f(I) 也是区间。
这解释了“不能跳过高度”的精确含义,但要留意定义域必须是一个区间。若定义域是两个彼此分开的区间,函数可以在一块上恒为 0、另一块上恒为 2;它在各自的定义域部分仍连续,值域却跳过了 (0,2)。
下面的交互件展示端点异号时的二分定位。每一步并不是凭图像猜测,而是在保存介值定理的前提。
最大值不会逃到边界外
有界并不等于取得界。函数 f(x)=x 在 (0,1) 上连续且有界,值域的上确界是 1,但没有任何输入让函数值等于 1。极值定理补上的正是“上确界真的被函数取到”这一句。
设 K⊂R 非空且紧,f:K→R 连续。则存在 xmin,xmax∈K,使得对每个 x∈K,
f(xmin)≤f(x)≤f(xmax).
因此 f 在 K 上取得最小值和最大值。
从连续像紧到极值
由前面的结论,f(K) 是实直线中的非空紧集,因此它闭且有界。令
m=inff(K),M=supf(K).
有界性保证这两个实数存在。上确界的逼近性质允许我们在 f(K) 中取一列数 yn,满足
M−n1<yn≤M.
于是 yn→M。由于 f(K) 闭,它包含自己的极限点,故 M∈f(K)。所以存在 xmax∈K 满足 f(xmax)=M。对 m 使用同样的论证,就得到 xmin。
这条证明把逻辑链分得很清楚:紧性先经过连续函数传到值域;在实直线上,紧值域没有漏掉自己的上确界和下确界;最后才把两个数拉回定义域。
另一条路线:逼近最高处,再抽子列
也可以不先谈值域闭性。令
M=sup{f(x):x∈K}.
按上确界定义,对每个 n∈N 可选 xn∈K,使
M−n1<f(xn)≤M.
实直线中的紧性等价于序列紧性:K 中任意数列有一个收敛到 K 内点的子列。因此可取
xnj→x∗∈K.
连续性把输入的极限传给输出:
f(xnj)→f(x∗).
另一方面,上面的夹逼估计说明 f(xnj)→M,所以 f(x∗)=M。这一版本把证明压缩成三个动作:用上确界造接近最高处的点,靠紧性防止这些点逃掉,再靠连续性传递极限。
两个假设都不能顺手删掉
定义域不紧时,连续性救不了极值。f(x)=x 在 (0,1) 上连续,却没有最大值或最小值;f(x)=x2 在 R 上连续,却没有最大值。前者让极值往缺失端点跑,后者让极值朝无穷远跑。
定义域紧而函数不连续时,结论也会失效。定义 g:[0,1]→R 为
g(x)={x,0,0≤x<1,x=1.
它在 [0,1] 上有界,上确界是 1,但没有点取到 1。问题不在于区间漏了端点,而在于函数到了端点突然把应有的极限值换掉了。
例题:把值域完整写出来
设
q(x)=x2−2x+2,x∈[0,3].
求 q([0,3])。
先配方:
q(x)=(x−1)2+1.
当 x∈[0,3] 时,x−1∈[−1,2],所以
0≤(x−1)2≤4.
下界在 x=1 取到,q(1)=1;上界在 x=3 取到,q(3)=5。极值定理保证连续函数确实能取到它的最小、最大高度,介值定理又保证中间高度没有缺失。因此
q([0,3])=[1,5].
“连续函数把闭区间映成闭区间”就是这两条定理合起来的结论;仅有其中一条都不够。
一致连续:全体点对共用一个半径
设 E⊂R,f:E→R。点连续的量词顺序是
∀x0∈E ∀ε>0 ∃δ>0 ∀x∈E,∣x−x0∣<δ⟹∣f(x)−f(x0)∣<ε.
这里的 δ 可以依赖于中心点 x0。一致连续把中心点放到 δ 之后:
∀ε>0 ∃δ>0 ∀x,y∈E,∣x−y∣<δ⟹∣f(x)−f(y)∣<ε.
也就是说,先给定误差要求 ε,我们只能选一次 δ,随后它要同时处理 E 里的每一对近点。
逐点连续和一致连续的差别不在于把 x0 改成了 y,而在于量词顺序。若 δ 能看见当前点的位置,它只是逐点连续;只有 δ 不依赖任何具体点,才是一致连续。
一个直接可算的正例
函数 f(x)=x2 在 [−2,2] 上一致连续。对任意 x,y∈[−2,2],
∣f(x)−f(y)∣=∣x−y∣∣x+y∣≤4∣x−y∣.
给定 ε>0,取
δ=4ε.
那么 ∣x−y∣<δ 就推出 ∣x2−y2∣<ε。这里能够直接写出统一常数,是因为定义域已经把 ∣x+y∣ 统一压在 4 以下。
两个连续但不一致连续的反例
同一个 x2 放到 R 上就不一致连续。假设给定 ε0=1 后存在某个 δ>0。取
x=n,y=n+2δ.
两点距离是 δ/2<δ,但
∣y2−x2∣=δn+4δ2.
只要 n>1/δ,这个量就大于 1,与统一控制矛盾。函数并没有在某个有限点不连续;失败来自远处的变化越来越陡。
另一个不同的失败方式出现在 f(x)=1/x 的定义域 (0,1)。令
xn=n1,yn=n+11(n≥2).
则
∣xn−yn∣=n(n+1)1⟶0,
但
xn1−yn1=∣n−(n+1)∣=1.
输入点已经挤得任意近,输出却始终相差 1。这说明靠近缺失点 0 时,每个局部 δ 都会被迫缩小,无法留下全域统一的正半径。
下面的交互件把几个定义域放在一起比较。看它时请始终抓住同一个问题:固定 ε 后,是否能在选点之前先选好一个 δ?
紧性怎样制造统一的 δ
现在可以看本章最典型的“有限化”证明了。
若 K⊂R 紧,且 f:K→R 连续,则 f 在 K 上一致连续。
这个结论常被称为闭有界区间上的连续函数自动一致连续。用紧集表述更准确:闭区间只是实直线中最常见的紧集。
覆盖式证明
固定 ε>0。对每个 t∈K,由 f 在 t 连续,可取 ρt>0,使得
x∈K,∣x−t∣<2ρt⟹∣f(x)−f(t)∣<2ε.
请注意 ρt 现在仍依赖于 t;这还不是一致连续。我们把每个局部控制的一半拿来做开区间:
Jt=(t−ρt,t+ρt).
它们覆盖 K。由紧性,存在 t1,…,tm∈K,使
K⊂Jt1∪⋯∪Jtm.
这时才可以定义
δ=min{ρt1,…,ρtm}>0.
正性来自“有限”:无限多个正数的下确界可能是 0,有限多个正数的最小值一定仍为正。
任取 x,y∈K 且 ∣x−y∣<δ。有限子覆盖保证 x 落入某个 Jti,所以
∣x−ti∣<ρti.
再用三角不等式,
∣y−ti∣≤∣y−x∣+∣x−ti∣<δ+ρti≤2ρti.
因此 x 和 y 都落在同一个中心 ti 的连续性控制范围内:
∣f(x)−f(ti)∣<2ε,∣f(y)−f(ti)∣<2ε.
最后一次三角不等式给出
∣f(x)−f(y)∣≤∣f(x)−f(ti)∣+∣f(ti)−f(y)∣<ε.
这里的缩半并不是装饰。x 只知道落在半径 ρti 的覆盖区间里;我们还要把离 x 很近的 y 推进半径 2ρti 的原始连续性控制区间,才可以让两点通过同一个中心比较。
数列式反证法
在实直线上,也可以把“不存在统一 δ”翻译成数列。若 f 不一致连续,则存在 ε0>0,使得每个 n 都能选出 xn,yn∈K,满足
∣xn−yn∣<n1,∣f(xn)−f(yn)∣≥ε0.
紧性给出 xn 的收敛子列:
xnj→x∗∈K.
而
∣ynj−x∗∣≤∣ynj−xnj∣+∣xnj−x∗∣⟶0,
所以 ynj→x∗。连续性于是给出
f(xnj)→f(x∗),f(ynj)→f(x∗).
两列函数值之差应趋于 0,却始终不小于 ε0,矛盾。覆盖式证明让我们看见“取有限个半径再取最小值”;数列证明让我们看见“相近点被紧性迫到同一极限点”。它们说的是同一件事的两种语言。
把全局结论放在一起使用
本章的几个定理容易混成一句“连续函数很好”。真正做题时,应先问结论到底要什么。
若要证明某个中间函数值或某个零点存在,先检查定义域是否包含连接两个点的区间、函数是否连续,并使用实数完备性支撑的介值定理。若要保证最大值和最小值真的取到,检查定义域是否非空紧、函数是否连续。若要得到一个全域统一的误差半径,检查的是紧性和连续性,从而使用一致连续结论。
面对“对所有点同时成立”的问题,不要急着把每个点的局部 δ 直接取最小值。先问这些 δ 有多少个;只有借助紧性把它们化成有限个,取最小值才是合法而且有用的动作。
自检练习
练习一
证明方程
x3+x−3=0
在 (1,2) 内至少有一个解。
设 h(x)=x3+x−3。它是多项式,所以在 [1,2] 上连续。端点值为
h(1)=−1,h(2)=7.零夹在 −1 和 7 之间。由介值定理,存在 c∈(1,2),使 h(c)=0。因此原方程在该开区间内至少有一个解。
练习二
不用紧性定理,直接证明 f(x)=x 在 [0,1] 上一致连续。
任取 x,y∈[0,1]。不妨设 x≥y。因为 x≥y,有
∣x−y∣2=x+y−2xy≤x−y=∣x−y∣.所以
∣x−y∣≤∣x−y∣.给定 ε>0,取 δ=ε2。若 ∣x−y∣<δ,便有
∣x−y∣≤∣x−y∣<δ=ε.故 f 在 [0,1] 上一致连续。
练习三
证明 f(x)=x3 在 R 上不一致连续。
取 ε0=2。给定任意 δ>0,选足够大的正整数 n,使
n21<δ.令
x=n,y=n+n21.则 ∣x−y∣=1/n2<δ。但
∣y3−x3∣=(n+n21)3−n3=3+n33+n61>2.也就是说,无论把输入距离要求得多小,总能在足够远处找到函数值相差至少 2 的一对点。因此 x3 在 R 上不一致连续。
练习四
证明 [0,1) 不是紧集:给出一个没有有限子覆盖的开覆盖。
对 n=2,3,…,令
Un=(−1,1−n1).任取 x∈[0,1),由于 1−x>0,可以选 n 足够大,使 1/n<1−x,于是 x<1−1/n,故 x∈Un。所以 {Un:n≥2} 覆盖 [0,1)。
任取有限子族,令其中最大的下标为 N。这些集合嵌套,有限并就是 UN。点
1−2N1属于 [0,1),却大于 1−1/N,不属于 UN。所以这个有限子族不能覆盖 [0,1)。因此 [0,1) 不紧。
练习五
设 K⊂R 非空紧,f:K→R 连续。证明存在 x∗∈K,使得
∣f(x)∣≤∣f(x∗)∣(x∈K).
绝对值函数 r↦∣r∣ 在 R 上连续,因此复合函数
g(x)=∣f(x)∣在 K 上连续。由极值定理,g 在非空紧集 K 上取得最大值:存在 x∗∈K,使
g(x)≤g(x∗)(x∈K).代回 g(x)=∣f(x)∣,正是题目所求的不等式。
下一步:从全局约束回到局部斜率
到这里,我们已经知道:在紧的定义域上,连续函数的值域不会逃向无穷、不会漏掉最大最小,也可以用同一个 δ 控制所有近点。下一章会换一个问题:如果函数值不仅靠近,而且靠近的方式近似一条直线,那么这个局部斜率能否稳定下来?这就需要回到差商极限,正式定义导数。