Lyapunov Contraction Step 3: Algebraic Assembly Lemmas #
This file provides the arithmetic/algebraic backbone for the contraction proof L_{n+1} ≤ (1 - a/2) · L_n by decomposing it into independent, self-contained lemmas.
Architecture #
The contraction proof has two layers:
Layer 1 (this file): Pure arithmetic.
All lemmas are stated with real-valued parameters (no norms, no vectors).
Each is ≤ 20 lines and provable by nlinarith / linarith / ring.
Layer 2 (LyapunovContraction.lean): Geometric bridge. Extract real values from norms/inner products, verify arithmetic hypotheses, apply the assembly lemma.
Proof Strategy #
The Lyapunov function L_n has three components: L_n = F_n + U_n/2 + T_n where F_n = f(x_n) - f*, U_n = ‖u_n‖², T_n = λ‖Pv_n‖².
Step A: In the "flat" case (no curvature error), each component of L_{n+1} is bounded by (1-a) times the corresponding component of L_n.
Step B: The curvature error ξ_n contributes a perturbation of size O(a² L_n).
Step C: Since (1-a) + (a/2) = (1-a/2), the perturbation is absorbed: L_{n+1} ≤ (1-a) L_n + perturbation ≤ (1-a/2) L_n.
The coefficients (1-a), (1-a)/2, (1-a)/2 in the flat-case bound are all ≤ (1-a/2) times the corresponding Lyapunov coefficients 1, 1/2, λ. This creates an (a/2)·L_n slack for perturbation absorption.
Concretely: (1-a)·F + ((1-a)/2)·U + ((1-a)/2)·V ≤ (1-a/2)·(F + U/2 + λ·V) when λ = (1+a)²/(2(1-a)) and 0 < a < 1.
Function-value bound from descent + strong aiming.
Given:
- Descent: F1 ≤ F' - (η/2)·G²
- Aiming: A ≥ F' + (μ'/2)·E² where A = ⟨g_n, e_n⟩, G² = ‖g_n‖², E² = ‖e_n‖², F' = f(x'n) - f*, F1 = f(x{n+1}) - f*.
Then: F1 ≤ A - (μ'/2)·E² - (η/2)·G². The aiming inequality provides a tighter bound on A than Cauchy-Schwarz.
Gradient inner product splits: ⟨g, e⟩ = ⟨P⊥g, e⟩ + ⟨Pg, e⟩. In the flat case, ⟨Pg, e⟩ = 0 (tangent vs normal). The Hessian bound controls ⟨Pg, e⟩ in the curved case.
Flat-case contraction assembly (pure arithmetic).
If each component of L_{n+1} is bounded by (1-a) times the corresponding component of L_n, then L_{n+1} ≤ (1-a/2) L_n.
This is the core of the contraction: the gap between (1-a) and (1-a/2) provides room for perturbation absorption.
Contraction with perturbation (pure arithmetic).
If each component of L_{n+1} is bounded by (1-a) times the corresponding component of L_n, PLUS a perturbation δ, then L_{n+1} ≤ (1-a/2) L_n provided δ ≤ (a/2) L_n.
The tangential energy at step n+1, expanded.
From v_{n+1} = ρ(v_n - √η g_n) and P linear: Pv_{n+1} = ρ(Pv_n - √η Pg_n) ‖Pv_{n+1}‖² = ρ²(‖Pv_n‖² - 2√η⟨Pv_n, Pg_n⟩ + η‖Pg_n‖²)
So: λ‖Pv_{n+1}‖² = λρ²(‖Pv_n‖² - 2√η⟨Pv_n, Pg_n⟩ + η‖Pg_n‖²) = ((1-a)/2)(‖Pv_n‖² - 2√η⟨Pv_n, Pg_n⟩ + η‖Pg_n‖²)
The (1-a)/2 ≤ (1-a)λ ensures this is ≤ (1-a)·Tn + cross terms.
Tangential cross-term absorption: the -(1-a)√η⟨Pv,Pg⟩ term satisfies |-(1-a)√η⟨Pv,Pg⟩| ≤ (1-a)/2 · (α‖Pv‖² + η/α ‖Pg‖²) for any α > 0 (Young's inequality). With α = 1 this gives: |term| ≤ (1-a)/2 · (‖Pv‖² + η‖Pg‖²).
The descent provides -η/2 ‖g‖², and the tangential expansion creates +(1-a)/2 · η · ‖Pg‖². The net gradient-squared term is:
-η/2 ‖g‖² + (1-a)/2 · η · ‖Pg‖² = -η/2(‖Pg‖² + ‖P⊥g‖²) + (1-a)/2 · η · ‖Pg‖² = -ηa/2 · ‖Pg‖² - η/2 · ‖P⊥g‖²
Both terms are ≤ 0, giving descent in BOTH tangential and normal gradient.
Main contraction assembly (pure arithmetic).
Takes all real-valued intermediate quantities as parameters and combines them to prove the contraction.
The caller (LyapunovContraction.lean) extracts these values from the geometric setup (norms, inner products) and verifies the hypotheses.
Parameter naming convention:
- F, U, T = components of L_n (function gap, normal energy, tangential energy)
- F', U', T' = components of L_{n+1}
- G = ‖gradient‖², E = ‖normal displacement‖²
- a = √(μ'η), the contraction rate parameter
The perturbation from curvature error ξ_n contributes to ‖u_{n+1}‖² via the expansion ‖w + c·ξ‖² = ‖w‖² + 2c⟨w,ξ⟩ + c²‖ξ‖².
If ‖ξ_n‖ ≤ C_ξ·√η·√L_n (from motion_bounds_curvature_error) and
‖w_n‖ ≤ C_w·√L_n (from coercivity), then:
|perturbation| = |√μ'(2⟨w_n,ξ_n⟩ + μ'‖ξ_n‖²)| ≤ √μ'(2 C_w C_ξ √η L_n + μ' C_ξ² η L_n) = a(2 C_w C_ξ + a C_ξ²) L_n
For the absorption δ ≤ (a/2)L_n, we need 2 C_w C_ξ + a C_ξ² ≤ 1/2. This holds when C_w, C_ξ are small (guaranteed by shrinking the neighborhood).
Two-step sufficiency: To prove L_{n+1} ≤ (1-a/2)L_n, it suffices to show:
- L_{n+1} ≤ (1-a) · L_n + δ (flat-case bound + perturbation)
- δ ≤ (a/2) · L_n (perturbation absorption)
This is the entry point for the contraction case in LyapunovContraction.lean.
The proof simply adds the two inequalities.
Generalized two-step sufficiency with budget-split parameter θ ∈ (0,1):
- L_{n+1} ≤ (1-a) · L_n + δ (flat-case bound + perturbation)
- δ ≤ θ·a · L_n (perturbation absorption with fraction θ)
Conclusion: L_{n+1} ≤ (1-(1-θ)·a) · L_n.
When θ = 1/2, this recovers two_step_contraction. Choosing θ → 0 gives a
contraction rate (1-a) approaching the ideal (perturbation-free) rate.