Adapted from k3nfalt/longtails, commit 269cbc764dd36851fd0b64f2f950f329ee127de4. Modified for Lean Pool: module visibility, namespace isolation, and current Mathlib.
theorem
LongTails.OracleTemplate.GeneralizedAccelerated.weighted_curvature_growth
{ι : Type u_1}
(s : Finset ι)
(A G : ι → ℝ)
(q : ι → ℕ)
{H C β Afinal : ℝ}
(hA : ∀ i ∈ s, 0 ≤ A i)
(hG : ∀ i ∈ s, 0 < G i)
(hH : 0 ≤ H)
(hβ : 0 ≤ β)
(hAf : 0 ≤ Afinal)
(henergy : ∑ i ∈ s, A i * G i ≤ H)
(hweights : ∑ i ∈ s, 2 ^ q i / √(G i) ≤ C * √Afinal)
(htuning : β ^ 3 * H * C ^ 2 ≤ 1)
:
theorem
LongTails.OracleTemplate.GeneralizedAccelerated.finite_prefix_exponential_growth
{ι : Type u_1}
(s : Finset ι)
(time : ι → ℕ)
(B r : ι → ℝ)
{B0 β c Bfinal : ℝ}
(hB0 : 0 < B0)
(hβ : 0 < β)
(hβ1 : β ≤ 1)
(hinj : Set.InjOn time ↑s)
(hbase : ∀ i ∈ s, B0 ≤ B i)
(hprefix : ∀ i ∈ s, β * ∑ j ∈ s with time j < time i, B j * Real.exp (c * r j) ≤ B i)
(hfinalbase : B0 ≤ Bfinal)
(hfinal : β * ∑ i ∈ s, B i * Real.exp (c * r i) ≤ Bfinal)
:
theorem
LongTails.OracleTemplate.GeneralizedAccelerated.high_count_log_bound
{ι : Type u_1}
(s : Finset ι)
(time : ι → ℕ)
(A G : ι → ℝ)
(q : ι → ℕ)
{A0 Afinal H β : ℝ}
(hA0 : 0 < A0)
(hAF : A0 ≤ Afinal)
(hA : ∀ i ∈ s, A0 ≤ A i)
(hG : ∀ i ∈ s, 0 < G i)
(hH : 0 ≤ H)
(hβ : 0 < β)
(hβ1 : β ≤ 1)
(hinj : Set.InjOn time ↑s)
(henergy : ∑ i ∈ s, A i * G i ≤ H)
(hweights : ∑ i ∈ s, 2 ^ q i / √(G i) ≤ 32 * √Afinal)
(hprefix : ∀ i ∈ s, ∑ j ∈ s with time j < time i, 2 ^ q j / √(G j) ≤ 32 * √(A i))
(htuning : β ^ 3 * H * 32 ^ 2 ≤ 1)
:
noncomputable def
LongTails.OracleTemplate.GeneralizedAccelerated.runUp
{E : Type u_1}
[NormedAddCommGroup E]
[InnerProductSpace ℝ E]
(L0 L1 : ℝ)
(g : E → E)
(s : Iterate E)
(n : ℕ)
:
Whether the current local curvature exceeds the algorithm curvature guess.
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
LongTails.OracleTemplate.GeneralizedAccelerated.run_charging_bound
{E : Type u_1}
[NormedAddCommGroup E]
[InnerProductSpace ℝ E]
{g : E → E}
{L0 L1 : ℝ}
(hL0 : 0 < L0)
(hL1 : 0 ≤ L1)
(s : Iterate E)
(hA : 0 ≤ s.A)
(hG : 0 < s.guess)
(hfirst : localCurvature L0 L1 (g (coupling s)) ≤ s.guess)
(n : ℕ)
:
have w := fun (i : ℕ) => 1 / √(run L0 L1 g s i).guess;
have up := runUp L0 L1 g s;
∑ b ∈ chargingSet up n, chargeValue w b ≤ 32 * √(run L0 L1 g s (n + 1)).A ∧ ∀ b ∈ chargingSet up n, ∑ a ∈ chargingSet up n with a.1 < b.1, chargeValue w a ≤ 32 * √(run L0 L1 g s (b.1 + 1)).A
theorem
LongTails.OracleTemplate.GeneralizedAccelerated.charging_selected_curvature
{E : Type u_1}
[NormedAddCommGroup E]
[InnerProductSpace ℝ E]
{g : E → E}
{L0 L1 : ℝ}
(s : Iterate E)
(hfirst : localCurvature L0 L1 (g (coupling s)) = s.guess)
(n : ℕ)
(b : ℕ × ℕ)
(hb : b ∈ chargingSet (runUp L0 L1 g s) n)
:
theorem
LongTails.OracleTemplate.GeneralizedAccelerated.charged_high_energy
{E : Type u_1}
[NormedAddCommGroup E]
[InnerProductSpace ℝ E]
[CompleteSpace E]
{f : E → ℝ}
{g : E → E}
{L0 L1 : ℝ}
(hL0 : 0 < L0)
(hL1 : 0 < L1)
(hc : ConvexOn ℝ Set.univ f)
(hg : ∀ (x : E), HasGradientAt f (g x) x)
(hgd : Differentiable ℝ g)
(hH : ∀ (x : E), ‖fderiv ℝ g x‖ ≤ L0 + L1 * ‖g x‖)
(s : Iterate E)
(u : E)
(hmin : IsMinOn f Set.univ u)
(hA : 0 ≤ s.A)
(hG : 0 < s.guess)
(hfirst : localCurvature L0 L1 (g (coupling s)) = s.guess)
(n : ℕ)
(Q : Finset (ℕ × ℕ))
(hQ : Q ⊆ chargingSet (runUp L0 L1 g s) n)
(hhigh : ∀ b ∈ Q, 8 * L0 < localCurvature L0 L1 (g (coupling (run L0 L1 g s b.1))))
:
theorem
LongTails.OracleTemplate.GeneralizedAccelerated.run_charging_geometry
{E : Type u_1}
[NormedAddCommGroup E]
[InnerProductSpace ℝ E]
[CompleteSpace E]
{f : E → ℝ}
{g : E → E}
{L0 L1 R : ℝ}
(hL0 : 0 < L0)
(hL1 : 0 < L1)
(hc : ConvexOn ℝ Set.univ f)
(hg : ∀ (x : E), HasGradientAt f (g x) x)
(hgd : Differentiable ℝ g)
(hH : ∀ (x : E), ‖fderiv ℝ g x‖ ≤ L0 + L1 * ‖g x‖)
(s : Iterate E)
(u : E)
(hmin : IsMinOn f Set.univ u)
(hA : 0 < s.A)
(hG : 0 < s.guess)
(hE : energy f u s ≤ R ^ 2)
(hfirst : localCurvature L0 L1 (g (coupling s)) = s.guess)
(n : ℕ)
:
have Q := chargingSet (runUp L0 L1 g s) n;
have A := fun (b : ℕ × ℕ) => (run L0 L1 g s (b.1 + 1)).A;
have G := fun (b : ℕ × ℕ) => (run L0 L1 g s b.1).guess;
have M := fun (b : ℕ × ℕ) => localCurvature L0 L1 (g (coupling (run L0 L1 g s b.1)));
have low := {b ∈ Q | M b ≤ 8 * L0};
have high := {b ∈ Q | ¬M b ≤ 8 * L0};
have Afinal := (run L0 L1 g s (n + 1)).A;
(∀ (i : ℕ), s.A ≤ (run L0 L1 g s i).A) ∧ (∀ (i : ℕ), 0 < (run L0 L1 g s i).guess) ∧ ∑ b ∈ low, ↑b.2 ≤ 96 * √(L0 * Afinal) ∧ ∑ b ∈ high, A b * G b ≤ 512 / 3 * (L1 * R) ^ 2 ∧ ∑ b ∈ high, 2 ^ b.2 / √(G b) ≤ 32 * √Afinal ∧ (∀ b ∈ high, ∑ a ∈ high with a.1 < b.1, 2 ^ a.2 / √(G a) ≤ 32 * √(A b)) ∧ Set.InjOn Prod.fst ↑high ∧ ∑ b ∈ low, ↑b.2 + ∑ b ∈ high, ↑b.2 = ↑n
Shared low/high-curvature charging facts for both accelerated iteration-count bounds.