§26-1  Stone 逼近定理

多項式能逼近所有連續函數,可是它憑什麼?如果把「多項式」這個身分整個拿掉,剩下哪些條件才是真正起作用的?

多項式到底哪裡特別

調色師要配出任何一種顏色,靠的不是收集幾百罐現成的漆,而是幾罐基本色加上「可以任意比例混合」這件事。真正決定辦不辦得到的,是手上這組顏料的結構,不是它們各自叫什麼名字。

§24 的結論是:閉區間上的連續函數全部逼得近多項式。可是回頭想想,多項式憑什麼?它們不是唯一結構簡單的函數——三角函數、指數函數、折線函數都很簡單,其中哪些也辦得到?

本節的第一個定理給出一個出人意料的答案:真正起作用的完全不是「多項式」這個身分。只要一族函數滿足兩個結構性的條件,它就逼得近所有連續函數,而那兩個條件與多項式的代數性質毫無關係。

更值得留意的是,這一篇的證明完全不引用 §24 的任何逼近定理——它從零開始,靠的只有 compact 與兩次挑有限子族。

LEMMA · 兩個函數的 sup 與 inf
For real-valued f, g on D define
  h(x) = sup {f(x), g(x)},  k(x) = inf {f(x), g(x)}.
If f and g are continuous on D, then so are h and k.
兩個函數逐點取較大者得到的新函數仍然連續。理由是一條看起來像戲法的恆等式:兩個數的較大者可以用加法、減法與絕對值寫出來,而這三件事都保連續。
正例:f(x) = x 與 g(x) = −x 的逐點較大者是 |x|,確實連續(雖然在原點有尖角)。反例:連續不能換成可微之類更強的性質——同一組 f、g 都是最平滑不過的直線,取較大者卻在原點折了一個角。
PROOF
Proof.  For real numbers a, b one has
  sup {a, b} = ½(a + b + |a − b|),
  inf {a, b} = ½(a + b − |a − b|).
Hence h = ½(f + g + |f − g|) and k = ½(f + g − |f − g|), and continuity follows from 20.6 and 20.7.
這一格是例行核對,可是恆等式本身值得驗一次。設 a ≥ b,則 |a − b| = a − b,右邊成了 ½(a + b + a − b) = a,正是較大者;a < b 時 |a − b| = b − a,右邊成了 b。兩種情形各驗一次就完備了。之後 20.6 管加減與純量倍、20.7 管絕對值,串起來就是結論。
逐點取大取小不破壞連續。∎
交點處折一個角 粗線是逐點取較大者

這張圖在說引理的內容與它的邊界:兩條淺色直線逐點取較大者,得到的粗線仍然連續——這正是引理保證的事。可是它在交點處折了一個角,說明取大取小只保住連續,保不住更平滑的性質。往後兩篇都要靠這條引理把「拼接」變成合法的動作。

26.1  STONE APPROXIMATION THEOREM
Let K be a compact subset of ℝᵖ containing at least two points, and let ℒ be a collection of continuous real-valued functions on K such that
(a)  f, g ∈ ℒ implies sup {f, g} ∈ ℒ and inf {f, g} ∈ ℒ;
(b)  for any a, b ∈ ℝ and any two distinct x, y ∈ K there is f ∈ ℒ with f(x) = a and f(y) = b.
Then every continuous real-valued function on K can be uniformly approximated on K by members of ℒ.
兩個條件的分工很清楚:(b) 說這一族「調得動」——任意指定兩點的值都做得到;(a) 說這一族「拼得起來」——逐點取大取小之後還在族內。有了這兩件事,任何連續函數都追得上,而定理完全沒有提到加法或乘法。「至少兩點」這個前提不可省,理由見下面的提醒。
正例:K = [0, 1] 上所有連續的折線函數。(a) 成立(兩條折線逐點取大仍是折線),(b) 成立(過兩點的直線就是一條折線),於是 26.1 一句話重新證出 24.5——而且定義域可以換成 ℝ 的任意 compact 子集。反例:(b) 少不得——只取常數函數的那一族滿足 (a),卻連 f(x) = x 都逼不近。
「至少兩點」不是形式上的補充:K 只有一個點時 (b) 是空洞成立的——沒有兩個相異點可以指定,於是條件什麼都沒要求,定理隨之失效。取 K = {0} 與 ℒ = {零函數}:(a) 成立(零函數與自己取大取小還是自己),(b) 空洞成立,可是常數函數 F ≡ 1 與 ℒ 中唯一的成員相差恆為 1,逼不近。空洞成立的條件買不到任何東西——這是「存在型」條件在退化情形下的典型陷阱,遇到「任兩個相異的⋯」這種措辭時值得回頭確認集合真的有兩個元素。
PROOF

固定一個連續的 F 與一個 ε > 0。目標是在 ℒ 中造出一個 h,使得 K 上處處有 F − ε < h < F + ε。

證明計畫 · 由所求想起
所求是同時滿足下界與上界的一個函數,而 (b) 一次只調得動兩個點。分兩輪,每輪用一次 compact。
第一輪固定一個 x:對每個 y 各造一個在 x、y 兩點與 F 吻合的函數,它在 y 附近不會低於 F − ε;把這些「不會太低」的區域挑成有限個,取 sup 就得到一個在整個 K 上都不太低的 h_x,而且它在 x 仍與 F 吻合。
第二輪讓 x 動:h_x 在 x 附近不會高於 F + ε;同樣挑成有限個,取 inf。取 inf 保住了「不太低」(每個都不太低),也換來了「不太高」(總有一個管得到當下這一點)。

Proof.  For each pair x, y ∈ K choose g_{xy} ∈ ℒ with g_{xy}(x) = F(x) and g_{xy}(y) = F(y): when y ≠ x this is (b) applied directly, and when y = x pick any z ∈ K with z ≠ x — one exists since K has at least two points — and let g_{xx} be the function (b) gives for the pair x, z with values F(x), F(z). Since g_{xy} − F is continuous and vanishes at y, there is an open neighborhood U(y) of y with
  g_{xy}(z) > F(z) − ε  for z ∈ K ∩ U(y).
這一步的所求:把「兩點吻合」升級成「一小片區域不會太低」。做這件事的是連續本身——g_{xy} − F 在 y 取值 0,而 0 > −ε,所以在 y 附近它仍然大於 −ε(把 20.2(b) 用在這個差函數上即可)。y = x 那一格必須單獨交代:(b) 只管相異的兩點,可是下一步要讓 y 跑遍整個 K(包括 x 自己),少了它 x 附近就沒有任何一塊 U(y) 蓋得到。要留意這裡只用到 y 那一點的吻合,x 那一點的吻合是留給後面用的。
Fixing x and letting y range over K, the sets U(y) cover K; by compactness finitely many suffice, say U(y₁), ⋯, U(y_n). Put h_x = sup {g_{xy₁}, ⋯, g_{xy_n}}, which lies in ℒ by (a). Then h_x(z) > F(z) − ε for every z ∈ K, and h_x(x) = F(x).
這一步是第一輪的收網。取 sup 之所以保住「不太低」,是因為只要其中一個成員在該點不太低就夠了——而每個 z 都落在某個 U(y_i) 裡,那一個成員正好管得到它。有限這件事在兩處付利息:(a) 只保證有限多個取 sup 仍在族內,而「有限個之中總有一個管得到」也才推得出來。最後 h_x(x) = F(x) 是因為每個 g_{xy_i} 在 x 都取 F(x),一堆相同的數取 sup 還是它自己——這裡兌現了上一步刻意保留的那個吻合。
Since h_x − F is continuous and vanishes at x, there is an open V(x) with h_x(z) < F(z) + ε for z ∈ K ∩ V(x). Compactness again gives V(x₁), ⋯, V(x_m) covering K; put h = inf {h_{x₁}, ⋯, h_{x_m}} ∈ ℒ.
這一步是第二輪,結構與第一輪對稱。兩輪的方向剛好相反:第一輪造的是「處處不太低、某一點吻合」,第二輪要把「某一點吻合」擴散成「處處不太高」,所以這次要取 inf——因為只要有一個成員在該點不太高,inf 就不太高。要留意 V(x) 依賴 x,所以第一輪必須先完成、把 h_x 造好,第二輪才有東西可以挑。
For z ∈ K: every h_{x_j} satisfies h_{x_j}(z) > F(z) − ε, hence so does their infimum; and z lies in some V(x_j), so h(z) ≤ h_{x_j}(z) < F(z) + ε. Therefore |h(z) − F(z)| < ε for all z ∈ K.
這一步結案,把兩個方向各收一次。下界靠「全部都不太低」(取 inf 之後仍然不太低),上界靠「至少一個不太高」(取 inf 之後被那一個壓住)——兩種論證方式恰好相反,而 inf 同時吃得下。這正是整個證明先取 sup 再取 inf 的理由:sup 那一輪把下界推廣到全體,inf 那一輪把上界推廣到全體,而每一輪都不破壞前一輪的成果。
調得動、拼得起來,就逼得近。∎
F F − ε 逐點取較大者 合起來處處高過 F − ε

這張圖在說第一輪的機制:三條淺色曲線各自只在某一小段高過虛線(F − ε),單獨看都不合格。逐點取較大者之後,每一點都由當時最高的那一條負責,於是整條都高過虛線。這一步能成立的關鍵是「有限」——只有有限多條時才保證每一點都找得到負責的那一條,而 compact 正是用來把無限多條裁成有限多條的。

例 1折線函數:一句話重證 §24 的定理
26.1 的兩個條件很抽象。拿一族具體的函數逐條檢查,看看它換到了什麼。
  1. 取 K ⊆ ℝ 為任意至少有兩點的 compact 集合(單點時常數函數自己就逼得準,用不到定理),ℒ 為所有連續折線函數在 K 上的限制(折線函數的定義見 §24-2)。
  2. 驗 (a):兩條折線逐點取較大者仍是折線——兩條直線在每一段上至多交會一次,把交點加進分界點清單即可;連續由上面那條引理保證。取較小者同理。
  3. 驗 (b):給 x ≠ y 與 a、b,過 (x, a) 與 (y, b) 的那條直線就是一個合格的折線函數(分界點清單只有兩端)。
  4. 兩條都過,26.1 直接交出結論:ℝ 的任意 compact 子集上的連續函數,都可以被連續折線均勻逼近。這比 24.5 更強——那裡的定義域限定是閉區間。
  5. 對照兩個證明的成本:24.5 要先引用均勻連續定理、再手工挑分界點;這裡兩行驗完條件就結束。代價是 26.1 的證明本身把工作做完了,而它的兩輪 compact 論證並不比 24.5 簡單。
  6. 再看一族失敗的:只取常數函數。(a) 成立(兩個常數取大取小仍是常數),(b) 失敗(常數在兩點取同一個值,指定不同的 a、b 就做不到)。而它確實逼不近 f(x) = x 於 [0, 1]——任何常數 c 與它的最大差至少是 ½。
第 6 步點出 (b) 的角色:它是「這一族有沒有足夠的解析度」的檢查。一族函數若在某兩點上永遠取相同的值,它就分辨不出那兩點,自然逼不近會分辨它們的函數。下一篇會把 (b) 換成三個更容易檢查的代數條件,而檢查的核心仍然是同一件事。
定義域可以是兩段 折線照樣追得上

這張圖在說例 1 比 24.5 強在哪裡:定義域是兩段分開的閉區間(合起來仍然 compact),而 24.5 的敘述只涵蓋單一個閉區間。26.1 完全不管定義域長什麼形狀,只要它 compact;折線函數在每一段上各自貼近目標,中間的空白不必理會。這種「定義域不必連通」的自由,正是把條件抽象化之後換來的。

—— 第一階段到此結束 ——

本篇的主角是 26.1:一族連續函數只要「調得動任意兩點的值」與「逐點取大取小之後還在族內」,就逼得近所有連續函數。證明分兩輪,各用一次 compact——第一輪取 sup 把下界推廣到全體,第二輪取 inf 把上界推廣到全體,而取 inf 不破壞第一輪的成果。整段論證完全沒有用到§24 的任何逼近定理,也沒有提到加法或乘法。例 1 用折線函數重證並加強了 24.5。起來走走,下一篇把條件 (a) 換成三個代數條件——那時多項式才會重新登場,而且是以工具而非主角的身分。