Greedy selection of random parity tests #
A test list γ = ((e₁, c₁), …, (e_P, c_P)) of P pairs of an index eⱼ < m and a bit cⱼ
represents the test row testRow γ over 𝔽₂, whose coordinate e is the sum of the bits cⱼ
with eⱼ = e (Cslib.BitString.testRow). The row rejects a bit string z when its parity
testRow γ ⬝ᵥ z = Σⱼ cⱼ z_{eⱼ} (Cslib.BitString.testParity) is true.
If z is nonzero with at least m / P ones, then at least a quarter of the (2m) ^ P lists reject
z (Cslib.BitString.pow_le_four_mul_card_testParity_eq_true). Exactly
2 ^ (P - 1) (m ^ P - (m - weight z) ^ P) lists do: for indices that hit a one of z, the parity
is the parity of the coefficients on a nonempty set, which is balanced
(Cslib.card_filter_parityOn_eq); and (1 - 1/P) ^ P ≤ e⁻¹ < 1/2.
Averaging then gives a deterministic procedure [OpenAI2026ETH, Lemma 6.2]. Given points x
with violation vectors v x, a list of rows accepts x when every row has parity zero on
v x. Starting from rows after which every accepted point with a nonzero violation vector has at
least m / P violations, append 3 n rows testRow γ, each minimizing the number of accepted
points. Each step keeps at most three quarters of the accepted points with nonzero violation
vectors, so with at most 2 ^ n points the final rows accept exactly the points whose violation
vector is zero (Cslib.BitString.numPassing_greedy). The procedure only compares counts of
accepted points, which exceed the unknown number of zero-violation points by the number of
accepted bad points (Cslib.BitString.numPassing_eq).
Main definitions #
Cslib.BitString.testRow,Cslib.BitString.testParity: the row of a test list and its parity.Cslib.BitString.PassesTests,Cslib.BitString.numPassing: acceptance by a list of rows, and the number of accepted points.
Main results #
Cslib.BitString.weight_testRow_le: a test row of list lengthPhas Hamming weight at mostP.Cslib.BitString.two_mul_card_testParity_eq_true: the exact number of rejecting lists.Cslib.BitString.pow_le_four_mul_card_testParity_eq_true: a quarter of the lists reject.Cslib.BitString.four_mul_card_accept_le_of_forall_le: a minimizing list accepts at most three quarters of a set of such vectors.Cslib.BitString.numPassing_greedy: the greedy procedure after3 nrounds.
References #
Test lists #
Exactly half of the coefficient strings have inner product true with a nonzero string: the
inner product with w is the parity on the support of w (dotProduct_eq_parityOn), which is
balanced (Cslib.card_filter_parityOn_eq).
The exact number of rejecting lists: 2 ^ (P - 1) (m ^ P - (m - weight z) ^ P), written
without division.
Averaging and iteration #
Averaging. A list minimizing the number of accepted strings accepts at most three quarters
of a set of nonzero bit strings, each with at least m / P ones.
Iteration. A sequence of naturals that starts at most 2 ^ n, with n ≥ 1, and shrinks
by a factor of at least 3/4 at each step vanishes after 3 n steps, since
(3/4) ^ (3n) 2 ^ n = (27/32) ^ n < 1.
The greedy procedure #
N(A) = #F + D(A): every point with zero violation vector is accepted, so the number of
accepted points is the number of such points plus the number of accepted points with a nonzero
violation vector.
Greedy selection of parity tests [OpenAI2026ETH, Lemma 6.2]. Suppose that after the
initial rows A 0, every accepted point with a nonzero violation vector has at least m / P
violations, and that there are at most 2 ^ n points, with n ≥ 1. Append rows
A (i + 1) = A i ++ [testRow (γ i)], where each list γ i minimizes the number of accepted
points among all lists. Then after 3 n rounds the rows accept exactly the points with zero
violation vector.