|
7 | 7 |
|
8 | 8 | public import Mathlib.Analysis.Calculus.FDeriv.Basic |
9 | 9 | public import Mathlib.Analysis.Calculus.LipschitzSmooth.Basic |
| 10 | +public import Mathlib.Analysis.Normed.Affine.AddTorsor |
| 11 | +public import Mathlib.Analysis.SpecialFunctions.Integrals.Basic |
| 12 | +public import Mathlib.MeasureTheory.Integral.CurveIntegral.Basic |
10 | 13 |
|
11 | 14 | /-! |
12 | 15 | # Lipschitz smoothness via the Fréchet derivative |
13 | 16 |
|
14 | 17 | Fréchet-derivative restatements of the `LipschitzSmoothWith` predicate. For differentiable |
15 | 18 | `f`, `lineDeriv ℝ f x v = fderiv ℝ f x v` pointwise, and the predicate is equivalent to |
16 | 19 | the corresponding descent inequality stated in `fderiv` form. |
| 20 | +
|
| 21 | +This file also defines the segment-pointwise predicate `LipschitzSmoothOnSegmentWith` and |
| 22 | +proves the **descent lemma**: a differentiable function with `K`-Lipschitz Fréchet derivative |
| 23 | +is `K`-smooth. The proof integrates the segment-pointwise bound along the segment from `x` |
| 24 | +to `y` using the fundamental theorem of calculus. |
17 | 25 | -/ |
18 | 26 |
|
19 | 27 | public section |
@@ -47,3 +55,68 @@ theorem fderiv_sub_apply_le (h : LipschitzSmoothWith K f) (x y : F) |
47 | 55 | exact h.fderiv_apply_sub_le x y hfx hfy |
48 | 56 |
|
49 | 57 | end LipschitzSmoothWith |
| 58 | + |
| 59 | +/-! ### Descent lemma -/ |
| 60 | + |
| 61 | +open AffineMap MeasureTheory |
| 62 | + |
| 63 | +/-- The pointwise Lipschitz-smoothness bound on the Fréchet derivative along the segment from |
| 64 | +`x` to `y`: `(fderiv ℝ f z - fderiv ℝ f x) (y - x) ≤ K · dist x z · dist x y` for all |
| 65 | +`z ∈ [x -[ℝ] y]`. This is the segment-pointwise form that integrates to the descent inequality. -/ |
| 66 | +abbrev LipschitzSmoothOnSegmentWith (K : NNReal) (f : F → ℝ) : Prop := |
| 67 | + ∀ x y : F, ∀ z ∈ segment ℝ x y, |
| 68 | + (fderiv ℝ f z - fderiv ℝ f x) (y - x) ≤ ↑K * dist x z * dist x y |
| 69 | + |
| 70 | +/-- A `K`-Lipschitz Fréchet derivative implies the segment-pointwise smoothness bound: |
| 71 | +`(fderiv ℝ f z - fderiv ℝ f x) (y - x) ≤ K · dist x z · dist x y` for every `z ∈ [x -[ℝ] y]`. |
| 72 | +The argument is Cauchy-Schwarz / `le_opNorm` plus the Lipschitz bound at the pair `(z, x)`. -/ |
| 73 | +theorem LipschitzSmoothOnSegmentWith.of_lipschitzWith_fderiv |
| 74 | + (hL : LipschitzWith K (fderiv ℝ f)) : LipschitzSmoothOnSegmentWith K f := fun x y z _ => |
| 75 | + calc (fderiv ℝ f z - fderiv ℝ f x) (y - x) |
| 76 | + ≤ ‖fderiv ℝ f z - fderiv ℝ f x‖ * ‖y - x‖ := |
| 77 | + (Real.le_norm_self _).trans (ContinuousLinearMap.le_opNorm _ _) |
| 78 | + _ = dist (fderiv ℝ f x) (fderiv ℝ f z) * dist x y := by repeat rw [← dist_eq_norm'] |
| 79 | + _ ≤ ↑K * dist x z * dist x y := mul_le_mul_of_nonneg_right (hL.dist_le_mul _ _) dist_nonneg |
| 80 | + |
| 81 | +/-- For a segment-pointwise Lipschitz-smooth function with continuous Fréchet derivative, the |
| 82 | +curve integral of `fderiv ℝ f z - fderiv ℝ f x` along the segment from `x` to `y` is bounded |
| 83 | +by `K/2 · (dist x y)²`. The quantitative FTC step of the descent lemma. -/ |
| 84 | +theorem LipschitzSmoothOnSegmentWith.curveIntegral_le |
| 85 | + (h : LipschitzSmoothOnSegmentWith K f) (hcont : Continuous (fderiv ℝ f)) (x y : F) : |
| 86 | + ∫ᶜ z in .segment x y, (fderiv ℝ f z - fderiv ℝ f x) ≤ ↑K / 2 * (dist x y) ^ 2 := |
| 87 | + calc ∫ᶜ z in .segment x y, (fderiv ℝ f z - fderiv ℝ f x) |
| 88 | + _ = ∫ t in 0..1, (fderiv ℝ f (lineMap x y t) - fderiv ℝ f x) (y - x) := |
| 89 | + curveIntegral_segment _ _ _ |
| 90 | + _ ≤ ∫ t in 0..1, ↑K * (dist x y) ^ 2 * t := |
| 91 | + intervalIntegral.integral_mono_on (by norm_num) |
| 92 | + (curveIntegrable_segment.mp <| |
| 93 | + (hcont.curveIntegrable_segment).sub (curveIntegrable_segment_const _ x y)) |
| 94 | + (Continuous.intervalIntegrable (by fun_prop) _ _) (fun t ht => |
| 95 | + (h _ _ _ (segment_eq_image_lineMap ℝ x y ▸ Set.mem_image_of_mem _ ht)).trans_eq <| by |
| 96 | + rw [dist_left_lineMap, Real.norm_of_nonneg ht.1]; ring) |
| 97 | + _ = ↑K * (dist x y) ^ 2 * ∫ t in 0..1, t := intervalIntegral.integral_const_mul _ _ |
| 98 | + _ = ↑K / 2 * (dist x y) ^ 2 := by rw [integral_id]; ring |
| 99 | + |
| 100 | +/-- The segment-pointwise smoothness bound, together with differentiability and continuity of |
| 101 | +the Fréchet derivative, implies `K`-smoothness. The proof integrates the pointwise bound |
| 102 | +`K · dist x z · dist x y` along the segment from `x` to `y` using FTC. -/ |
| 103 | +theorem LipschitzSmoothOnSegmentWith.lipschitzSmoothWith |
| 104 | + (hptwise : LipschitzSmoothOnSegmentWith K f) (hf : Differentiable ℝ f) |
| 105 | + (hcont : Continuous (fderiv ℝ f)) : LipschitzSmoothWith K f := by |
| 106 | + refine lipschitzSmoothWith_iff_lineDeriv.mpr fun x y => ?_ |
| 107 | + have := calc f y - f x - lineDeriv ℝ f x (y - x) |
| 108 | + _ = f y - f x - (fderiv ℝ f x) (y - x) := by rw [(hf x).lineDeriv_eq_fderiv] |
| 109 | + _ = (∫ᶜ z in .segment x y, fderiv ℝ f z) - ∫ᶜ _ in .segment x y, fderiv ℝ f x := by |
| 110 | + rw [← curveIntegral_fderiv_segment (fun z _ => hf z) hcont.continuousOn, |
| 111 | + ← curveIntegral_segment_const] |
| 112 | + _ = ∫ᶜ z in .segment x y, (fderiv ℝ f z - fderiv ℝ f x) := |
| 113 | + (curveIntegral_fun_sub (hcont.curveIntegrable_segment) |
| 114 | + (curveIntegrable_segment_const _ x y)).symm |
| 115 | + _ ≤ ↑K / 2 * dist x y ^ 2 := hptwise.curveIntegral_le hcont x y |
| 116 | + linarith |
| 117 | + |
| 118 | +/-- **Descent lemma.** If `f` is differentiable and its Fréchet derivative is |
| 119 | +`K`-Lipschitz, then `f` is `K`-smooth (without convexity assumption). -/ |
| 120 | +theorem Differentiable.lipschitzSmoothWith_of_lipschitzWith |
| 121 | + (hf : Differentiable ℝ f) (hL : LipschitzWith K (fderiv ℝ f)) : LipschitzSmoothWith K f := |
| 122 | + (LipschitzSmoothOnSegmentWith.of_lipschitzWith_fderiv hL).lipschitzSmoothWith hf hL.continuous |
0 commit comments