Repository navigation
Feat/is whh - #1022
Feat/is whh#1022
Conversation
d2834a8 to
b82adaf
Compare
|
/ai-review |
Codex Code ReviewNo actionable issues found in the PR diff. Reviewed statically for safety, correctness, significant performance issues, and dead code; no builds or tests run. |
|
Static review of the IS_WH table, the What I checked:
One non-blocking comment, inline: Nit: Not covered: the PR branch wasn't checked out in the sandbox, so I reviewed from |
AI ReviewPR #1022 · 28 changed files FindingsNo non-rejected structured findings were reported. Reviewer Lanes
Native Codex and Claude reviews run separately and post their own comments. They are not included in this structured provenance report. Raw lane outputs, candidates, final issues, and model metrics are uploaded as workflow artifacts. |
3b11a2c to
6598fc9
Compare
|
/bench |
Benchmark — real block (
|
| Metric | main | PR | Δ |
|---|---|---|---|
| Peak heap | 46399 MB | 47079 MB | +680 MB (+1.5%) ⚪ |
| Prove time | 101.718s | 102.980s | +1.262s (+1.2%) ⚪ |
✅ No significant change.
Prove-time spread 1.6% (102.980s / 104.448s / 102.766s)
Commit: 0a78672 · Baseline: built from main · Runner: self-hosted bench
(lo = two halves, hi = the word). Needed for the KECCAK state_ptr.
and use them for the KECCAK state_ptr. IS_WH range checks the top 48 bits of an address, with one row per distinct (word, half) pair. Its multiplicity is bounded with IS_B20, as in down from 511 and 134. TableCounts gets an is_wh field, so RECURSION_INPUT_VERSION goes to 4 and the statement tags to V5.
… both the trace and the BITWISE collector, instead of deduplicating the full key list twice. Also fix two comments: the at-most-one check is not only for accelerators, and bus ID 29 was the EC_SCALAR ServeK bus, not an ECSM one.
… Word in an IS_WH row, and a KECCAK state_ptr resplit that keeps the ADD and the memory address but puts half_mid out of range. Each one fails if its IS_HALF send is removed. Also add IS_WH to the IR, OOD and GPU differential test lists, rename its MU_MAX to IS_WH_MU_MAX and pin it to the IS_B20 range, and fix the at_most_one comment: for IS_WH the count is what bounds the μ sum.
…a 64 KiB boundary (new test_keccak_64k program), a continuation run where only the keccak epoch ships IS_WH, and a recursion blob whose inner proof has IS_WH. The two IS_WH range forgeries now check that the bus balance is what rejects them, and the Word one gets its own control. Also add IS_WH to the GPU test list and fix a few stale bits: the TableCounts doc, KECCAK's interaction capacity, the debug bus legend (stopped at ID 21) and the no-accelerators test.
7839475 to
7dfe593
Compare
…ecutor tests, as its comment says, and have the two IS_WH forgery tests run the real verifier again next to the bus check.
|
/ai-review |
Codex Code ReviewNo actionable issues found in the PR diff. Reviewed statically; no builds or tests were run. |
|
Reviewed statically. I found no blocking issues. Checked and OK:
One low-priority readability nit: |
Resolve the two conflicts with #984 (COPY replaces COMMIT): - trace_builder.rs BITWISE collectors: keep COPY's collector from main and this branch's KECCAK_RND padding count (keccak_rnd::padding_are_bytes). - skip_empty_tables_tests.rs: COMMIT left the optional-table list (17 tables); keep this branch's ARE_BYTES exemption imports.
- dvrm.rs / trace_builder.rs: DVRM's MSB16 and NEG ZERO lookups are counted once per row, so an op split at MU_MAX sends them once per row. - trace_builder.rs: KECCAK_RND no longer sends HWSL. - continuations_design.md: LT and MUL bound their own mu with a constant-1 ARE_BYTES send.
Brings in main's #984 (COPY replaces COMMIT) through #1016's branch. Conflicts resolved by keeping both sides: - TableCounts / statement / VmAirs / Traces: drop commit, keep is_wh and copy. - BusId: IS_WH = 32 next to COPY's CopyNext = 33. 32 was one of the two IDs main's comment listed as unused; 29 and 34 stay unused. - RECURSION_INPUT_VERSION 5 with a v5 note: main's v4 already means the layout without commit, so is_wh needs its own number. - Tests: counts 20 / 18 / 6, the accelerator test renamed to a_run_without_accelerators_omits_all_five_and_is_wh, COMMIT's omission tests dropped as on main, and main's committed-output test kept with this branch's "dropping ..." message style.
- lib.rs: eighteen optional chips, not nineteen (COMMIT left, IS_WH joined). - copy.rs: the prover now has an IS_WH table; COPY keeps four IS_HALF lookups where the spec uses IS_WHH, and moving them is a follow-up. - skip_empty_tables_tests.rs: the cap covers the five accelerators and IS_WH; COPY is among the always-present tables. - gpu_constraint_interp_real.rs: 27 tables. - continuations_design.md: validate() also caps IS_WH at one table, which is what bounds its multiplicity sum.
Conflict: lib.rs, VmAirs::new builds both the IS_WH AIRs and the pinned REGISTER AIR. Changes the merge needs without a textual conflict: - cpu_start counts the IS_WH sub-proofs, which air_refs places after the accelerators and before the CPU tables; without it the verifier would read CPU heights one sub-proof early in every proof that ships IS_WH. The air_refs debug check and cpu_proof_start_matches_air_refs_layout (64 masks, is_wh included) follow. - is_wh_tests: VmAirs::new takes the CPU heights and the REGISTER commitment; the prover commits to its own trace.
Merge after #1016.
Implements the spec changes from #1003 and #1015, plus the
IS_WHmultiplicity bound from #1017.IS_WHtable: one row per distinct(Word, Half)pair, range-checks its three halves with multiplicity μ and bounds μ withIS_B20[μ]. Pairs sent more than 2^20 − 1 times are split over several rows.is_whh()helper for the template: sendsIS_WH[word_hi, half_mid]andIS_HALF[half_lo]. The caller's cond must be a bit.state_ptrmoves fromDWordHLtoDWordWHH: 486 columns and 84 interactions instead of 511 and 134.TableCountsgets anis_whfield (at most one table), soRECURSION_INPUT_VERSIONgoes to 5 (main's v4 is the layout withoutcommit) and the statement/epoch tags to V5.IS_B20sends, same reasoning asARE_BYTES.