Repository navigation
Conversation
The table sumcheck needs each table's sum sigma_t against eq(zeta[..tau_t])
before its first round, for the line a waiting table contributes. The bus
computed it in a pass of its own ("Bus tables": eq_sums over every column
of every table, plus the forms' column products), which read every
committed table column once more than the sumcheck does: 0.56 GB at
--sphincs 500.
eq factors, so sigma_t = (1 + zeta_m) p(0) + zeta_m p(1) at m = tau_t - 1,
for the endpoints p(b) of the table's join-round cofactor. That message
reads no challenge, only eq(zeta[..m]), which is what the batch's eq table
has shrunk to by then, so the sumcheck now takes it, with both endpoints,
before its first round (message_k returns [p(0), p(1), quadratic], the
upper rows' linear forms being the lower rows' plus those of lo + hi), and
the join round sends the stored one; a debug assertion checks that a table
that has not joined is asked only on that round. The batch's starting
claim is the bus's derived target, sum_s xi^(base+s) (V_s(zeta) less the
framework blocks), as on the verifier, and a debug assertion checks the
tables' sums against it; eq_sums, tables_and_prods_at, BusForm::sum_at and
BusProof.sigmas go.
The messages are the same field elements, and the target equals the old
claim on an honest witness, so the proof is byte for byte the same (leaf
proofs of `recursion --n 1 --sphincs-per-leaf 16 --leaf-log-inv-rate 2`
match the base's sha256). round_messages_match_naive_evaluation checks
both endpoints, and a new test checks the derived sum against
sum_z eq(zeta[..tau], z) P(z) from one row to 2^12; the release tests with
debug assertions on check the target.
nconsigny
force-pushed
the
pr/bus-sigma
branch
from
November 11, 2026 20:11
40bee69 to
24a46c1
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The table sumcheck needs each table's sum sigma_t against eq(zeta[..tau_t]) before its first round. Until now the bus computed it in a pass of its own ("Bus tables":
eq_sumsover every column of every table, plus the forms' column products), which reads every committed column once more than the sumcheck does (about 0.56 GB ataggregate --sphincs 500). Since eq factors, sigma_t = (1 + zeta_m) p(0) + zeta_m p(1) at m = tau_t - 1, where p(0), p(1) are the endpoints of the table's join-round message, and that message reads no challenge. So the sumcheck now takes the join message with both endpoints inTable::new, the join round sends the stored one, and the batch starts from the bus target the verifier derives.eq_sums,tables_and_prods_at,BusForm::sum_atandBusProof.sigmasare removed (net -60 lines).Measured on base e5d75f8, Ryzen 9 9955HX3D (Zen 5), 16 threads (
taskset -c 0-15),--repeat 3 --cooldown 1, medians of paired ABBA differences (branch - base) with [min, max], 6 pairs on rate-1/4 workloads, 3 elsewhere. S500/S480 =aggregate --sphincs 500/480, X1400 =aggregate --xmss 1400.Caveats:
The proof is byte for byte the same, and the verifier is unchanged:
recursion --n 1 --sphincs-per-leaf 16 --leaf-log-inv-rate 2have the base's sha256 (199,521 B). A reviewer checked three more leaf shapes. All 458 proofs of the benchmark runs verified.Tests:
join_message_gives_the_table_sum: checks the derived sigma against sum_z eq(zeta[..tau], z) P(z), for tau in {0, 1, 3, 4, 5, 12}.round_messages_match_naive_evaluationnow checks both endpoints of the join message.leanvm_core/tests/verifiers.Memory: no change in peak RSS. The join messages of shorter tables need their own eq tables, one per distinct height ((2^17 + 2^16) x 24 B, about 4.7 MB at S500). They are built and dropped before the first round.