Documentation

LeanPool.PLAcceleratedNesterovLean.Convergence.CurvAbsorb.Assembly

Curvature Absorption Assembly #

Standalone proof that the curvature + projector-freezing perturbation is absorbable. Extracted from the main theorem to keep its proof term small (avoids kernel slowdown).

The key idea: Dπ is continuous at m⋆, so for small enough R, all perturbation terms are O(ε₁ · Ln) with ε₁ = sup ‖Dπ-P‖ → 0.

theorem PLAcceleratedNesterovLean.curv_absorb_assembly {d : ℕ} (f : EuclideanSpace ℝ (Fin d) → ℝ) (L : NNReal) (hL : 0 < ↑L) (μ' : ℝ) (hμ' : 0 < μ') (θ : ℝ) (hθ_pos : 0 < θ) (η ρ : ℝ) (hη_pos : 0 < η) (hμη_lt1 : μ' * η < 1) (hρ_eq : ρ = (1 - √(μ' * η)) / (1 + √(μ' * η))) (S : Set (EuclideanSpace ℝ (Fin d))) (π : EuclideanSpace ℝ (Fin d) → EuclideanSpace ℝ (Fin d)) (P : EuclideanSpace ℝ (Fin d) →L[ℝ] EuclideanSpace ℝ (Fin d)) (hP_ortho : ∀ (v : EuclideanSpace ℝ (Fin d)), ‖v‖ ^ 2 = ‖P v‖ ^ 2 + ‖v - P v‖ ^ 2) (mstar : EuclideanSpace ℝ (Fin d)) (hmstar : mstar ∈ S) (hP_eq : P = fderiv ℝ π mstar) (U_plus : Set (EuclideanSpace ℝ (Fin d))) (hU_open : IsOpen U_plus) (hm_in : mstar ∈ U_plus) (U : Set (EuclideanSpace ℝ (Fin d))) (hU_isopen : IsOpen U) (hU_sub : closure U_plus ⊆ U) (hf_lip : LipschitzOnWith L (gradient f) U) (hS_sub_U : S ⊆ U) (hmstar_U : mstar ∈ U) (hπ_on_U : ∀ x ∈ U, π x ∈ S ∧ dist x (π x) = Metric.infDist x S) (hDπ_cont : ContinuousAt (fun (x : EuclideanSpace ℝ (Fin d)) => fderiv ℝ π x) mstar) (C_coer : ℝ) (hC_coer : 0 < C_coer) (hcoer_bound : ∀ (x₁ : EuclideanSpace ℝ (Fin d)) (n : ℕ), (nesterovSeq f η ρ x₁ n).x ∈ U_plus → (nesterovSeq f η ρ x₁ n).lookahead η ∈ U_plus → ‖(nesterovSeq f η ρ x₁ n).v‖ ^ 2 + μ' * ‖normalDisp π f η ρ x₁ n‖ ^ 2 ≤ C_coer * lyapunov P μ' π f η ρ x₁ n) (hπ_kills_normal : ∀ x ∈ U_plus, (fderiv ℝ π (π x)) (x - π x) = 0) (hgrad_zero : ∀ x ∈ S, gradient f x = 0) (hπ_diff_near : ∃ δ_diff > 0, ∀ z ∈ Metric.ball mstar δ_diff, DifferentiableAt ℝ π z) :
∃ (R_abs : ℝ), 0 < R_abs ∧ ∀ (x₁ : EuclideanSpace ℝ (Fin d)) (n : ℕ), (nesterovSeq f η ρ x₁ n).x ∈ Metric.ball mstar R_abs → (nesterovSeq f η ρ x₁ n).lookahead η ∈ Metric.ball mstar R_abs → lyapunov P μ' π f η ρ x₁ n ≤ R_abs ^ 2 → have sn := nesterovSeq f η ρ x₁ n; have gn := gradient f (sn.lookahead η); have en := sn.lookahead η - π (sn.lookahead η); have ξn := curvatureError (⇑P) π f η ρ x₁ n; have un1 := auxVar P μ' π f η ρ x₁ (n + 1); have wn := un1 - √μ' • ξn; have δ_curv := √μ' * inner ℝ wn ξn + √μ' ^ 2 / 2 * ‖ξn‖ ^ 2; have a := √(μ' * η); have Ln := lyapunov P μ' π f η ρ x₁ n; have proj_err := a * |inner ℝ gn (P en)|; δ_curv + proj_err ≤ θ * a * Ln

A uniform curvature-absorption radius for Nesterov sequences with zero initial velocity.

theorem PLAcceleratedNesterovLean.curv_absorb_assembly_gen {d : ℕ} (f : EuclideanSpace ℝ (Fin d) → ℝ) (L : NNReal) (hL : 0 < ↑L) (μ' : ℝ) (hμ' : 0 < μ') (θ : ℝ) (hθ_pos : 0 < θ) (η ρ : ℝ) (hη_pos : 0 < η) (hμη_lt1 : μ' * η < 1) (hρ_eq : ρ = (1 - √(μ' * η)) / (1 + √(μ' * η))) (S : Set (EuclideanSpace ℝ (Fin d))) (π : EuclideanSpace ℝ (Fin d) → EuclideanSpace ℝ (Fin d)) (P : EuclideanSpace ℝ (Fin d) →L[ℝ] EuclideanSpace ℝ (Fin d)) (hP_ortho : ∀ (v : EuclideanSpace ℝ (Fin d)), ‖v‖ ^ 2 = ‖P v‖ ^ 2 + ‖v - P v‖ ^ 2) (mstar : EuclideanSpace ℝ (Fin d)) (hmstar : mstar ∈ S) (hP_eq : P = fderiv ℝ π mstar) (U_plus : Set (EuclideanSpace ℝ (Fin d))) (hU_open : IsOpen U_plus) (hm_in : mstar ∈ U_plus) (U : Set (EuclideanSpace ℝ (Fin d))) (hU_isopen : IsOpen U) (hU_sub : closure U_plus ⊆ U) (hf_lip : LipschitzOnWith L (gradient f) U) (hS_sub_U : S ⊆ U) (hmstar_U : mstar ∈ U) (hπ_on_U : ∀ x ∈ U, π x ∈ S ∧ dist x (π x) = Metric.infDist x S) (hDπ_cont : ContinuousAt (fun (x : EuclideanSpace ℝ (Fin d)) => fderiv ℝ π x) mstar) (C_coer : ℝ) (hC_coer : 0 < C_coer) (hcoer_bound : ∀ (s : NesterovState d), s.x ∈ U_plus → s.lookahead η ∈ U_plus → ‖s.v‖ ^ 2 + μ' * ‖normalDispOfState π η s‖ ^ 2 ≤ C_coer * lyapunovOfState P μ' π f η s) (hπ_kills_normal : ∀ x ∈ U_plus, (fderiv ℝ π (π x)) (x - π x) = 0) (hgrad_zero : ∀ x ∈ S, gradient f x = 0) (hπ_diff_near : ∃ δ_diff > 0, ∀ z ∈ Metric.ball mstar δ_diff, DifferentiableAt ℝ π z) :
∃ (R_abs : ℝ), 0 < R_abs ∧ ∀ (s₀ : NesterovState d) (n : ℕ), (nesterovSeqGen f η ρ s₀ n).x ∈ Metric.ball mstar R_abs → (nesterovSeqGen f η ρ s₀ n).lookahead η ∈ Metric.ball mstar R_abs → lyapunovOfState P μ' π f η (nesterovSeqGen f η ρ s₀ n) ≤ R_abs ^ 2 → have sn := nesterovSeqGen f η ρ s₀ n; have gn := gradient f (sn.lookahead η); have en := sn.lookahead η - π (sn.lookahead η); have ξn := curvatureErrorOfState (⇑P) π f η ρ sn; have un1 := auxVarOfState P μ' π η (nesterovStep f η ρ sn); have wn := un1 - √μ' • ξn; have δ_curv := √μ' * inner ℝ wn ξn + √μ' ^ 2 / 2 * ‖ξn‖ ^ 2; have a := √(μ' * η); have Ln := lyapunovOfState P μ' π f η sn; have proj_err := a * |inner ℝ gn (P en)|; δ_curv + proj_err ≤ θ * a * Ln

A uniform curvature-absorption radius for Nesterov sequences with arbitrary initial state.