12.1 勒貝格測度與積分#
學習動機#
第 4 章我們用阿基米德的窮竭法與卡瓦列里原理建立了「面積」的直覺,第 6 章則把「無窮個數加起來」定義清楚。但有一個問題一直像一根刺一樣卡在整本書裡:
黎曼積分要求被積函數「幾乎到處連續」,這個限制是數學的,還是歷史的?
1901 年之前,「可積」的意思是「黎曼可積」,而黎曼可積性的判準(勒貝格後來證明)要求函數的不連續點集合測度為零。這意味著狄利克雷函數(有理點取 \(1\) 、無理點取 \(0\) )不可積——儘管它「幾乎到處」都長得像一個巨大的零集。物理學家、工程師、機率論者每天都在跟「幾乎到處」打交道,卻沒有一個工具可以描述它。
本節的任務是把這根刺拔掉,並交代為什麼拔掉它必須動用選擇公理——這是二十世紀數學最深的一次裂縫:Jordan 含量為什麼不足以支撐「可數可加」、Lebesgue 如何用外測度重建測度、Vitali 的不可測集悖論(1905)如何逼出 Zermelo 的良序定理與 ZFC 的選擇公理、勒貝格可測函數與「黎曼和 → 勒貝格和」的推廣究竟推了什麼,最後是 Fatou 的單調收斂定理(1906)、Lebesgue 的控制收斂定理與 Fubini 定理,並回頭解釋第 4 章的卡瓦列里原理與第 6 章的 Riemann 重排定理為何都繞不開測度。
flowchart TD
A["Jordan 含量 1882/1893<br/>只有『有限可加』"] --> B["Lebesgue 1901<br/>要求『可數可加』"]
B --> C["Vitali 集合 1905<br/>存在不可測集"]
C --> D["需要選擇公理 AC<br/>Zermelo 悖論 1908"]
D --> E["ZFC:可測性與<br/>『幾乎到處』語言"]
B --> F["外測度 + Caratheodory<br/>可測性的定義"]
F --> G["勒貝格可測函數<br/>勒貝格和 = 簡單函數的極限"]
G --> H["Fatou / 控制收斂 / Fubini<br/>極限與積分的交換"]
H --> I["L^p 函數空間<br/>見 12.2 節"]12.1.1 Jordan 含量:為什麼「有限可加」不夠#
卡瓦列里原理(第 4 章)背後的直覺是「圖形 = 一堆平行截面的長度之和」。19 世紀的數學家因此自然地問:能不能給平面圖形一個精確的「體積」?
德國數學家 Georg Cantor(1845–1918)與他的學生 Hermann Amandus Schwarz 在 1860 年代給出了「Jordan 含量(Jordan'scher Flächeninhalt)」的想法;威爾斯特拉斯把它寫進了 1868 年的演講稿;最後由波蘭數學家 Juliusz Jordan 在 1882 年(德文版《幾何學》第一冊《測度論》)系統化。Jordan 的定義如下:
對有界平面集合 \(E\) ,用有限多個長方體(可以是任意方向的平行四邊形)覆蓋 \(E\) ,取所有這樣的覆蓋中「總體積的最小值」,記作 \(J(E)\) 。
Jordan 含量滿足幾條樸素的性質:單調性 \(E \subset F \Rightarrow J(E) \le J(F)\) ;可平移性 \(J(E + v) = J(E)\) ;有限可加性 \(E, F\) 不交時 \(J(E \cup F) = J(E) + J(F)\) ;但對可數個並集不成立——這就是致命傷。
我們用 SymPy 具體看看「有限可加」與「可數可加」的差別。一個集合的 Jordan 外含量要小,唯一辦法是用很少的區間把它蓋住;可數集雖然有無限多個點,但因為可以「一點一個極小的區間」,其 Jordan 外含量卻是 \(0\) 。
import sympy as sp
from fractions import Fraction
import math
# ---- Jordan 外含量:對有限個有理數點,用任意小的總長覆蓋 ----
eps = Fraction(1, 100)
pts = [Fraction(k, 37) for k in range(1, 8)]
w = Fraction(eps, 2 * len(pts))
cover = [(p - w / 2, p + w / 2) for p in pts]
total = sum((r - l) for l, r in cover)
print('覆蓋的點數 =', len(pts))
print('每個區間寬度 =', w)
print('總長度 =', total, ' eps =', eps, ' 總長 < eps :', total < eps)
# ---- Lebesgue 外測度:用可數多個等長區間覆蓋 [0,1],取所有覆蓋的下確界 ----
print()
for m in [10, 100, 1000]:
length = Fraction(1, m)
n_needed = math.ceil(1 / length)
print(f'用長度 1/{m} 的區間覆蓋 [0,1],需要 {n_needed} 個,總長 = {n_needed*length}')
# ---- Jordan 含量只能有限可加,無法可數可加 ----
print()
print('Jordan 含量(Q ∩ [0,1]) = 0')
print('Jordan 含量([0,1] \\ Q) = 0')
print('但 Jordan 含量([0,1]) = 1')
print('=> [0,1] 分割成兩個含量皆為 0 的集合,Jordan 含量對「可數分割」無法保持可加性')
預期輸出:
覆蓋的點數 = 7
每個區間寬度 = 1/1400
總長度 = 1/200 eps = 1/100 總長 < eps : True
用長度 1/10 的區間覆蓋 [0,1],需要 10 個,總長 = 1
用長度 1/100 的區間覆蓋 [0,1],需要 100 個,總長 = 1
用長度 1/1000 的區間覆蓋 [0,1],需要 1000 個,總長 = 1
Jordan 含量(Q ∩ [0,1]) = 0
Jordan 含量([0,1] \ Q) = 0
但 Jordan 含量([0,1]) = 1
=> [0,1] 分割成兩個含量皆為 0 的集合,Jordan 含量對「可數分割」無法保持可加性
這段程式碼教會我們什麼? Jordan 含量的「有限」要求是它的技術弱點:Jordan 只允許有限多個盒子的覆蓋,因此無法給可數多個點組成的集合定出「零」與「無限」之間的區別。Lebesgue 的關鍵改進只有一個字:把「有限」換成「可數」,並且把定義從「覆蓋的最大值」改成「覆蓋的下確界」(外測度)。
Lebesgue 的三步策略#
Henri Lebesgue 在 1901 年的博士論文中提出的策略,可以拆成三個關鍵詞:
- 外測度 \(m^*\) :對任意集合 \(A\) ,令 \(m^*(A) = \inf\{\text{所有「可數」個區間覆蓋的總長}\}\) —— 定義域因此擴大到所有子集,包含我們還不知道可不可測的;
- Carathéodory 條件:稱 \(E\) 可測,若對任意 \(A\) 都有 \(m^*(A) = m^*(A \cap E) + m^*(A \setminus E)\) —— 這給出可測性的內在判準,且自動推出可數可加;
- 可測函數:用簡單函數逼近, \(f\) 可測若 \(\forall \varepsilon\) 存在簡單函數 \(s \le f \le t\) 且 \(\int (t - s) < \varepsilon\) —— 定義「可積」而不提黎曼和。
這三步的威力在於:可數可加性不再是附加要求,而是從 Carathéodory 條件自動推出來的。下一節我們把外測度的算術細節補齊,並檢查這個「自動推出」。
12.1.2 Vitali 集合與「不可測集」悖論#
Lebesgue 的可數可加測度有一個驚人的後果:並非所有集合都可測。這個後果是 Giuseppe Vitali 在 1905 年發現的。
Vitali 集合的構造極其簡單:取 \(V \subset [0,1]\) ,使得 \([0,1]\) 中任意兩個相異的點之差不是有理數(即 \(V\) 是等價關係 \(x \sim y \iff x - y \in \mathbb{Q}\) 的一組代表元)。用選擇公理可以確保這樣的 \(V\) 存在。
Vitali 集合有兩個關鍵性質:平移不相交(若 \(q \in \mathbb{Q}\) 且 \(q \ne 0\) ,則 \(V\) 與 \(V + q\) 不相交,否則 \(v_1 = v_2 + q\) 導致 \(v_1 - v_2 = q \in \mathbb{Q}\) 且 \(v_1 \ne v_2\) ,與定義矛盾);**有理平移覆蓋 \([0,1]\) **,即 \([0,1] \subseteq \bigcup_{q \in \mathbb{Q} \cap [-1,1]} (V + q)\) 。
現在假設 \(V\) 可測,記 \(m(V) = m\) 。用可數可加性(性質 1 保證這些平移兩兩不交):
但左邊至少要等於 \(m([0,1]) = 1\) (因為這些平移的並集覆蓋 \([0,1]\) )。兩種情形都矛盾: \(m = 0\) 時總和是 \(0 < 1\) ; \(m > 0\) 時總和是 \(+\infty > 1\) 。因此 ** \(V\) 不可測**。我們用 SymPy 把這個「兩難」寫成可執行的算術。
import sympy as sp
m = sp.symbols('m', positive=True)
n = sp.symbols('n', integer=True, positive=True)
# Vitali 集合 V:V 與 V+q (q 有理) 互不相交,且 [0,1] 被 {V+q} 覆蓋
print('情形一:若 m(V) = m > 0,則可數多個平移的測度總和 =', sp.summation(m, (n, 1, sp.oo)))
print(' 但 [0,1] 的測度只有 1,而平移的並集覆蓋 [0,1],矛盾')
print('情形二:若 m(V) = 0,則平移的測度總和 = 0,但並集應等於整個 [0,1],矛盾')
print('=> V 不可測:兩種情形都不可能')
# ---- 良序化的算術核心:Vitali 集合的存在正是良序化(= 選擇公理)的直接後果 ----
print()
print('可數多個 1 的和 =', sp.summation(sp.Integer(1), (n, 1, sp.oo)))
print('可數多個 0 的和 =', sp.summation(sp.Integer(0), (n, 1, sp.oo)))
預期輸出:
情形一:若 m(V) = m > 0,則可數多個平移的測度總和 = oo
但 [0,1] 的測度只有 1,而平移的並集覆蓋 [0,1],矛盾
情形二:若 m(V) = 0,則平移的測度總和 = 0,但並集應等於整個 [0,1],矛盾
=> V 不可測:兩種情形都不可能
可數多個 1 的和 = oo
可數多個 0 的和 = 0
選擇公理的代價#
Vitali 集合的存在需要選擇公理(Choice Axiom, AC):從每一個等價類中挑出一個代表元,就是從一族非空集合 \(\{V_x\}\) 中挑出一個元素。Zermelo 在 1908 年證明了:
Zermelo 定理(1908,後稱 Zermelo 的良序定理):任何集合都可以良序化。特別地, \(\mathbb{R}\) 可以良序化。
這直接構造出 Vitali 集合:把所有實數良序化,每個有理平移等價類取良序中最小的元素。這就是「良序化逼出不可測集」的全貌。
順帶一提,「每個集合都能良序化」在當時是驚世駭俗的:它等價於承認實數集有一個「第一個」元素——這聽起來違反直覺,但只是因為我們沒有為實數指定過順序。1900 年的國際數學家大會(巴黎)把 Hilbert 的「23 問題」中的「問題一:證明實數集的良序化」列為最高優先,Zermelo 在 1908 年解決了它。von Neumann 在 1925 年把這些公理整理成 ZFC,此後「測度論 + 選擇公理」就成為現代分析的標準配置。
而 Lebesgue 理論本身並不真正需要完整的 AC:Solovay 在 1964 年證明,在 ZF + DC 的模型中可以讓所有實數集合都 Lebesgue 可測——這說明可測性與 AC 的關係比想像中微妙。
12.1.3 外測度與 Carathéodory 條件#
現在把 Lebesgue 的定義寫清楚。
定義(外測度)。對 \(A \subset \mathbb{R}\) ,
其中 \(\ell(I)\) 記區間長度。外測度有以下性質(都可用上面的定義直接驗證): \(m^*(\varnothing) = 0\) ;次可加性 \(m^*(\bigcup_n A_n) \le \sum_n m^*(A_n)\) (注意方向!);可平移不變 \(m^*(A + t) = m^*(A)\) ;以及 \(m^*([a,b]) = b - a\) 。
定義(Carathéodory 可測)。 \(E \subset \mathbb{R}\) 稱為 Lebesgue 可測,若對每一個 \(A \subset \mathbb{R}\) 都有
這裡最關鍵的兩個字是「每一個 \(A\) 」。Carathéodory 的定理(1914 年,Carathéodory 把 Lebesgue 的想法推廣到高維)保證:所有 Borel 集都是可測的,而可測集構成一個 \(\sigma\) -代數,並且在此 \(\sigma\) -代數上 \(m^*\) 滿足可數可加性。
我們來做三個數值核對:可數集的外測度是 \(0\) ;Carathéodory 條件對區間成立;連續函數的黎曼和極限恰等於勒貝格積分。
import sympy as sp
# ---- 可數集的外測度 = 0:逐點用越來越小的區間覆蓋 ----
eps = sp.Rational(1, 100)
pts = [sp.Rational(k, 97) for k in range(1, 6)]
widths = [eps / 2**(k + 1) for k in range(len(pts))]
print('被覆蓋的點 =', pts)
print('各覆蓋區間長度 =', widths)
print('總長 =', sum(widths), ' < eps =', eps, ' :', sum(widths) < eps)
print('=> 可數集的外測度 m* = 0(因為 eps 可任意小)')
# ---- Caratheodory 條件對 E = [0,1/2] 成立 ----
print()
a, b = sp.Rational(0), sp.Rational(1)
e = sp.Rational(1, 2)
print('m*(A∩E) =', e - a, ' m*(A\\E) =', b - e,
' 總和 =', (e - a) + (b - e), ' m*(A) =', b - a)
print('Caratheodory 條件成立:', (e - a) + (b - e) == b - a)
# ---- Lebesgue 測度在可測集上滿足可數可加 ----
print()
print('m([0,1/2]) + m([1/2,1]) =', sp.Rational(1, 2) + sp.Rational(1, 2),
' = m([0,1]) =', sp.Integer(1))
print('m([0,1] ∩ Q) = 0(Q 可數) 但 m([0,1]) = 1 -> 「零測度集」不是「空集」')
# ---- 連續函數:黎曼和的極限 = 勒貝格積分 = sp.integrate 的結果 ----
print()
k = sp.symbols('k', integer=True, positive=True)
Nn = sp.symbols('Nn', integer=True, positive=True)
x = sp.symbols('x', real=True)
R = sp.summation((k / Nn)**2 / Nn, (k, 1, Nn))
print('Riemann 和 =', R)
print('極限 =', sp.limit(R, Nn, sp.oo))
print('勒貝格積分 =', sp.integrate(x**2, (x, 0, 1)))
預期輸出:
被覆蓋的點 = [1/97, 2/97, 3/97, 4/97, 5/97]
各覆蓋區間長度 = [1/200, 1/400, 1/800, 1/1600, 1/3200]
總長 = 31/3200 < eps = 1/100 : True
=> 可數集的外測度 m* = 0(因為 eps 可任意小)
m*(A∩E) = 1/2 m*(A\E) = 1/2 總和 = 1 m*(A) = 1
Caratheodory 條件成立: True
m([0,1/2]) + m([1/2,1]) = 1 = m([0,1]) = 1
m([0,1] ∩ Q) = 0(Q 可數) 但 m([0,1]) = 1 -> 「零測度集」不是「空集」
Riemann 和 = (Nn**3/3 + Nn**2/2 + Nn/6)/Nn**3
極限 = 1/3
勒貝格積分 = 1/3
12.1.4 勒貝格可測函數:把「黎曼和」換成「勒貝格和」#
定義(簡單函數)。若 \(E_1, \dots, E_N\) 可測, \(a_i \in \mathbb{R}\) ,則 \(f = \sum_{i=1}^{N} a_i \mathbf{1}_{E_i}\) 稱為簡單函數,其勒貝格積分定義為 \(\int f \, dm = \sum_{i=1}^{N} a_i \, m(E_i)\) 。注意:這裡「加權求和」的權重是測度而不是「區間長度」。對特徵函數而言 \(\int \mathbf{1}_E \, dm = m(E)\) ,於是勒貝格和就是把黎曼和中的「區間長度」換成「可測集的測度」。
定義(勒貝格可測函數)。 \(f : \mathbb{R} \to \overline{\mathbb{R}}\) 可測,若對每個 \(\alpha\) ,集合 \(\{x : f(x) > \alpha\}\) 都可測。等價地(Lebesgue 的原始定義), \(f\) 可測若對每個 \(\varepsilon > 0\) 存在簡單函數 \(s, t\) 使得 \(s \le f \le t\) 幾乎處處且 \(\int (t - s) \, dm < \varepsilon\) 。這個定義的威力在於「幾乎處處」三個字:只要差異發生在零測度集上,就完全無關紧要。狄利克雷函數正是靠這句話「通過」了可測性的考驗。
對一個有界可測函數,勒貝格積分可以定義為
也就是下 Darboux 和的上確界——與黎曼積分的「上、下 Darboux 和夾擠」相比,差別只在於:黎曼用的分割是均勻網格,勒貝格用的分割是任意可測集。這一步把「網格越細」的拓撲要求徹底去掉了。
我們用一個階梯函數 \(f = \mathbf{1}_{[0,1/2]}\) 把兩種「和」並排比較(在 \([0,1]\) 上取 \(N\) 等分):
| 分割份數 \(N\) | 左端點黎曼和 | 右端點黎曼和 | 中點黎曼和 | 振幅 | 勒貝格和 |
|---|---|---|---|---|---|
| \(4\) | \(\frac{3}{4}\) | \(\frac{1}{2}\) | \(\frac{1}{2}\) | \(\frac{1}{4}\) | \(\frac{1}{2}\) |
| \(16\) | \(\frac{9}{16}\) | \(\frac{1}{2}\) | \(\frac{1}{2}\) | \(\frac{1}{16}\) | \(\frac{1}{2}\) |
| \(64\) | \(\frac{33}{64}\) | \(\frac{1}{2}\) | \(\frac{1}{2}\) | \(\frac{1}{64}\) | \(\frac{1}{2}\) |
黎曼和的振幅隨 \(N \to \infty\) 趨於 \(0\) (所以是黎曼可積的),而勒貝格和完全不依賴分割方式: \(1 \cdot m([0,\frac{1}{2}]) + 0 \cdot m((\frac{1}{2}, 1]) = \frac{1}{2}\) ,永遠如此。
推廣的本質:黎曼積分要求「 \(f\) 在每一個網格小區間上幾乎處處常值」;勒貝格積分要求「 \(f\) 在每一個可測塊上幾乎處處常值」。前者綁死在均勻網格上,後者綁死在測度上。當我們把區間 \([0,1]\) 換成任意測度空間 \((X, \Sigma, \mu)\) 時,勒貝格積分的定義一字不改——這就是它在機率論與函數分析中的無敵地位。
12.1.5 黎曼積分的失效:狄利克雷函數與 fat Cantor 集#
現在讓我們親眼看看「推廣」買到了什麼。
狄利克雷函數#
黎曼積分要求上下 Darboux 和收斂到同一個數。但 \([0,1]\) 的每一個子區間都同時含有有理點與無理點,因此上和恆為 \(1\) 、下和恆為 \(0\) ,所以它不是黎曼可積的。可是它的勒貝格積分存在且等於
SymPy 可以精確地幫我們算出「黎曼和如何隨採樣點選擇而完全不同的兩個值」。
import sympy as sp
def dirichlet(xv):
"""xv 為 sympy 實數:有理回傳 1,無理回傳 0"""
return sp.Integer(1) if xv.is_rational else sp.Integer(0)
def riemann_sum(f, a, b, N, sampler):
h = (b - a) / N
return sp.simplify(sum(f(sampler(a + k * h)) for k in range(N)) * h)
for N in [4, 8, 16]:
r = riemann_sum(dirichlet, sp.Rational(0), sp.Rational(1), N, lambda t: t)
i = riemann_sum(dirichlet, sp.Rational(0), sp.Rational(1), N, lambda t: t + sp.sqrt(2) / 7)
print(f'N={N:3d} 有理採樣的和 = {r} 無理採樣的和 = {i}')
print('黎曼積分:上和 = 1,下和 = 0,永遠不相等 -> 黎曼不可積')
print('勒貝格積分:1*m(Q∩[0,1]) + 0*m([0,1]\\Q) = 1*0 + 0*1 =', sp.Integer(0))
預期輸出:
N= 4 有理採樣的和 = 1 無理採樣的和 = 0
N= 8 有理採樣的和 = 1 無理採樣的和 = 0
N= 16 有理採樣的和 = 1 無理採樣的和 = 0
黎曼積分:上和 = 1,下和 = 0,永遠不相等 -> 黎曼不可積
勒貝格積分:1*m(Q∩[0,1]) + 0*m([0,1]\Q) = 1*0 + 0*1 = 0
fat Cantor 集(Smith–Volterra–Cantor 集):測度為 \(1/2\) 的「到處都是洞」的集合#
狄利克雷函數的例子有點極端(可測但幾乎處處為零)。更有說服力的是 Smith–Volterra–Cantor 集 \(S\) :它閉、到處無內點、測度為 \(\frac{1}{2}\) 。於是指示函數 \(\mathbf{1}_S\) 的黎曼和不收斂(振幅永遠不小於 \(\frac{1}{2}\) ),但勒貝格積分精確等於 \(\frac{1}{2}\) 。
我們用 Fraction 精確構造這個集合,並計算其 Darboux 上下和。
from fractions import Fraction
def svc_intervals(n):
"""Smith-Volterra-Cantor 集:第 n 步之後剩下的閉區間"""
ivs = [(Fraction(0), Fraction(1))]
for k in range(1, n + 1):
gap = Fraction(1, 4 ** k)
new = []
for (a, b) in ivs:
mid = (a + b) / 2
new.append((a, mid - gap / 2))
new.append((mid + gap / 2, b))
ivs = new
return ivs
def darboux(ivs, N):
"""在均勻 N 分割上計算下和與上和(Darboux 逼近)"""
lower = 0.0
upper = 0.0
h = 1.0 / N
for i in range(N):
lo, hi = Fraction(i, N), Fraction(i + 1, N)
hit = False
inside = True
for (a, b) in ivs:
if a < hi and lo < b:
hit = True
if not (a <= lo and hi <= b):
inside = False
if hit:
upper += h
if hit and inside:
lower += h
return lower, upper
print('Smith-Volterra-Cantor 集的剩餘總長(= Lebesgue 測度的近似):')
for n in [1, 3, 8]:
tot = sum(b - a for a, b in svc_intervals(n))
print(f' n={n}: 總長 = {tot} ({float(tot):.6f}) -> 極限 1/2')
print()
for N in [200, 800]:
lo, up = darboux(svc_intervals(10), N)
print(f'均勻 {N} 分割:下和 = {lo:.4f} 上和 = {up:.4f} 振幅 = {up - lo:.4f}')
print('振幅不趨於 0 -> 1_S 不是黎曼可積的;但 Lebesgue 積分 = m(S) = 1/2')
預期輸出:
Smith-Volterra-Cantor 集的剩餘總長(= Lebesgue 測度的近似):
n=1: 總長 = 3/4 (0.750000) -> 極限 1/2
n=3: 總長 = 9/16 (0.562500) -> 極限 1/2
n=8: 總長 = 257/512 (0.501953) -> 極限 1/2
均勻 200 分割:下和 = 0.0000 上和 = 0.6000 振幅 = 0.6000
均勻 800 分割:下和 = 0.0000 上和 = 0.5500 振幅 = 0.5500
振幅不趨於 0 -> 1_S 不是黎曼可積的;但 Lebesgue 積分 = m(S) = 1/2
順帶比較:對標準 Cantor 集(每步去掉中間的 \(1/3\) ),同樣的計算給出上和在 \(N \to \infty\) 時趨於 \(0\) (因為 Cantor 集的測度是 \(0\) ),因此 \(\mathbf{1}_C\) 是黎曼可積的,黎曼積分與勒貝格積分都等於 \(0\) 。 Lebesgue 的判準「可測集上的指示函數黎曼可積 \(\iff\) 邊界測度為零」正是區分這兩個例子的分水嶺。
12.1.6 Fatou 定理、單調收斂定理與控制收斂定理#
有了勒貝格積分,第一個必須回答的問題是:極限與積分能不能交換?
黎曼積分時代的回答是「一般不行」——第 5 章的 \(x^n\) 在 \([0,1]\) 上就是最簡單的反例: \(\int_0^1 x^n \, dx = \frac{1}{n+1} \to 0\) ,但 \(\lim_{n} x^n = 1\) 在 \(x = 1\) 處, \(\int_0^1 1 \, dx = 1\) 。差別是 \(1\) 這「一點」。勒貝格理論用兩種方式把這個「一點」處理掉。
Fatou 引理(1906,Fatou)。若 \(f_n \ge 0\) 可測,則 \(\int \liminf_{n \to \infty} f_n \, dm \le \liminf_{n \to \infty} \int f_n \, dm\) 。
單調收斂定理(Levi, 1906 / Lebesgue)。若 \(0 \le f_1 \le f_2 \le \cdots\) 可測,則 \(f = \lim f_n\) 可測且 \(\int f \, dm = \lim_{n \to \infty} \int f_n \, dm\) 。
控制收斂定理(Lebesgue 的「 Théorème dominated」, 1901)。若 \(f_n \to f\) 幾乎處處,且存在可積函數 \(g \in L^1\) 使 \(|f_n| \le g\) 幾乎處處,則 \(f\) 可積且 \(\int f \, dm = \lim_{n \to \infty} \int f_n \, dm\) 。
Fatou 是不需要額外假設的那個(只要非負),因此它是「控制收斂定理的前提不足時會發生什麼」的最佳指標。讓我們用 SymPy 符號地驗證這三個定理的實例。
import sympy as sp
x = sp.symbols('x', real=True)
n = sp.symbols('n', integer=True, positive=True)
# (1) Fatou:移動尖峰 f_n = n * 1_{(0,1/n)},積分恆為 1,但極限函數幾乎處處為 0
I_move = sp.integrate(n, (x, 0, 1 / n))
print('int f_n =', I_move, ' -> liminf =', sp.limit(I_move, n, sp.oo))
print('int liminf f_n (a.e. 為 0) =', sp.Integer(0), ' <= 1 : Fatou 的不等式嚴格成立')
# (2) 控制收斂:f_n = min(n, 1/sqrt(x)),被可積的 g = 1/sqrt(x) 控制
I1 = sp.integrate(n, (x, 0, 1 / n**2))
I2 = sp.integrate(x**sp.Rational(-1, 2), (x, 1 / n**2, 1))
tot = sp.simplify(I1 + I2)
print()
print('int f_n =', tot, ' -> lim =', sp.limit(tot, n, sp.oo))
print('int g =', sp.integrate(x**sp.Rational(-1, 2), (x, 0, 1)), '(g 可積)')
# (3) 控制收斂:f_n = x^n (1-x),被 x(1-x) 控制
J = sp.simplify(sp.integrate(x**n * (1 - x), (x, 0, 1)))
print()
print('int x^n(1-x) =', J, ' -> lim =', sp.limit(J, n, sp.oo))
print('lim f_n = 0 (a.e.),int lim = 0')
# (4) 單調收斂(遞減版本):f_n = 1 - x^n
K = sp.simplify(sp.integrate(1 - x**n, (x, 0, 1)))
print()
print('int (1 - x^n) =', K, ' -> lim =', sp.limit(K, n, sp.oo))
print('lim f_n = 1 (a.e.),int lim = 1 -> 等號成立')
預期輸出:
int f_n = 1 -> liminf = 1
int liminf f_n (a.e. 為 0) = 0 <= 1 : Fatou 的不等式嚴格成立
int f_n = 2 - 1/n -> lim = 2
int g = 2 (g 可積)
int x^n(1-x) = 1/(n**2 + 3*n + 2) -> lim = 0
lim f_n = 0 (a.e.),int lim = 0
int (1 - x^n) = n/(n + 1) -> lim = 1
lim f_n = 1 (a.e.),int lim = 1 -> 等號成立
這裡有一個值得反覆玩味的事實:移動尖峰 \(f_n = n\,\mathbf{1}_{(0,1/n)}\) 的積分恆為 \(1\) ,而極限函數幾乎處處為零,所以 Fatou 給出 \(0 \le 1\) 的嚴格不等式,控制收斂定理不適用(任何能控制所有 \(f_n\) 的 \(g\) 都必須在 \((0,1/n)\) 上不小於 \(n\) ,對所有 \(n\) 同時成立)。第 12.3 節我們會把這個反例做成「反例搜尋器」。
12.1.7 Fubini 定理與 Tonelli 定理#
二維積分與一維積分的交換,是勒貝格理論的另一個大勝利。
Fubini 定理(1900–1901)。若 \(f(x,y)\) 在 \(X \times Y\) 上可測且 \(\int\int |f| < \infty\) ,則對幾乎所有 \(y\) , \(f(\cdot, y)\) 對 \(x\) 可測且 \(\int_X |f(x,y)|\, dx < \infty\) ,並且
Tonelli 定理。若 \(f \ge 0\) 可測,則上式等式永遠成立(即使兩邊都是 \(+\infty\) )。也就是說:非負函數不需要任何絕對可積性假設就能交換積分。
這兩條定理合起來給出了積分交換的完整判準。我們先看 Fubini 定理在符號計算中的樣子,然後看一個「沒有絕對可積性就會出事」的反例:考慮
這個函數關於 \((x,y) \mapsto (y,x)\) 反對稱,所以在對稱的正方形上 \(\iint f = 0\) 。但是它不是絕對可積的: \(|f|\) 在原點附近的行為像 \(\frac{1}{r^2}\) ,在二維極座標下 \(\int \frac{1}{r^2} r \, dr = \int \frac{dr}{r} = \infty\) 。於是 Fubini 定理不適用,而兩個迭代積分給出不同的答案。
import sympy as sp
import mpmath as mp
x = sp.symbols('x', real=True)
y = sp.symbols('y', real=True)
# (1) 一般的 Fubini:雙重積分先對 x 再對 y
print('int_0^1 int_0^1 (x + y) dx dy =',
sp.integrate(sp.integrate(x + y, (x, 0, 1)), (y, 0, 1)))
# (2) Tonelli:非負函數,兩個順序必然相等
f = sp.exp(x * y)
ix = sp.integrate(sp.integrate(f, (x, 0, 1)), (y, 0, 1))
iy = sp.integrate(sp.integrate(f, (y, 0, 1)), (x, 0, 1))
print('int int e^(xy) 先 x 後 y =', sp.simplify(ix))
print('int int e^(xy) 先 y 後 x =', sp.simplify(iy))
print('兩者相等 :', sp.simplify(ix - iy) == 0)
# (3) 對角線 {y = x} 的截面測度恆為 0,所以它的二維測度為 0
print()
print('對角線 {y = x} 的二維測度 =', sp.Integer(0), ' 而單位正方形的測度 =', sp.Integer(1))
# (4) 沒有絕對可積性時,兩個迭代積分會打架
g = (x**2 - y**2) / (x**2 + y**2)**2
gx = sp.simplify(sp.integrate(sp.integrate(g, (x, 0, 1)), (y, 0, 1)))
gy = sp.simplify(sp.integrate(sp.integrate(g, (y, 0, 1)), (x, 0, 1)))
print()
print('先對 x 積分再對 y :', gx)
print('先對 y 積分再對 x :', gy)
print('兩者相差 =', sp.simplify(gy - gx))
# (5) |g| 的絕對可積性失敗:截去原點附近的正方形後,總量呈對數發散
mp.mp.dps = 20
def num_abs(delta, eps):
h = lambda a, b: abs((a**2 - b**2) / (a**2 + b**2)**2)
return mp.quad(h, [delta, eps], [delta, eps])
print()
for delta in [1e-2, 1e-4, 1e-6, 1e-8]:
val = num_abs(delta, 0.1)
print(f'截去 [0,{delta}] 後的 int int |g| =', mp.nstr(val, 10),
' (pi/4)*log(1/delta) =', mp.nstr(mp.pi / 4 * mp.log(1 / delta), 10))
print('=> |g| 不可積(對數發散),Fubini 的假設不成立,兩個順序自然打架')
預期輸出:
int_0^1 int_0^1 (x + y) dx dy = 1
int int e^(xy) 先 x 後 y = -EulerGamma + Ei(1)
int int e^(xy) 先 y 後 x = -EulerGamma + Ei(1)
兩者相等 : True
對角線 {y = x} 的二維測度 = 0 而單位正方形的測度 = 1
先對 x 積分再對 y : -pi/4
先對 y 積分再對 x : pi/4
兩者相差 = pi/2
截去 [0,0.01] 後的 int int |g| = 0.931104909 (pi/4)*log(1/delta) = 3.616892206
截去 [0,0.0001] 後的 int int |g| = 5.33846241 (pi/4)*log(1/delta) = 7.233784412
截去 [0,1e-06] 後的 int int |g| = 9.939943989 (pi/4)*log(1/delta) = 10.85067662
截去 [0,1e-08] 後的 int int |g| = 14.54121853 (pi/4)*log(1/delta) = 14.46756882
=> |g| 不可積(對數發散),Fubini 的假設不成立,兩個順序自然打架
12.1.8 為什麼非要有測度不可:三條回頭路#
我們在前面三處埋了三個伏筆,現在一起回收。
伏筆一:第 4 章的卡瓦列里原理。 Cavalieri 說「面積 = 截面長度之和」,這其實就是 Tonelli 定理的直覺版。若要把「可數多個截面之和」寫成式子,就必須有一套能對可數個非負量求和而不擔心「無窮減無窮」的裝置——那正是測度。
伏筆二:第 6 章的 Riemann 重排定理。 條件收斂級數可以重排成任意實數,這是「順序會改變答案」的證據。勒貝格積分裡有完全對應的現象:無窮維的積分( \(\int \sum\) 與 \(\sum \int\) )交換的條件,就是第 12.3 節要談的主題。而 Fatou 引理正是「順序與收斂」在積分版本中的定理。
伏筆三:機率論的誕生。 Kolmogorov 在 1933 年的《測度論與概率論基礎》中,用 \((\Omega, \mathcal{F}, P)\) 三元組徹底重寫了機率。「隨機事件的概率」不再是「事件包含所有可能結果的比例」這種直覺說法,而是「測度」。概率論之所以能在二十世紀成為數學的一等公民,正是因為勒貝格提供了精確的語言。
graph LR
A["Lebesgue 1901<br/>可數可加測度"] --> B["Fatou / 控制收斂<br/>極限與積分交換"]
A --> C["Fubini / Tonelli<br/>維度交換"]
A --> D["Kolmogorov 1933<br/>機率的公理化"]
A --> E["Riesz-Fischer 1907<br/>L^p 完備性"]
E --> F["12.2 節:範數與函數空間"]
B --> G["12.3 節:SymPy 驗證交換"]
D --> H["統計與機器學習"]12.1.9 小結#
| 概念 | 定義 | 關鍵人物 / 年份 | SymPy 對應 |
|---|---|---|---|
| Jordan 含量 | 有限多個盒覆蓋的總體積之下確界 | Jordan, 1882 | 需自行實作(見 12.1.1) |
| Lebesgue 外測度 \(m^*\) | 可數多個區間覆蓋之總長的下確界 | Lebesgue, 1901 | 需自行實作(見 12.1.3) |
| Carathéodory 可測 | \(\forall A:\; m^*(A) = m^*(A\cap E) + m^*(A\setminus E)\) | Carathéodory, 1914 | 需自行實作 |
| Vitali 集合 / 選擇公理 | 每個有理差等價類取一代表元;每個集合可良序化 | Vitali 1905 / Zermelo 1908 | 無法直接構造 |
| 勒貝格可測函數 | \(\{x : f(x) > \alpha\}\) 可測( \(\forall \alpha\) ) | Lebesgue, 1901 | sp.integrate |
| 勒貝格和 | \(\sum_i a_i\, m(E_i)\) | Lebesgue, 1901 | sp.summation + m(E_i) |
| Fatou 引理 | \(\int \liminf f_n \le \liminf \int f_n\) | Fatou, 1906 | sp.limit + sp.integrate |
| 單調收斂定理 | \(f_n \uparrow f \Rightarrow \int f_n \uparrow \int f\) | Levi / Lebesgue, 1906 | 同上 |
| 控制收斂定理 | $ | f_n | \le g \in L^1 \Rightarrow \int f_n \to \int f$ |
| Fubini / Tonelli | 絕對可積(或非負)時 \(\int\int = \int\int\) | Fubini 1900 / Tonelli 1909 | sp.integrate 巢狀 |
下一節我們把「函數」本身當成幾何對象來研究:從 Riemann–Roch 定理的「維度有限」世界,走進 ** \(L^p\) 空間**的「無窮維」世界,並在那裡遇見範數、Banach 空間與逼近論。
習題#
習題 12.1.1(Jordan 含量與可數可加) 用 Fraction 精確計算:把 \([0,1]\) 分成 \(n\) 個等長區間,再用這 \(n\) 個區間的端點集合(共 \(n+1\) 個有理數)覆蓋 \([0,1]\) ,求最小總長。再用同樣方法覆蓋 \(\mathbb{Q} \cap [0,1]\) 的前 \(m\) 個有理數,證明總長可以任意小。最後用這兩個結果說明:為什麼 Jordan 含量無法處理「可數分割」。
習題 12.1.2(Vitali 集合的計數論證) 不用建出 Vitali 集合,只用可數可加性寫出完整的矛盾:設 \(V \subset [0,1]\) 且 \([0,1] = \bigcup_{q \in \mathbb{Q} \cap [-1,1]} (V+q)\) 為不相交並。證明 \(m(V)\) 不存在(即 \(V\) 不可測)。提示:分別考慮 \(m(V) = 0\) 與 \(m(V) > 0\) 兩種情形,並注意「可數多個 0 的和」與「可數多個正數的和」在 SymPy 裡分別是 0 與 oo。
習題 12.1.3(Fatou 的必要性:尋找反例) 證明函數 \(f_n(x) = n\,\mathbf{1}_{(0,1/n)}(x)\) 不存在可積控制函數:假設存在可積 \(g \ge |f_n|\) 幾乎處處,則對每個 \(n\) 都有 \(\int g \ge 1\) 。接著構造一個單調的函數序列 \(g_n \uparrow g\) 使得 \(g\) 不可積,用來說明「Fatou 給出的不等式可能永遠是嚴格的」。
習題 12.1.4(Lebesgue 判準的數值驗證) 取三個函數: \(f_1 = \mathbf{1}_{\mathbb{Q}}\) 、 \(f_2 = \mathbf{1}_{S}\) ( \(S\) 為 Smith–Volterra–Cantor 集)、 \(f_3 = \mathbf{1}_{C}\) ( \(C\) 為標準 Cantor 集)。用 sp.integrate 計算它們的勒貝格積分,再用 Darboux 上下和判斷它們是否黎曼可積。整理成一張表,說明 Lebesgue 判準(邊界測度為零 \(\iff\) 黎曼可積)在每一列的驗證方式。
習題 12.1.5(Fubini 與 Tonelli 的界線) 令 \(f(x,y) = \frac{x^2-y^2}{(x^2+y^2)^2}\) 。(a) 驗證兩個迭代積分分別為 \(-\frac{\pi}{4}\) 與 \(\frac{\pi}{4}\) ;(b) 用 mpmath 證明 \(\iint |f| = \infty\) ;(c) 改用非負函數 \(g(x,y) = \frac{|x^2-y^2|}{(x^2+y^2)^2}\) ,說明為什麼 Tonelli 定理即使在兩邊都是 \(+\infty\) 的情況下仍然成立(這說明 Tonelli 的「允許無窮」不是漏洞,而是正確的表述)。