Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Split-and-list SAT-to-OV instance and sparse kkk-SAT time bounds

Definition
WordRAM_SETHOV_Reduction

by wurtle · Oct 28, 2026 · Mathlib 0df444a (Lean v4.33.1)

computational-complexityfine-grained-complexitysatisfiabilityword-ram

The split-and-list SAT-to-OV construction and the sparse kkk-SAT time predicate on the word RAM of Def_WordRAM_Conjectures.

Split-and-list instance. Let FFF be a CNF formula with variables x0,…,xn−1x_0,\dots,x_{n-1}x0​,…,xn−1​ and clauses C0,…,Cm−1C_0,\dots,C_{m-1}C0​,…,Cm−1​. Put h=⌈n/2⌉h=\lceil n/2\rceilh=⌈n/2⌉. The left variables are xix_ixi​ with i<hi<hi<h, and the remaining variables are right. A number a<2ha<2^{h}a<2h is read as an assignment by bits:

  1. as a left assignment, xi↦x_i\mapstoxi​↦ bit iii of aaa;
  2. as a right assignment, xi↦x_i\mapstoxi​↦ bit i−hi-hi−h of aaa.

For each a<2ha<2^ha<2h the left vector ua∈{0,1}mu_a\in\{0,1\}^mua​∈{0,1}m has (ua)j=1(u_a)_j=1(ua​)j​=1 iff no literal of CjC_jCj​ on a left variable is made true by aaa. The right vectors vbv_bvb​ are defined in the same way using right variables. Then

toOV(F)=((ua)a<2h, (vb)b<2h),\mathrm{toOV}(F)=\bigl((u_a)_{a<2^h},\ (v_b)_{b<2^h}\bigr),toOV(F)=((ua​)a<2h​, (vb​)b<2h​),

an OV instance with 2⌈n/2⌉2^{\lceil n/2\rceil}2⌈n/2⌉ vectors per side and dimension mmm. For odd nnn the top bit of a right index is unused, so right vectors repeat, which OV permits.

Sparse SAT. For natural numbers k,Δ,qk,\Delta,qk,Δ,q, FastSparseSAT(k,Δ,q)\mathrm{FastSparseSAT}(k,\Delta,q)FastSparseSAT(k,Δ,q) is FastSAT(k,q)\mathrm{FastSAT}(k,q)FastSAT(k,q) restricted to kkk-CNF formulas with at most Δn\Delta nΔn clauses. That is, there are an algorithm aaa and constants C>0C>0C>0, ppp, n0n_0n0​ such that, for every kkk-CNF FFF with m≤Δnm\le\Delta nm≤Δn, aaa decides satisfiability of FFF on its standard encoding with nnn extra word bits in some ttt steps, where

n≥n0  ⟹  tq≤C⋅2(q−1)n(LF+1)p.n\ge n_0\implies t^{q}\le C\cdot2^{(q-1)n}(L_F+1)^p.n≥n0​⟹tq≤C⋅2(q−1)n(LF​+1)p.

These are the objects of the two reduction steps in the classical proof that SETH implies the Orthogonal Vectors Conjecture.

Formalization Note Clause indices for j<mj<mj<m are taken from the formula's clause list in order. The constants a,C,p,n0a,C,p,n_0a,C,p,n0​ in FastSparseSAT\mathrm{FastSparseSAT}FastSparseSAT may depend on kkk, Δ\DeltaΔ and qqq but not on the formula.

Definition code
import Definitions.Def_WordRAM_Conjectures

set_option autoImplicit true

/-!
The split-and-list SAT-to-OV construction and the sparse k-SAT time predicate
used by the SETH ⇒ OV milestones. Both are copied unchanged from the source
development (`WordRAM/SETHToOV.lean`); proof-only helpers are omitted.
-/
namespace WordRAM.Conjectures
namespace Reduction

/-- Both lists use ceil(n/2) bits. For odd n, one unused bit on the right
duplicates vectors; OV permits duplicates. This also covers n = 0. -/
def half (n : Nat) : Nat := (n + 1) / 2

def onLeft (n : Nat) (i : Fin n) : Bool := decide (i.val < half n)

/-- A coordinate is 1 precisely when this half does NOT satisfy the clause. -/
def fails (side : Fin n → Bool) (a : Fin n → Bool) (clause : List (Literal n)) : Bool :=
  !(clause.any fun literal => side literal.index && literal.eval a)

def leftAssignment (n : Nat) (a : Fin (2 ^ half n)) : Fin n → Bool :=
  fun i => (BitVec.ofFin a).getLsbD i.val

def rightAssignment (n : Nat) (b : Fin (2 ^ half n)) : Fin n → Bool :=
  fun i => (BitVec.ofFin b).getLsbD (i.val - half n)

/-- An explicit, computable OV instance with 2^ceil(n/2) vectors on EACH side
and one coordinate per clause. No SAT oracle is used to construct the vectors. -/
def toOV (f : SATInstance) : OVInstance where
  count := 2 ^ half f.variables
  dimension := f.clauses.length
  left := fun a j => fails (onLeft f.variables) (leftAssignment f.variables a) f.clauses[j.val]
  right := fun b j => fails (fun i => !(onLeft f.variables i))
    (rightAssignment f.variables b) f.clauses[j.val]

end Reduction

/-- The same SAT time bound, restricted to formulas with at most density·n
clauses. Density, k, and q are fixed before selecting an algorithm. -/
def HasFastSparseSAT (k density q : Nat) : Prop :=
  ∃ a : Algorithm, ∃ C p n₀ : Nat, 0 < C ∧
    ∀ f : SATInstance, f.IsKCNF k → f.clauses.length ≤ density * f.variables →
      ∃ t : Nat, DecidesIn a f.encode f.variables t f.Satisfiable ∧
        (n₀ ≤ f.variables →
          t ^ q ≤ C * 2 ^ ((q - 1) * f.variables) * (f.encode.length + 1) ^ p)

end WordRAM.Conjectures
Source
Split-and-list construction: Williams, proof of Theorem 5.1 (ECCC TR04-032, §5.1, pp. 8–9). Ryan Williams, A new algorithm for optimal constraint satisfaction and its implications, ECCC Report TR04-032 (2004), https://eccc.weizmann.ac.il/report/2004/032 ; ICALP 2004, pp. 1227–1237; journal version: A new algorithm for optimal 2-constraint satisfaction and its implications, Theoretical Computer Science 348(2–3):357–365, 2005. Sparse k-SAT (at most density·n clauses): Impagliazzo–Paturi–Zane, Corollary 1 (p. 523). Russell Impagliazzo, Ramamohan Paturi, Francis Zane, Which problems have strongly exponential complexity?, J. Comput. Syst. Sci. 63(4):512–530, 2001, https://doi.org/10.1006/jcss.2001.1774 . Lean source: the contributor's WordRAM project (private repository), commit 24159584b91d0e5298def8cd6491aafd480b8f2a: WordRAM/SETHToOV.lean (definitions copied unchanged; proof-only helpers omitted).
Read-back

What the Lean code literally says, in plain math · claude-opus-5-5

Reduction.half

For a natural number nnn, half(n)\mathrm{half}(n)half(n) is the natural number

half(n)=⌊n+12⌋=⌈n2⌉.\mathrm{half}(n) = \left\lfloor \frac{n+1}{2} \right\rfloor = \left\lceil \frac{n}{2} \right\rceil .half(n)=⌊2n+1​⌋=⌈2n​⌉.

Edge values: half(0)=0\mathrm{half}(0) = 0half(0)=0, half(1)=1\mathrm{half}(1) = 1half(1)=1, half(2)=1\mathrm{half}(2) = 1half(2)=1, half(3)=2\mathrm{half}(3) = 2half(3)=2. For even nnn it equals n/2n/2n/2; for odd nnn it equals (n+1)/2(n+1)/2(n+1)/2, one more than ⌊n/2⌋\lfloor n/2 \rfloor⌊n/2⌋.

Reduction.onLeft

For a natural number nnn and a variable index i∈{0,…,n−1}i \in \{0, \dots, n-1\}i∈{0,…,n−1}, onLeftn(i)\mathrm{onLeft}_n(i)onLeftn​(i) is the Boolean value

onLeftn(i)=true  ⟺  i<⌈n/2⌉.\mathrm{onLeft}_n(i) = \mathsf{true} \iff i < \lceil n/2 \rceil .onLeftn​(i)=true⟺i<⌈n/2⌉.

So the indices 0,…,⌈n/2⌉−10, \dots, \lceil n/2\rceil - 10,…,⌈n/2⌉−1 are "left" and the indices ⌈n/2⌉,…,n−1\lceil n/2 \rceil, \dots, n-1⌈n/2⌉,…,n−1 (there are ⌊n/2⌋\lfloor n/2 \rfloor⌊n/2⌋ of them) are "right". For n=0n = 0n=0 there are no indices; for n=1n = 1n=1 the single index 000 is left and no index is right.

Reduction.fails

Here a literal over nnn variables is a pair ℓ=(ι(ℓ),π(ℓ))\ell = (\iota(\ell), \pi(\ell))ℓ=(ι(ℓ),π(ℓ)) with variable index ι(ℓ)∈{0,…,n−1}\iota(\ell) \in \{0,\dots,n-1\}ι(ℓ)∈{0,…,n−1} and polarity π(ℓ)∈{true,false}\pi(\ell) \in \{\mathsf{true}, \mathsf{false}\}π(ℓ)∈{true,false}; under an assignment α:{0,…,n−1}→{true,false}\alpha : \{0,\dots,n-1\} \to \{\mathsf{true},\mathsf{false}\}α:{0,…,n−1}→{true,false} its value is α(ι(ℓ))\alpha(\iota(\ell))α(ι(ℓ)) if π(ℓ)=true\pi(\ell) = \mathsf{true}π(ℓ)=true and ¬α(ι(ℓ))\neg\alpha(\iota(\ell))¬α(ι(ℓ)) otherwise. A clause is a finite list of such literals (possibly empty, possibly with repeated literals). The number of variables nnn is an implicit argument. Given a "side" predicate σ:{0,…,n−1}→{true,false}\sigma : \{0,\dots,n-1\} \to \{\mathsf{true},\mathsf{false}\}σ:{0,…,n−1}→{true,false}, an assignment α\alphaα, and a clause ccc, fails(σ,α,c)\mathrm{fails}(\sigma, \alpha, c)fails(σ,α,c) is the Boolean

fails(σ,α,c)=true  ⟺  there is no literal ℓ∈c with σ(ι(ℓ))=true and ℓ true under α.\mathrm{fails}(\sigma,\alpha,c) = \mathsf{true} \iff \text{there is no literal } \ell \in c \text{ with } \sigma(\iota(\ell)) = \mathsf{true} \text{ and } \ell \text{ true under } \alpha .fails(σ,α,c)=true⟺there is no literal ℓ∈c with σ(ι(ℓ))=true and ℓ true under α.

Literals whose variable is not on the side σ\sigmaσ are ignored entirely, regardless of α\alphaα. If ccc is the empty clause, or if no literal of ccc has its variable on side σ\sigmaσ, then fails(σ,α,c)=true\mathrm{fails}(\sigma,\alpha,c) = \mathsf{true}fails(σ,α,c)=true for every α\alphaα.

Reduction.leftAssignment

For n∈Nn \in \mathbb{N}n∈N and a∈{0,…,2⌈n/2⌉−1}a \in \{0, \dots, 2^{\lceil n/2 \rceil} - 1\}a∈{0,…,2⌈n/2⌉−1}, leftAssignmentn(a)\mathrm{leftAssignment}_n(a)leftAssignmentn​(a) is the assignment {0,…,n−1}→{true,false}\{0,\dots,n-1\} \to \{\mathsf{true},\mathsf{false}\}{0,…,n−1}→{true,false} that sends variable iii to the iii-th binary digit of aaa (least significant digit is digit 000), obtained by viewing aaa as a bit string of length ⌈n/2⌉\lceil n/2 \rceil⌈n/2⌉ and reading bit iii, with the convention that a position i≥⌈n/2⌉i \ge \lceil n/2 \rceili≥⌈n/2⌉ (outside that bit string) reads as false\mathsf{false}false:

leftAssignmentn(a)(i)={biti(a)i<⌈n/2⌉,falsei≥⌈n/2⌉.\mathrm{leftAssignment}_n(a)(i) = \begin{cases} \text{bit}_i(a) & i < \lceil n/2\rceil,\\ \mathsf{false} & i \ge \lceil n/2 \rceil.\end{cases}leftAssignmentn​(a)(i)={biti​(a)false​i<⌈n/2⌉,i≥⌈n/2⌉.​

Since a<2⌈n/2⌉a < 2^{\lceil n/2\rceil}a<2⌈n/2⌉, this equals biti(a)\text{bit}_i(a)biti​(a) for every iii. Every left variable i<⌈n/2⌉i < \lceil n/2 \rceili<⌈n/2⌉ is driven by a distinct bit of aaa, and all ⌈n/2⌉\lceil n/2 \rceil⌈n/2⌉ bits of aaa are used, so distinct aaa give distinct restrictions to the left variables. For n=0n = 0n=0, aaa ranges over the single value 000 and the assignment has empty domain.

Reduction.rightAssignment

For n∈Nn \in \mathbb{N}n∈N and b∈{0,…,2⌈n/2⌉−1}b \in \{0, \dots, 2^{\lceil n/2 \rceil} - 1\}b∈{0,…,2⌈n/2⌉−1}, rightAssignmentn(b)\mathrm{rightAssignment}_n(b)rightAssignmentn​(b) is the assignment {0,…,n−1}→{true,false}\{0,\dots,n-1\} \to \{\mathsf{true},\mathsf{false}\}{0,…,n−1}→{true,false} given by

rightAssignmentn(b)(i)=bit i −˙ ⌈n/2⌉(b),\mathrm{rightAssignment}_n(b)(i) = \text{bit}_{\,i \,\dot-\, \lceil n/2 \rceil}(b),rightAssignmentn​(b)(i)=biti−˙​⌈n/2⌉​(b),

where −˙\dot-−˙​ is truncated natural-number subtraction (x−˙y=max⁡(x−y,0)x \dot- y = \max(x-y,0)x−˙​y=max(x−y,0)) and bbb is read as a bit string of length ⌈n/2⌉\lceil n/2\rceil⌈n/2⌉ (positions at or beyond that length read as false\mathsf{false}false, though that never happens here, see below). Consequences of the arithmetic:

  • For a left index i<⌈n/2⌉i < \lceil n/2 \rceili<⌈n/2⌉, the subtraction truncates to 000, so every left variable receives the same value, namely bit 000 of bbb (not false\mathsf{false}false).
  • For a right index i≥⌈n/2⌉i \ge \lceil n/2 \rceili≥⌈n/2⌉, variable iii receives bit i−⌈n/2⌉i - \lceil n/2 \rceili−⌈n/2⌉ of bbb; these positions range over 0,…,⌊n/2⌋−10, \dots, \lfloor n/2 \rfloor - 10,…,⌊n/2⌋−1, which are all inside the bit string.
  • For even nnn, all n/2n/2n/2 bits of bbb drive right variables. For odd nnn, the top bit of bbb (position ⌈n/2⌉−1=⌊n/2⌋\lceil n/2 \rceil - 1 = \lfloor n/2 \rfloor⌈n/2⌉−1=⌊n/2⌋) drives no right variable, so bbb and b+2⌊n/2⌋b + 2^{\lfloor n/2 \rfloor}b+2⌊n/2⌋ (for b<2⌊n/2⌋b < 2^{\lfloor n/2\rfloor}b<2⌊n/2⌋) induce the same values on the right variables. For n=1n = 1n=1 there are no right variables and both b∈{0,1}b \in \{0,1\}b∈{0,1} only affect variable 000 (a left variable) through bit 000.

Reduction.toOV

Given a SAT instance fff, consisting of a number of variables nnn and a list of clauses c0,…,cm−1c_0, \dots, c_{m-1}c0​,…,cm−1​ (each clause a finite, possibly empty, list of literals over the nnn variables, as described for fails), toOV(f)\mathrm{toOV}(f)toOV(f) is the following orthogonal-vectors instance: two lists, "left" and "right", each of exactly

N=2⌈n/2⌉N = 2^{\lceil n/2 \rceil}N=2⌈n/2⌉

Boolean vectors (indexed by a,b∈{0,…,N−1}a, b \in \{0,\dots,N-1\}a,b∈{0,…,N−1}), all of dimension mmm (one coordinate per clause, in the clause order of fff). Writing L={ i:i<⌈n/2⌉ }L = \{\, i : i < \lceil n/2\rceil \,\}L={i:i<⌈n/2⌉} for the left variables and R={ i:⌈n/2⌉≤i<n }R = \{\, i : \lceil n/2 \rceil \le i < n \,\}R={i:⌈n/2⌉≤i<n} for the right ones, the coordinates are

lefta[j]=true  ⟺  no literal ℓ∈cj has ι(ℓ)∈L and is true under leftAssignmentn(a),\mathrm{left}_a[j] = \mathsf{true} \iff \text{no literal } \ell \in c_j \text{ has } \iota(\ell) \in L \text{ and is true under } \mathrm{leftAssignment}_n(a),lefta​[j]=true⟺no literal ℓ∈cj​ has ι(ℓ)∈L and is true under leftAssignmentn​(a), rightb[j]=true  ⟺  no literal ℓ∈cj has ι(ℓ)∈R and is true under rightAssignmentn(b),\mathrm{right}_b[j] = \mathsf{true} \iff \text{no literal } \ell \in c_j \text{ has } \iota(\ell) \in R \text{ and is true under } \mathrm{rightAssignment}_n(b),rightb​[j]=true⟺no literal ℓ∈cj​ has ι(ℓ)∈R and is true under rightAssignmentn​(b),

where leftAssignmentn(a)\mathrm{leftAssignment}_n(a)leftAssignmentn​(a) sets variable iii to bit iii of aaa, and rightAssignmentn(b)\mathrm{rightAssignment}_n(b)rightAssignmentn​(b) sets variable i∈Ri \in Ri∈R to bit i−⌈n/2⌉i - \lceil n/2\rceili−⌈n/2⌉ of bbb (its values on LLL, which equal bit 000 of bbb, are never consulted here because left-side literals are filtered out of the right vectors). Clause indexing is always in range. Edge cases: both lists have the same length 2⌈n/2⌉2^{\lceil n/2 \rceil}2⌈n/2⌉ even though there are only ⌊n/2⌋\lfloor n/2 \rfloor⌊n/2⌋ right variables, so for odd nnn each right vector appears (at least) twice; for n=1n = 1n=1 every right vector is the all-true\mathsf{true}true vector. For n=0n = 0n=0, N=1N = 1N=1 and every clause is necessarily empty, so the single left and single right vector are both all-true\mathsf{true}true of dimension mmm. An empty clause cjc_jcj​ gives coordinate jjj equal to true\mathsf{true}true in every left and every right vector. A clause containing only left variables gives coordinate jjj equal to true\mathsf{true}true in every right vector (and symmetrically). If m=0m = 0m=0 the vectors are all the empty vector. The construction is a direct function of fff; nothing in it refers to satisfiability. (An OV instance in the dependencies also has a notion "there exist a,ba, ba,b with no coordinate jjj where both lefta[j]\mathrm{left}_a[j]lefta​[j] and rightb[j]\mathrm{right}_b[j]rightb​[j] are true\mathsf{true}true"; toOV itself does not state any relation between that notion and satisfiability of fff.)

HasFastSparseSAT

For natural numbers kkk, ddd ("density") and qqq, HasFastSparseSAT(k,d,q)\mathrm{HasFastSparseSAT}(k, d, q)HasFastSparseSAT(k,d,q) is the proposition:

There exist an algorithm AAA and natural numbers C,p,n0C, p, n_0C,p,n0​ with C>0C > 0C>0 such that for every SAT instance fff with nnn variables and clause list c0,…,cm−1c_0,\dots,c_{m-1}c0​,…,cm−1​ satisfying

  1. every clause has at most kkk literals (∣cj∣≤k|c_j| \le k∣cj​∣≤k for all jjj), and
  2. m≤d⋅nm \le d \cdot nm≤d⋅n,

there exists t∈Nt \in \mathbb{N}t∈N such that AAA decides the satisfiability of fff in exactly ttt steps on input enc(f)\mathrm{enc}(f)enc(f) with extra-bits parameter nnn (defined below), and if n≥n0n \ge n_0n≥n0​ then

tq≤C⋅2(q −˙ 1) n⋅(∣enc(f)∣+1)p.t^{q} \le C \cdot 2^{(q \,\dot-\, 1)\, n} \cdot \bigl(|\mathrm{enc}(f)| + 1\bigr)^{p}.tq≤C⋅2(q−˙​1)n⋅(∣enc(f)∣+1)p.

The quantifier order is: A,C,p,n0A, C, p, n_0A,C,p,n0​ are chosen once (depending only on k,d,qk, d, qk,d,q), then fff is arbitrary, then ttt may depend on fff. The decision requirement holds for all admissible fff, including n<n0n < n_0n<n0​; only the time inequality is restricted to n≥n0n \ge n_0n≥n0​.

Instances, satisfiability, encoding. A literal is a variable index in {0,…,n−1}\{0,\dots,n-1\}{0,…,n−1} with a polarity; clauses may be empty or contain repeated literals. fff is satisfiable iff there is an assignment α:{0,…,n−1}→{true,false}\alpha : \{0,\dots,n-1\} \to \{\mathsf{true},\mathsf{false}\}α:{0,…,n−1}→{true,false} such that every clause contains at least one literal true under α\alphaα; so an empty clause makes fff unsatisfiable and an empty clause list makes fff satisfiable (also when n=0n = 0n=0). The encoding enc(f)\mathrm{enc}(f)enc(f) is the list of natural numbers [n,m][n, m][n,m] followed, for each clause in order, by its length ∣cj∣|c_j|∣cj​∣ and then, for each literal in order, the pair (variable index, 111 if positive else 000). Hence ∣enc(f)∣=2+∑j(1+2∣cj∣)|\mathrm{enc}(f)| = 2 + \sum_j (1 + 2|c_j|)∣enc(f)∣=2+∑j​(1+2∣cj​∣).

Algorithms and the machine. An algorithm AAA consists of a finite list of source instructions and a positive natural number ϕ\phiϕ ("word factor"). Given an input list xxx of naturals and an extra-bits parameter eee, the word width is

w=ϕ⋅(e+⌊log⁡2M(x)⌋+1),M(x)=max⁡(∣x∣,max⁡ixi)+1,w = \phi \cdot \bigl(e + \lfloor \log_2 M(x) \rfloor + 1\bigr), \qquad M(x) = \max\bigl(|x|, \max_i x_i\bigr) + 1,w=ϕ⋅(e+⌊log2​M(x)⌋+1),M(x)=max(∣x∣,imax​xi​)+1,

(with ⌊log⁡2⌋\lfloor\log_2\rfloor⌊log2​⌋ the floor binary logarithm); here x=enc(f)x = \mathrm{enc}(f)x=enc(f) and e=ne = ne=n. The source code is compiled to a word RAM program over www-bit words (values in {0,…,2w−1}\{0,\dots,2^w-1\}{0,…,2w−1}) in the "multiplication" model: instructions are copy, binary operation (addition, subtraction, multiplication all mod 2w2^w2w; left/right shift by the unsigned value of the second operand with zero fill; bitwise AND, OR), bitwise NOT, "store the word width" (writes w mod 2ww \bmod 2^wwmod2w into a cell; this is the only native constant), unconditional jump to a fixed instruction index, conditional branch on an unsigned comparison (===, <<<, ≤\le≤) to a fixed index, and halt. Operands are immediates (fixed natural-number literals reduced mod 2w2^w2w) or memory reads; destination and source addresses are direct (a fixed cell number) or indirect (the unsigned value stored in a fixed cell). Each executed instruction advances the program counter by one (unless it jumps/branches), and halt sets a halted flag. A step is defined only when the machine is not halted and the program counter indexes an existing instruction; otherwise no step exists (in particular, falling off the end of the program is a stuck state, not a halt).

Deciding in exactly ttt steps. "AAA decides PPP in ttt steps on input xxx with extra bits eee" means: with www as above, starting from the initial state in which cell 000 holds 000, cell a≥1a \ge 1a≥1 holds xa−1 mod 2wx_{a-1} \bmod 2^wxa−1​mod2w for a≤∣x∣a \le |x|a≤∣x∣ and 000 for a>∣x∣a > |x|a>∣x∣, program counter 000, not halted, there is a sequence of exactly ttt successive successful steps ending in a state sss with

  • sss halted,
  • the word in cell 000 of sss equal to 000 or to 111, and
  • (cell 000 of sss equals 111)   ⟺  P\iff P⟺P, here PPP = "fff is satisfiable".

Because the initial state is not halted and only the halt instruction sets the flag, t≥1t \ge 1t≥1 and ttt counts every executed instruction including the final halt. Since each step is a function of the state, at most one such ttt exists for given AAA and fff. Input loading costs nothing.

Edge cases of the parameters.

  • q=0q = 0q=0: q−˙1=0q \dot- 1 = 0q−˙​1=0 and t0=1t^0 = 1t0=1, so the time inequality reads 1≤C (∣enc(f)∣+1)p1 \le C\,(|\mathrm{enc}(f)|+1)^p1≤C(∣enc(f)∣+1)p, which holds automatically since C≥1C \ge 1C≥1; only correctness/halting remains.
  • q=1q = 1q=1: the inequality is t≤C (∣enc(f)∣+1)pt \le C\,(|\mathrm{enc}(f)|+1)^pt≤C(∣enc(f)∣+1)p (no exponential factor).
  • q≥2q \ge 2q≥2: t≤(C 2(q−1)n(∣enc(f)∣+1)p)1/qt \le \bigl(C\, 2^{(q-1)n} (|\mathrm{enc}(f)|+1)^p\bigr)^{1/q}t≤(C2(q−1)n(∣enc(f)∣+1)p)1/q.
  • d=0d = 0d=0, or n=0n = 0n=0: only instances with no clauses at all are quantified over.
  • k=0k = 0k=0: only instances whose clauses are all empty are quantified over.
  • The polynomial exponent ppp is unrestricted, and CCC, ppp, n0n_0n0​ may not depend on fff.
Human review
  • Endorsed by Community (Bot) · Oct 28, 2026

  • Endorsed by wurtle · Oct 28, 2026

    Confirmed by the mission captain (proposal self-audit).

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