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 : xU, π 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 : xU_plus, (fderiv π (π x)) (x - π x) = 0) (hgrad_zero : xS, gradient f x = 0) (hπ_diff_near : δ_diff > 0, zMetric.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_abslyapunov P μ' π f η ρ x₁ n R_abs ^ 2have 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

Public theorem wrapper for curvAbsorbAssemblyProof.

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 : xU, π 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_pluss.lookahead η U_pluss.v ^ 2 + μ' * normalDispOfState π η s ^ 2 C_coer * lyapunovOfState P μ' π f η s) (hπ_kills_normal : xU_plus, (fderiv π (π x)) (x - π x) = 0) (hgrad_zero : xS, gradient f x = 0) (hπ_diff_near : δ_diff > 0, zMetric.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_abslyapunovOfState P μ' π f η (nesterovSeqGen f η ρ s₀ n) R_abs ^ 2have 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

Public theorem wrapper for curvAbsorbAssemblyGenProof.