7.1 實數的建構#
本節目標#
- 理解為什麼有理數 \(\mathbb{Q}\) 不夠用:數線上有「空隙」。
- 認識兩條經典的建構路線:Dedekind cut 與 Cauchy 序列。
- 了解 Lean/Mathlib 中
Real的地位:它是公設化給出的型別,完整建構超出本書範圍。 - 掌握完備性公理(least upper bound property)與
Real.sSup。 - 認識 Archimedean 性質及其在 Lean 中的形式。
為什麼有理數不夠#
有理數 \(\mathbb{Q}\) 在四則運算下封閉,看起來十分稠密: 任給兩個相異有理數,中間必有另一個有理數(取平均即可)。 直覺上數線「塞滿」了有理數,似乎不會缺什麼。
但古希臘人發現了一個致命的空隙:邊長為 \(1\) 的正方形,其對角線長度 滿足
而方程 \(x^2 = 2\) 在 \(\mathbb{Q}\) 中無解。證明是經典的反證法:
假設 x = p/q(p, q 互質)滿足 x² = 2。
則 p² = 2q²,故 p 為偶數,寫 p = 2k。
代入得 4k² = 2q²,即 q² = 2k²,故 q 也是偶數。
p, q 皆為偶數,與互質矛盾。
換句話說,在 \(\mathbb{Q}\) 中,序列 \(1,\ 1.4,\ 1.41,\ 1.414,\ \dots\) (不斷逼近 \(\sqrt{2}\) )「想收斂」卻沒有極限可收斂—— 極限的候補位置上是空的。這個空隙就是 \(\sqrt{2}\) 。
這種「該收斂卻無處收斂」的現象,正是分析學要解決的核心問題。 解法只有一個:把數線補滿,補出來的東西就是實數 \(\mathbb{R}\) 。
兩條建構路線#
歷史上補滿數線有兩條著名的路:
1. Dedekind cut(戴德金切割)
把每個實數想成「數線上的一次切割」:一個切割是將 \(\mathbb{Q}\) 分成左右兩半 \(A \cup B\) ,其中 \(A\) 的每個元素都小於 \(B\) 的每個元素。 切割 \(\sqrt{2}\) 就是
即使 \(\sqrt{2}\) 不在 \(\mathbb{Q}\) 中,這個「左半邊」仍是完全確定的對象。 實數就被定義為所有這種切割的集合。
2. Cauchy 序列(柯西序列)
把實數想成「有理數的極限過程」:一個實數是一列有理數 \(a_1, a_2, a_3, \dots\) ,滿足「項與項之間越靠越近」:
逼近 \(\sqrt{2}\) 的數列 \(1, 1.4, 1.41, 1.414, \dots\) 就「是」實數 \(\sqrt{2}\) 。 (技術上要對序列取等價類,因為不同的序列可以逼近同一個數。)
兩條路殊途同歸,建出的 \(\mathbb{R}\) 彼此同構。 Dedekind cut 直接體現「序」的直覺(完備性公理好講), Cauchy 序列直接體現「極限」的直覺(分析學好做)。
Lean 中 ℝ 的地位#
在 Mathlib 中,實數是一個公設化的型別 Real:
-- Mathlib 中的實數是某個結構的「抽象」,我們只承諾它滿足哪些性質
#check (Real : Type)
#check (Real.instLinearOrderedField : LinearOrderedField ℝ)
重點觀念:
- Lean 中
ℝ不是用 Dedekind cut 或 Cauchy 序列「內建」的; 它由一系列結構 instance(有序體、完備性等)刻畫。 - 這是典型的以性質定義物件(definition by characterization)做法: 只要一個物件滿足這些公理,關於它的定理就都成立。
- Mathlib 中其實也做過完整的建構(例如
DedekindCut相關發展、 Cauchy 序列的Cauchyfilter 完備化),但那需要濾波器、 拓撲等重型機具,超出本書範圍。我們直接使用現成的ℝ。
-- 我們可以使用實數的運算與序,無須知道它的內部表示
example : (2 : ℝ) < 3 := by norm_num
example (x : ℝ) : x * 1 = x := by ring
這樣的好處:本章的證明只依賴 \(\mathbb{R}\) 的公理性質, 與具體建構無關——這也符合分析學的哲學。
完備性公理:least upper bound property#
\(\mathbb{R}\) 區別於 \(\mathbb{Q}\) 的關鍵公理是完備性:
完備性公理: \(\mathbb{R}\) 的每個非空、有上界的子集 \(S\) , 都存在最小上界(supremum) \(\sup S\) 。
注意 \(\mathbb{Q}\) 不滿足這條:集合 \(\{q \in \mathbb{Q} \mid q^2 < 2\}\) 非空、有上界, 但它在 \(\mathbb{Q}\) 中沒有最小上界(候補 \(\sqrt{2}\) 不在 \(\mathbb{Q}\) 中)。
在 Lean 中,supremum 寫作 sSup:
-- `sSup S`:集合 S 的最小上界
#check (Real.sSup : Set ℝ → ℝ)
-- 完備性公理的 Mathlib 形式(簡化):
#check @Real.sSup_nonempty
-- Real.sSup_nonempty : ∀ (s : Set ℝ), s.Nonempty → IsLUB s (sSup s)
其中 IsLUB s x 表示 \(x\) 同時是 \(s\) 的上界且是所有上界中最小的。 Mathlib 將「上界」「最小上界」定義為一般述詞:
-- 上界:∀ y ∈ S, y ≤ x
example (S : Set ℝ) (x : ℝ) (h : UpperBounds S x) :
∀ y ∈ S, y ≤ x := fun hy => h hy
-- 最小上界:本身是上界,且 ≤ 任何上界
example (S : Set ℝ) (x : ℝ) (h : IsLUB S x) (u : ℝ)
(hu : ∀ y ∈ S, y ≤ u) : x ≤ u := h.2 hu
使用範例:證明 \(\sup \{x \in \mathbb{R} \mid x \le 1\} = 1\) 。 思路: \(1\) 是上界(顯然),且 \(1\) 屬於集合,所以任何上界都 \(\ge 1\) 。
example : sSup {x : ℝ | x ≤ 1} = 1 := by
refine Real.sSup_eq_of_isLUB ⟨1, ?_, ?_⟩
· -- 1 是上界
intro y hy
exact hy
· -- 任何上界 u 滿足 1 ≤ u,因為 1 在集合裡
intro u hu
exact hu 1 (le_refl 1)
(實際寫作時以 Mathlib 現有引理名稱為準;exact? 與 apply? 是尋找這些引理的好幫手。)
直覺:supremum 是「貼著集合上緣的那個數」。 它可以屬於集合(如上例),也可以不屬於 (如 \(\sup \{x \mid x < 1\}\) 對開區間情形……本例剛好屬於; 但 \(\sup \{1 - 1/n \mid n \in \mathbb{N}\} = 1\) 不屬於該集合)。
Archimedean 性質#
完備性的重要推論是 Archimedean 性質:
任給實數 \(x > 0\) 與正數 \(y\) ,必存在自然數 \(n\) 使 \(n \cdot x > y\) 。 直覺:不論 \(y\) 多大、步長 \(x\) 多小,一直加 \(x\) 總有一天超過 \(y\) 。
等價的漂亮形式:對任意實數 \(x\) ,必存在整數 \(n\) 滿足
即每個實數都「夾」在兩個相鄰整數之間( \(\lfloor x \rfloor\) 的存在性)。 另一個常用形式: \(\mathbb{N}\) 在 \(\mathbb{R}\) 中無上界—— 這正是 \(\mathbb{Q}\) (以及任何 Archimedean 有序體)與 非標準分析中「無窮大數」的差別所在。
Mathlib 以 typeclass Archimedean 刻畫這個性質,而 ℝ 擁有它:
#check (Real.instArchimedean : Archimedean ℝ)
-- Archimedean 性質:任意正實數,可以用自然數的倍數超越
#check @exists_nat_gt
-- exists_nat_gt : ∀ (x : ℝ), ∃ (n : ℕ), x < ↑n
-- 反向形式:任何 n ≥ 1 的倒數可任意小
example (ε : ℝ) (hε : 0 < ε) : ∃ (n : ℕ), (1 : ℝ) / n < ε := by
obtain ⟨n, hn⟩ := exists_nat_gt (1 / ε)
refine ⟨n + 1, ?_⟩
have hpos : 0 < (n : ℝ) + 1 := by positivity
calc (1 : ℝ) / (n + 1) ≤ (1 : ℝ) / (1 / ε) := by
apply div_le_div_right (by norm_num)
· linarith [hn]
· rw [div_div_cancel_zero]
· linarith
· exact ne_of_gt hε
(第二個例子略去了若干細節步驟,讀者可視為習題; 關鍵是看出 exists_nat_gt 這類引理正是 Archimedean 性質的工具化。)
為什麼重要:下一節的 ε-N 定義中,我們要「取 \(N\) 大到某種程度」, 能這樣做就是因為 Archimedean 性質保證自然數沒有上界、 \(1/n\) 能任意小。沒有它,ε-N 定義會變成空話。
小結與練習#
本節要點:
- \(\mathbb{Q}\) 有「空隙」: \(x^2 = 2\) 無有理數解,數線必須補滿。
- 補法有二:Dedekind cut(用切割定義實數)與 Cauchy 序列(用極限過程定義實數)。
- Lean 中
ℝ是公設化的:以有序體結構與完備性公理刻畫,不依賴內部表示。 - 完備性公理=每個非空有上界集合有最小上界
sSup。 - Archimedean 性質是完備性的推論,是 ε-N 論證的幕後功臣。
練習:
- 證明 \(\sqrt{2}\) 是無理數(如正文所示反證法),並用 Lean 以
Rat寫出關鍵步驟:若 \(p^2 = 2q^2\) 則 \(p, q\) 皆偶數。 - 設 \(S = \{q \in \mathbb{Q} \mid q > 0,\ q^2 < 2\}\) 。 說明 \(S\) 在 \(\mathbb{Q}\) 中為何沒有最小上界。
- 用
Real.sSup_eq_of_isLUB(或exact?找到的等價引理)證明sSup {x : ℝ | x ≤ 2} = 2。 - 用
exists_nat_gt證明:對任意實數 \(x\) ,存在 \(n : ℕ\) 使 \(x < n\) 且 \(n \le x + 1\) 。 - 說明為什麼「 \(\mathbb{N}\) 在 \(\mathbb{R}\) 中有上界」會違反 Archimedean 性質,並用完備性公理推出矛盾 (提示:若 \(\mathbb{N}\) 有上界,考慮 \(\sup \mathbb{N}\) , 則 \(\sup \mathbb{N} - 1\) 也必須是上界,矛盾)。