9.2 緊緻性與極值定理#
本節目標#
- 理解緊緻性的開覆蓋定義,以及「有限覆蓋」直覺。
- 認識 Heine–Borel 定理: \(\mathbb{R}\) 的閉區間是緊緻的。
- 一句話區分緊緻與序列緊緻。
- 學會 Mathlib 的
IsCompact與極值定理(Weierstrass)的 lemma。 - 用極值定理解一道應用例題。
為什麼需要緊緻性?#
回到分析學最經典的問題:連續函數何時有最大值?
你在微積分裡學過:連續函數 \(f : [a, b] \to \mathbb{R}\) 必有最大值與最小值(Weierstrass 極值定理)。但反例俯拾皆是:
- \(f(x) = \tfrac{1}{x}\) 在 \((0, 1]\) 上連續,卻無上界;
- \(f(x) = x\) 在開區間 \((0, 1)\) 上連續,最大值「差一點」是 \(1\) ,卻取不到;
- \(f(x) = x\) 在 \(\mathbb{R}\) 上連續,無最大值。
共同的禍源是開與無界:開區間的端點「近在眼前卻取不到」,無界集合讓函數「逃向無窮遠」。我們需要一個性質,正好排除這兩種逃逸。這就是緊緻性。
開覆蓋定義#
定義(緊緻)。 \(K \subseteq X\) 稱為緊緻的,若 \(K\) 的每個開覆蓋都有有限子覆蓋:
這個定義初看極不直覺——「有限子覆蓋」和最大值有什麼關係?直覺鋪陳如下:
- 開覆蓋是「一張網」,每個開集罩住 \(K\) 的一部分。
- 緊緻說的是:不管網眼多密、張數多到不可數,總能抽出有限張把 \(K\) 罩完。
- 「有限」是關鍵:有了有限覆蓋,就能從中挑出「最緊的那張」,例如取 \(\delta = \min\) (有限個正數有最小值!),把「對每點存在」升級成「對整個集合一致成立」。
所以緊緻性是「把逐點的性質搬到整體」的機器。逐點有界 \(\to\) 一致有界、逐點連續 \(\to\) 一致連續,都是這台機器的產物。
反例: \((0, 1)\) 不緊緻——開覆蓋 \(\{(1/n, 1)\}_{n \ge 2}\) 覆蓋 \((0,1)\) ,但任取有限個,並集形如 \((1/N, 1)\) ,罩不住靠近 \(0\) 的點。 \(\mathbb{R}\) 也不緊緻—— \(\{(-n, n)\}_{n \ge 1}\) 沒有有限子覆蓋。
Heine–Borel 定理#
定理(Heine–Borel)。 \(\mathbb{R}\) 中的子集 \(K\) 緊緻 \(\iff\) \(K\) 有界且閉。
因此閉區間 \([a, b]\) 是緊緻的——這正是極值定理需要的舞臺。
證明的精神在於完備性(第 5 章的 sup 公理又出場了):無界的話,覆蓋 \(\{(-n, n)\}\) 抓不住它;不閉的話,極限點 \(a \notin K\) 會被覆蓋 \(\{x : |x - a| > 1/n\} \cup \{\mathbb{R} \setminus \{a\}\}\) 漏掉;而 \([a, b]\) 緊緻的方向用 sup 法:設 \(c = \sup\{x : [a, x] \text{ 有有限子覆蓋}\}\) ,用完備性證 \(c = b\) 導出矛盾。
一句話對比序列緊緻:序列緊緻是「每個序列都有收斂子列收斂到集合內的點」——在度量空間(如 \(\mathbb{R}^n\) )中兩者等價,在一般拓樸空間中不等價。
Mathlib 的 IsCompact#
Mathlib 的定義完全對應開覆蓋版本:
def IsCompact (s : Set α) : Prop :=
∀ ⦃F : Set (Set α)⦄, ∀ hfo : ∀ t ∈ F, IsOpen t, ∀ hsf : s ⊆ ⋃₀ F,
∃ t ⊆ F, t.Finite ∧ s ⊆ ⋃₀ t
讀法:對每個由開集組成的族 F,若它覆蓋 s,就能抽出有限子族 t 仍覆蓋 s。
實數上的 Heine–Borel:
-- 閉區間緊緻
example : IsCompact (Set.Icc (0:ℝ) 1) := isCompact_Icc
-- 一般形式:有界且閉 ⟺ 緊緻(`isCompact_iff_bounded_isClosed`)
example (s : Set ℝ) : IsCompact s ↔ IsClosed s ∧ BddAbove s ∧ BddBelow s :=
isCompact_iff_bddBdd_isClosed
(確切的 lemma 名以你使用的 Mathlib 版本為準,可用 exact? 搜尋;核心是 isCompact_Icc 這一族引理。)
極值定理(Weierstrass)#
定理(Weierstrass 極值定理)。設 \(K\) 為非空緊緻集, \(f : K \to \mathbb{R}\) 連續,則 \(f\) 在 \(K\) 上達到最大值與最小值。
Mathlib 把「最大值」表述成 IsMaxOn: \(f\) 在集合 \(s\) 上於點 \(a\) 取得最大值,即 \(\forall x \in s,\ f\,x \le f\,a\) 。
theorem IsCompact.exists_isMaxOn [TopologicalSpace α] [LinearOrder β]
{s : Set α} {f : α → β} (hs : IsCompact s) (hne : s.Nonempty)
(hcont : ContinuousOn f s) :
∃ x ∈ s, IsMaxOn f s x
theorem IsCompact.exists_isMinOn [TopologicalSpace α] [LinearOrder β]
{s : Set α} {f : α → β} (hs : IsCompact s) (hne : s.Nonempty)
(hcont : ContinuousOn f s) :
∃ x ∈ s, IsMinOn f s x
三個假設一一對應數學敘述:hs(緊緻)、hne(非空——少了它,空集上一切函數「無點可取」)、hcont(在 \(s\) 上連續)。注意緊緻與非空都是必要的,缺一不可。
為什麼緊緻 + 連續 = 極值?#
證明藍圖(數學版,兩步):
- 緊緻集的連續像是緊緻的: \(f(K) \subseteq \mathbb{R}\) 緊緻(見 9.3 節,緊緻在連續映射下不變)。
- ** \(\mathbb{R}\) 的緊緻子集有上界且有上確界**,且上確界屬於該集合(因為集合是閉的): \(\sup f(K) \in f(K)\) ,故存在 \(a \in K\) 使 \(f(a) = \sup f(K)\) 。
注意第 2 步又用到了實數完備性:sup 存在是底層引擎,緊緻性把它從「有序體公理」升級成「可達到的極值」。
應用例題#
例題。證明: \(f(x) = x^2 - 2x\) 在 \([0, 3]\) 上有最大值與最小值,並指出位置。
數學解: \(f\) 在 \(\mathbb{R}\) 上多項式,故連續; \([0,3]\) 緊緻非空,由極值定理,極值存在。求極值: \(f'(x) = 2x - 2 = 0\) 得 \(x = 1\) ;比較 \(f(0)=0\) 、 \(f(1)=-1\) 、 \(f(3)=3\) ,故最小值 \(-1\) 於 \(x=1\) ,最大值 \(3\) 於 \(x=3\) 。
注意邏輯分工:極值定理保證「存在」,微分法負責「找到」。沒有前者,後者可能白忙(例如在 \((0,3)\) 上, \(f\) 的最小值 \(-1\) 存在但最大值不存在)。
Lean 版(骨架,展示 lemma 的套用方式):
example : ∃ x ∈ Set.Icc (0:ℝ) 3, IsMinOn (fun x => x^2 - 2*x) (Set.Icc 0 3) x ∧
∃ y ∈ Set.Icc (0:ℝ) 3, IsMaxOn (fun x => x^2 - 2*x) (Set.Icc 0 3) y := by
constructor
· exact isCompact_Icc.exists_isMinOn (Set.nonempty_Icc.mpr ⟨0, le_refl 0⟩)
(fun x _ => (continuous_pow 2).sub continuous_const_id _) -- 函數連續
· exact isCompact_Icc.exists_isMaxOn (Set.nonempty_Icc.mpr ⟨0, le_refl 0⟩)
(fun x _ => (continuous_pow 2).sub continuous_const_id _)
(實際 lemma 名與 ContinuousOn 的建構方式隨 Mathlib 版本微調,重點是套用格式:緊緻 .exists_isMinOn 非空 連續。)
小結與練習#
本節重點:
| 概念 | 一句話 | Lean |
|---|---|---|
| 緊緻 | 每個開覆蓋有有限子覆蓋 | IsCompact |
| Heine–Borel | \(\mathbb{R}\) :緊緻 \(\iff\) 有界且閉 | isCompact_Icc 等 |
| 序列緊緻 | 每列有收斂子列(度量空間中與緊緻等價) | IsSeqCompact |
| 極值定理 | 緊緻 + 連續 + 非空 \(\Rightarrow\) 有 max/min | IsCompact.exists_isMaxOn |
練習:
- 證明 \(\mathbb{N}\) (配離散拓樸)不是緊緻的:構造一個沒有有限子覆蓋的開覆蓋。
- 證明有限個緊緻集的並是緊緻的。
- 舉一個連續函數在非緊緻集合上無最大值的例子,並指出是「不閉」還是「無界」造成。
- 在 Lean 中用
exact?找出IsCompact.exists_isMinOn的正確名稱與參數順序,完成本節例題的 Lean 證明。 - 思考題:極值定理的證明中,「 \(\sup f(K) \in f(K)\) 」用到 \(f(K)\) 閉。這個閉性是從哪裡來的?(提示:連續函數下緊緻集的像是緊緻的,而 \(\mathbb{R}\) 的緊緻集是閉的。)