08.4 專案:Taylor 定理#
本節目標#
- 敘述含 Lagrange 餘項的 Taylor 定理。
- 理解其證明策略:對餘項函數反覆套用 Rolle 定理。
- 在 Lean 中搭建可執行的骨架,並討論 Mathlib 相關設施 (
HasFTaylorSeriesUpTo、IntervalIntegrable、多重可微的設定)。 - 應用:用 \(e^x\) 與 \(\sin x\) 的泰勒多項式做函數逼近。
Taylor 定理#
設 \(f\) 在 \([a, b]\) 上有 \(n+1\) 階連續導數、在 \((a, b)\) 上有 \(n+1\) 階導數, \(x_0 \in [a, b]\) , \(x \in [a, b]\) 、 \(x \neq x_0\) 。則存在 \(c\) 介於 \(x_0\) 與 \(x\) 之間,使
最後一項稱為 Lagrange 餘項。 \(n = 0\) 的情形恰是 MVT(第 8.2 節)—— Taylor 定理可以看作 MVT 的高階推廣,這不是巧合,證明也正是同一套路。
證明策略:重複 Rolle#
經典證明(Cauchy 的構造):
- 固定 \(x\) 與 \(x_0\) ,定義輔助函數
它把「以 \(t\) 為展開點的 \(n\) 階泰勒多項式」從 \(f(x)\) 中扣掉。
-
直接計算可發現望遠鏡結構: \(g(x) = 0\) 、 \(g(x_0) = R_n\) (餘項), 且 \(g'\) 恰好是 \(g\) 的同型表達式把 \(n\) 換成 \(n - 1\) 。
-
對 \(g\) 套 Rolle: \(g'\) 在 \(x\) 與 \(x_0\) 之間有零點;對 \(g'\) 再套 Rolle…… 反覆 \(n+1\) 次後,得到一點 \(c\) 使 \(g^{(n+1)}(c) = 0\) 。
-
解開 \(g^{(n+1)}(c) = 0\) ,就得到 \(R_n = \frac{f^{(n+1)}(c)}{(n+1)!}(x - x_0)^{n+1}\) 。
整個證明的引擎就是 Rolle 定理加代數望遠鏡——第 8.2、8.3 節的主題在此匯流。
Mathlib 的現狀:誠實說明#
在動手之前必須告訴讀者:Mathlib 對 Taylor 定理的正式化走的是「形式冪級數」 路線,核心設施是:
HasFTaylorSeriesUpTo n f F: \(f\) 擁有一個到 \(n\) 階的泰勒級數 \(F\) ( \(F\) 是一個把階數映到多重線性型序列的對象)。AnalyticAt、taylorWithin系列:解析函數的泰勒係數與收斂性。- Mathlib 中有「用泰勒多項式逼近」的結果(如
Convex.norm_le_of_taylor...一類的餘項估計、AnalyticAt.taylor系列),但一維 Lagrange 餘項形式 (如上節末尾的顯式 \(c\) )並沒有以一個方便的引理直接提供。
因此本節的專案定位是:自己動手,把 Lagrange 餘項的骨架立起來。 這正是最好的練習——你會用上本章全部工具:HasDerivAt、Rolle、IntervalIntegrable。
骨架:逐步把 sorry 換成證明#
我們證 \(n = 0\) 的情形(即 MVT 的導數形式),這是完整定理的最小基因。 骨架如下;每一個 sorry 都標註了提示,讀者可依提示逐一填補。
open Real
/-- Lagrange 餘項的最小情形:f(x) = f(x₀) + f'(c)(x - x₀)。 -/
theorem taylor_lagrange_zero (f : ℝ → ℝ) (x₀ x : ℝ) (hx : x₀ < x)
(hcont : ContinuousOn f (Icc x₀ x))
(hdiff : ∀ t ∈ Ioo x₀ x, DifferentiableAt ℝ f t) :
∃ c ∈ Ioo x₀ x, f x = f x₀ + deriv f c * (x - x₀) := by
-- 第一步:化約到 slope 形式,直接引用 MVT
obtain ⟨c, hc, hcslope⟩ :=
exists_slope_eq_deriv (fun t ht => (hdiff t ht).derivWithin (Ioo_diff _ _)) hx
refine ⟨c, hc, ?_⟩
-- 第二步:整理 slope 成 f x = f x₀ + f' c * (x - x₀)
rw [slope, div_eq_iff (sub_ne_zero_of_ne (ne_of_lt hx))] at hcslope
linarith [hcslope]
往上加階數時,核心輔助步驟是「輔助函數的導數具有望遠鏡結構」。 先在純代數層把它敲定:
open Real
-- 望遠鏡恆等式(代數層):n = 1 時輔助函數導數的關鍵項
example (x t f₀ f₁ f₂ : ℝ) :
deriv (fun s => f₀ + f₁ * (s - x) + f₂ * (s - x) ^ 2 / 2) t
= f₁ + f₂ * (t - x) := by
simp [deriv_add, deriv_pow] -- 提示:deriv_pow、deriv_const_mul,最後 ring_nf
ring
一般 \(n\) 時,把「多項式求導會把 \(\frac{f^{(k)}(t)}{k!}(x-t)^k\) 項轉化為 \(\frac{f^{(k+1)}(t)}{k!}(x-t)^k\) 與 \(\frac{f^{(k)}(t)}{(k-1)!}(x-t)^{k-1}\) 兩塊, 而這兩塊在總和中相鄰、恰好相消」這件事用 Finset.sum 的望遠鏡引理 (Finset.sum_range_succ' 一族)整理。這是骨架中最花工的部分,但每一步 都是純代數:simp、ring、sum_range 系列。
完整的遞迴結構如下(保留 sorry 的專案骨架):
open Real
/-- 對可 n 次微分的 f,Lagrange 餘項定理(骨架版)。 -/
theorem taylor_lagrange (f : ℝ → ℝ) (n : ℕ) (x₀ x : ℝ) (hx : x₀ < x)
(hdiff : ContDiffOn ℝ n f (Icc x₀ x))
(hdiffO : ∀ t ∈ Ioo x₀ x, DifferentiableAt ℝ (iteratedDerivWithin n f) t) :
∃ c ∈ Ioo x₀ x,
|f x - (∑ k in Finset.range (n + 1),
(iteratedDerivWithin k f x₀) / (k.factorial : ℝ) * (x - x₀) ^ k)|
≤ |(iteratedDerivWithin (n + 1) f c) / ((n + 1).factorial : ℝ)| * (x - x₀) ^ (n + 1) := by
sorry -- 第一步:n = 0 已在上面的定理完成;一般情形照「重複 Rolle」策略歸納
建議的攻關順序:
- 把
taylor_lagrange_zero的每個fun_prop/ 化約步驟跑通(無 sorry)。 - 證 \(n = 1\) :輔助函數 \(g(t) = f(x) - f(t) - f'(t)(x-t)\) ,計算 \(g(x_0) =\) 餘項、 \(g(x) = 0\) 、 \(g'(t) = -f''(t)(x - t)\) (這裡
ring立大功), 對 \(g\) 套 Rolle 再對 \(g'\) 套一次 Rolle 或 MVT。 - 一般 \(n\) :歸納 + 望遠鏡和整理。若時間有限,至少完成到 \(n = 2\) , 你就已經親手走完 Cauchy 證明的精華。
應用: \(e^x\) 與 \(\sin x\) 的逼近#
有了餘項估計,逼近論證的模式是固定的:
** \(e^x\) **: \(f^{(k)} = e^x\) 全相同,取 \(x_0 = 0\) 得
當 \(x \in [0, 1]\) 時 \(e^c \le e < 3\) ,故餘項 \(\le \frac{3}{(n+1)!}\) , 衰減極快。Mathlib 中 \(e^x\) 的級數表示是 Real.exp_eq_exp_ceil? 正確引理是 Real.exp_eq_taylor_sum 一族( \(e^x\) 的級數定義即泰勒級數, 見 Real.exp_series / Real.exp_eq_sum;以版本查證為準)。
** \(\sin x\) **:導數循環 \(\sin \to \cos \to -\sin \to -\cos \to \sin\) , 故所有導數絕對值 \(\le 1\) ,餘項 \(\le \frac{|x|^{n+1}}{(n+1)!}\) —— 這正是 Mathlib 中 Real.sin_eq_sin_... 與 FormalMultilinearSeries 路線 共用的核心估計:對有界導數的函數,泰勒餘項由 \(|x|^{n+1}/(n+1)!\) 控制。 取 \(n = 5\) 、 \(x = 1\) ,誤差已小於 \(1/720\) ;這就是計算器算 \(\sin\) 的原理。
open Real
-- 骨架:n 階泰勒逼近的誤差控制(以 sin 為例)
example (n : ℕ) (x : ℝ) (hxb : |x| ≤ 1) :
|sin x - (∑ k in Finset.range (2 * n + 2),
(iteratedDerivWithin k sin 0) / (k.factorial : ℝ) * x ^ k)|
≤ 1 / ((2 * n + 2).factorial : ℝ) := by
sorry -- 提示:|sin 的各階導數| ≤ 1 + Lagrange 餘項
專案反思#
- 定理的層次感:Rolle → MVT → FTC → Taylor,每一層都以上一層為引擎。 在 Lean 中走一遍,比在紙上更清楚依賴方向。
- Mathlib 的一般性代價:
HasFTaylorSeriesUpTo那套多重線性型設施 在高維無所不能,但對一維教學場景偏重。自己立一維骨架是合理的學習路徑, 也讓你體會「為什麼 Mathlib 要那樣設計」。 - ** sorry 不是失敗**:把大定理切成能各自攻克的
sorry,是 Lean 專案的 標準工作流。每填掉一個,依賴圖就縮小一圈。 - 版本意識:
iteratedDerivWithin、taylorWithin、intervalIntegral家族的名稱近兩年都有變動。本節引理名以 Mathlib 2024–2026 主線為準, 請養成用exact?、Mathlib 文件站查證的習慣。
小結與練習#
本節要點:
- Taylor 定理 = MVT 的高階版;Lagrange 餘項由「重複 Rolle + 望遠鏡代數」產生。
- Mathlib 的 Taylor 設施走形式冪級數路線(
HasFTaylorSeriesUpTo、AnalyticAt), 一維 Lagrange 餘項值得自己立骨架。 - 骨架工作流:最小情形( \(n=0\) )→ 望遠鏡恆等式 → 歸納補全。
- 逼近應用的萬用模板:導數有界 \(\Rightarrow\) 餘項 \(\le \frac{M |x|^{n+1}}{(n+1)!}\) 。
練習:
- 完成
taylor_lagrange_zero中被化約的細節,確保整段程式無sorry編譯通過。 - 證明 \(n = 1\) 的 Lagrange 餘項:對 \(g(t) = f(x) - f(t) - f'(t)(x - t)\) ,證 \(g'(t) = -f''(t)(x - t)\) (需 \(f\) 兩階可微),再套兩次 Rolle。
- 用 \(e^x\) 的餘項估計證明:對 \(x \in [0, 1]\) , \(e\) 與 \(\sum_{k=0}^{10} \frac{1}{k!}\) 的差小於 \(\frac{3}{11!}\) 。
- 查證你的 Mathlib 版本中
HasFTaylorSeriesUpTo的定義, 用一句話向自己解釋 \(F\ 0\) 、 \(F\ 1\) 各代表什麼。