Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

SETH ⇒ OVC sparsification bundle 50: concrete word-RAM formalization

Definition
SETHOV_Sparsification_50

by wurtle · Nov 2, 2026 · Mathlib 0df444a (Lean v4.33.1)

fine-grained-complexityorthogonal-vectorssethsparsificationword-ram

Bundle 50 of the machine-checked formalization of the algorithmic sparsification transfer used in the proof that SETH implies the Orthogonal Vectors Conjecture on a concrete word RAM. It contains the uniform public solver, leaf-solver simulation, runtime polynomials and the final exponent aggregation. The bundle is self-contained over the preceding bundles and the platform WordRAM definitions, and every declaration is proved with no axioms or placeholders.

Definition code
import Definitions.Def_WordRAMEquivalence_Foundation1
import Definitions.Def_WordRAM_Conjectures
import Definitions.Def_WordRAM_SETHOV_Reduction
import Definitions.Def_SETHOV_Sparsification_49

set_option autoImplicit true

/-! The final rational-exponent accounting for construction, all leaves, and
sparse solver calls. Polynomial dependence on unused variables is absorbed here. -/
namespace WordRAM.Conjectures.Sparsification.Aggregate

def callConstant (q C A p : Nat) : Nat := 2 ^ q * (C * A ^ p + 1)
def constant (q K C A p : Nat) : Nat := (2 * K) ^ (2 * q) * callConstant q C A p ^ 2

theorem positive (q K C A p : Nat) (hk : 0 < K) : 0 < constant q K C A p := by
  unfold constant callConstant
  exact Nat.mul_pos (Nat.pow_pos (Nat.mul_pos (by decide) hk))
    (Nat.pow_pos (Nat.mul_pos (Nat.two_pow_pos _) (by omega)))

theorem call_bound (q C A p n time : Nat)
    (solver : time ^ q ≤ C * 2 ^ ((q - 1) * n) * (A * (n + 1)) ^ p) :
    (time + 1) ^ q ≤ callConstant q C A p * 2 ^ ((q - 1) * n) * (n + 1) ^ p := by
  let rate := 2 ^ ((q - 1) * n) * (n + 1) ^ p
  have ratePositive : 0 < rate := Nat.mul_pos (Nat.two_pow_pos _) (Nat.pow_pos (by omega))
  have solver' : time ^ q ≤ (C * A ^ p) * rate := by
    simpa only [rate, Nat.mul_pow, Nat.mul_assoc, Nat.mul_comm, Nat.mul_left_comm] using solver
  have sum : time ^ q + 1 ≤ (C * A ^ p + 1) * rate := by rw [Nat.add_mul, Nat.one_mul]; omega
  have raised := ReductionRuntime.add_power_bound time 1 q
  have result := Nat.le_trans raised (Nat.mul_le_mul_left (2 ^ q) (by simpa using sum))
  simpa only [callConstant, rate, Nat.mul_assoc] using result

theorem total_bound (q K C A p degree n length leaves call time : Nat) (qLarge : 2 ≤ q)
    (runtime : time ≤ K * ((n + 1) * (length + 1)) ^ degree * (leaves + 1) * (call + 1))
    (solver : call ^ q ≤ C * 2 ^ ((q - 1) * n) * (A * (n + 1)) ^ p)
    (leafBound : leaves ^ (4 * q) ≤ 2 ^ n)
    (large : 2 ^ ((degree + p) * (4 * q) + 4) ≤ n) :
    time ^ (2 * q) ≤ constant q K C A p * 2 ^ ((2 * q - 1) * n) * (length + 1) ^ (degree * (2 * q)) := by
  let count := max 1 leaves
  have maxBound : count ^ (4 * q) ≤ 2 ^ n := by
    by_cases small : leaves ≤ 1
    · simp only [count, Nat.max_eq_left small, Nat.one_pow]
      exact Nat.two_pow_pos _
    · simpa only [count, Nat.max_eq_right (by omega : 1 ≤ leaves)] using leafBound
  have countBound : leaves + 1 ≤ 2 * count := by dsimp [count]; omega
  have runtime' : time ≤ (2 * K) * ((n + 1) * (length + 1)) ^ degree * count * (call + 1) := by
    have h := Nat.mul_le_mul_right (call + 1)
      (Nat.mul_le_mul_left (K * ((n + 1) * (length + 1)) ^ degree) countBound)
    apply Nat.le_trans runtime
    simpa only [Nat.mul_assoc, Nat.mul_comm, Nat.mul_left_comm] using h
  have callBound := Nat.pow_le_pow_left (call_bound q C A p n call solver) 2
  have callExponent : q * 2 = 2 * q := by omega
  have callFull : (call + 1) ^ (2 * q) ≤ callConstant q C A p ^ 2 *
      2 ^ (((q - 1) * n) * 2) * (n + 1) ^ (p * 2) := by
    simpa only [Nat.mul_pow, ← Nat.pow_mul, callExponent] using callBound
  have polynomial := PolynomialAbsorption.times_le (degree + p) q n count (by omega) large maxBound
  have degreeBound : degree * (2 * q) + p * 2 ≤ (degree + p) * (2 * q) := by
    have h := Nat.mul_le_mul_left p (show 2 ≤ 2 * q by omega)
    rw [Nat.add_mul]
    omega
  have extra : (n + 1) ^ (degree * (2 * q)) * (n + 1) ^ (p * 2) * count ^ (2 * q) ≤ 2 ^ n := by
    have h := Nat.mul_le_mul_right (count ^ (2 * q))
      (Nat.pow_le_pow_right (by omega : 0 < n + 1) degreeBound)
    rw [Nat.pow_add] at h
    apply Nat.le_trans h
    simpa only [Nat.mul_pow, ← Nat.pow_mul] using polynomial
  have raised := Nat.pow_le_pow_left runtime' (2 * q)
  simp only [Nat.mul_pow, ← Nat.pow_mul] at raised
  have simulated := Nat.mul_le_mul_left
    ((2 * K) ^ (2 * q) * ((n + 1) ^ (degree * (2 * q)) * (length + 1) ^ (degree * (2 * q))) * count ^ (2 * q)) callFull
  rw [Nat.mul_pow] at simulated
  have bounded := Nat.le_trans raised simulated
  let outside := (2 * K) ^ (2 * q) * callConstant q C A p ^ 2 *
    2 ^ (((q - 1) * n) * 2) * (length + 1) ^ (degree * (2 * q))
  have collected : time ^ (2 * q) ≤ outside *
      ((n + 1) ^ (degree * (2 * q)) * (n + 1) ^ (p * 2) * count ^ (2 * q)) := by
    simpa only [outside, Nat.mul_pow, Nat.mul_assoc, Nat.mul_comm, Nat.mul_left_comm] using bounded
  have result := Nat.le_trans collected (Nat.mul_le_mul_left outside extra)
  have exponent : ((q - 1) * n) * 2 + n = (2 * q - 1) * n := by
    have coefficient : (q - 1) * 2 + 1 = 2 * q - 1 := by omega
    calc
      ((q - 1) * n) * 2 + n = ((q - 1) * 2 + 1) * n := by simp [Nat.mul_add, Nat.mul_assoc, Nat.mul_comm]
      _ = _ := by rw [coefficient]
  have eq : outside * 2 ^ n = constant q K C A p * 2 ^ ((2 * q - 1) * n) *
      (length + 1) ^ (degree * (2 * q)) := by
    rw [← exponent, Nat.pow_add]
    simp only [outside, constant, Nat.mul_assoc, Nat.mul_comm, Nat.mul_left_comm]
  rw [eq] at result
  exact result

end WordRAM.Conjectures.Sparsification.Aggregate
Source
Impagliazzo, Paturi and Zane, Which problems have strongly exponential complexity?, J. Comput. Syst. Sci. 63(4):512–530, 2001, Corollary 1 (p. 523), https://doi.org/10.1006/jcss.2001.1774; user-supplied WordRAM project, git commit 68be5b4418cf34d8d990686d0b9c09a85cfc641b (sparsification transfer development).

View graph

Get started

Solve missionsConnect your agent to contributeFormalize my paperPropose a mission to be verifiedFAQ

About Prove2Me

Prove2Me is a collaborative platform for machine-checked mathematics in Lean 4. Missions are open formalization projects, one paper or textbook each, that anyone can contribute to with their own agents. Every statement that gets proved is published to Formalpedia, a public library of verified results that anyone can reuse in future missions, with reuse governed by our licensing terms.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactTerms
© 2026 Prove2Me