perf(sis): probe ADPS16 L2 rank frontiers - #346
Conversation
PR SummaryHigh Risk Overview SIS / tables: Replaces the retired BDGL16 Euclidean path with 128-bit quantum ADPS16 pricing and a new Planner: Late folds (level ≥ 3, single chunk) may emit multiple inner-commit candidates — L∞ plus widening L² buckets — and Proof / prover / verifier: Introduces Tooling: PCS test shapes and profile reporting account for diagnostic bytes; planner tests document updated proof-payload byte expectations and guard that L² candidates cannot terminate directly. Reviewed by Cursor Bugbot for commit be2fbe5. Bugbot is set up for automated code reviews on this repo. Configure here. |
Keep one best recursive split per secure A rank so a tighter L2 floor does not erase higher-rank paths that lead to a cheaper suffix. Price the diagnostic collision with the challenge L2 norm and squared embedding operator norm, and cover the fp64/fp32 five-fold schedules with a regression test.
Use the unchecked Gamma=17 negacyclic-convolution operator cap in the diagnostic collision formula instead of the challenge coefficient L2 norm. Lock the fp64 and fp32 planner regressions to the resulting 2^48 collision bucket and corrected tail geometries.
|
Planner-frontier fix and security-model correction are now on the final head The planner bug was that recursive search kept only the locally cheapest A matrix. It now keeps one best continuation per distinct secure A rank, plus the ordinary L-infinity fallback, so suffix DP can expose genuine fold and tail changes. During the audit I found that the first L2 experiment used coefficient where At diagnostic
The earlier five-block tails at fp64 75,929 B and fp32 73,136 B came from the invalid coefficient-L2 substitution. They are only an optimization upper bound, not a security result. Reaching that All local validation listed in the revised PR body passes. Exact-head GitHub CI is still running. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Reviewed by Cursor Bugbot for commit be2fbe5. Configure here.
| self.output_rank | ||
| ))); | ||
| } | ||
| return Ok(()); |
There was a problem hiding this comment.
L2 validate skips key audit
Medium Severity
When unchecked_l2_collision_sq is set, validate returns after only checking the L2 rank floor. It never runs audit_commit_matrix_fields, so stale table_digest, mismatched sis_table_key.role, and other key-identity checks are skipped. The schedule SIS audit now relies on this path for A matrices, so malformed L2-marked keys can pass where ordinary matrices would fail. That gap is separate from the intentional missing norm relation check.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit be2fbe5. Configure here.
|
Closing this unchecked diagnostic. It is superseded by the sound selective L2 design: late nonterminal folds may add a verified L2 route while every fold retains the existing L-infinity route. I will link the replacement draft here once it is open. |
|
Replacement draft: #369. It starts from current main and implements the sound selective design rather than the unchecked global diagnostic. |


Caution
This is an unsound diagnostic. The prover sends an observed squared L2 norm and the verifier binds the payload to the transcript, but no sumcheck proves the norm relation. The diagnostic also assumes a negacyclic-convolution operator-norm rejection cap
Γ = 17that the sampler does not enforce. This PR makes no production security claim and must not merge as written.Summary
This draft measures whether a late-fold L2 certificate can reduce Ajtai A ranks and proof size on top of PR #343.
It now:
The corrected small-field result is narrower than the earlier experiment. At
Γ = 17, fp32 D128 saves 1,989 sampled bytes versus PR #343, while fp64 D128 grows by 114 sampled bytes. Neither profile reduces its fold count. The previously reported five-block tails depended on substituting coefficient||c||₂for convolution operator norm and are not a defensible security result.Diff metadata
quang/compressed-commitments-pr34125cb450c19ea4ea70b548631f7f6f12c16f67630b7b9290061167eb25c04e95882719de3a34a18b4be2fbe5c4f0a21707020ef1394d8232d500b3c8eMotivation
Collision security is priced in Euclidean norm by ADPS16. The existing folding path certifies an L-infinity envelope, which can be much more conservative for a late folded witness whose energy is spread over many coordinates.
The diagnostic asks a concrete question: if a future protocol proves a whole-witness L2 cap only at late folds, which A ranks and suffix schedules would the planner select, and what proof bytes would that save?
Two planner details matter.
Change-surface overview
Γ²and embedding operator normu128accumulation and diagnostic serializationAKITA_L2_DIAGNOSTIC_GRIND_STARTvaries every fold levelExact security formula
Let
where
Γis the negacyclic-convolution operator norm of the ring challenge andEis the squared L2 operator norm of the fixed trace-subfield embedding.The two-response extraction factors contribute
8², so the complete scalar A-collision bound isFor current profiles:
E = 1;E = 2.At the diagnostic
Γ = 17andS_cap = 2³²:The SIS instance uses
Width is already present in
m. It must not multiplyC_Aagain.The generated Euclidean tables use the 128-bit quantum ADPS16 cost model. This PR removes the older BDGL16 route.
Why coefficient L2 is not the operator bound
For the D128 production shell, every challenge has 31 coefficients of magnitude one, so
That number controls average random-sign energy:
It does not bound worst-case ring multiplication. Negacyclic multiplication by
chas operator normover the negacyclic roots
ζ_j. Security needs this maximum. Rejection sampling may enforce a smallerΓ, but accepted challenge entropy must still be proved separately.ADPS16 table and bucket semantics
The checked-in L2 tables map
The maximum
2^84value in bucket rounding is table coverage, not a witness cap. The witness diagnostic cap is the separateS_cap = 2^32.To expose globally useful rank paths without adding a second serialized rank field, the planner conservatively widens the collision bucket through supported powers of two and keeps one candidate whenever the secure rank changes. Every retained bucket upper-bounds the same exact collision and is rechecked by the ADPS16 table during schedule expansion.
Candidates with the same A rank are equivalent for downstream geometry, so the frontier is deduplicated by rank. Deduplicating by
(rank, bucket)caused many equivalent suffix states and excessive catalog-generation memory.Planner root cause and fix
The original diagnostic constructed the ordinary L-infinity matrix and overwrote it when a smaller L2 matrix existed. That removed higher-rank paths before suffix optimization.
The fixed search:
This preserves the globally useful alternative while keeping one canonical matrix-construction path. Test-only unpruned oracle fixtures were reduced from arity 16 to arity 12 because they intentionally materialize every complete suffix and otherwise become exponential once legitimate rank branches exist. The arity-28 small-field regression covers the production-size frontier separately.
Prover and verifier diagnostic path
At a marked late fold, the prover:
u128arithmetic;The verifier:
S = ||z||₂²;S <= S_cap;op_norm(c) <= 17.A marked L2 candidate cannot become a direct terminal response because the terminal proof does not carry this diagnostic payload.
Corrected fp64 and fp32 results
These runs use D128 one-hot,
num_vars = 28, the regenerated catalog,Γ = 17, and the ordinary non-ZK terminal response.Terminal Golomb payload varies slightly with the sampled witness. Fold-byte changes are structural.
fp64 schedule
The diagnostic does not beat PR #343 for fp64, so a production planner should leave it disabled for this profile.
fp32 schedule
The rank-7 late path saves proof bytes, but it does not reduce the number of folds.
Why the five-block tail disappeared
The invalid coefficient-L2 experiment rounded the small-field collision to
2^44. At that bucket the planner found:3,3,3and a five-block terminal;6,6,6and a five-block terminal;Those numbers are useful only as a diagnostic upper bound on the optimization opportunity. They are not a security result.
With
S_cap = 2^32andE = 2, reaching bucket2^44requiresUnder the current integer threshold representation, that means
Γ <= 5. Parseval givesso an integer cap of five accepts no challenge in this shell. Experiments at
Γ = 17,12, and8all produced the same seven-block fp64 and six-block fp32 tails. The fold-count reduction therefore does not survive the correct operator-norm model.Norm sweep
I varied
AKITA_L2_DIAGNOSTIC_GRIND_STARTover 32 values. This changes every level's fold challenge while holding the polynomial and initial seed fixed.2^32capAll 128 marked-fold observations were below
2^32. This supports honest-prover liveness for the sampled workloads. It does not replace a concentration argument or a verifier-enforced cap.Small-field embedding and the terminal
The factor
E = 2appears because the fixed q64/q32 trace-subfield embedding has squared L2 operator norm two. It is part of recursive A-collision pricing and cannot be dropped merely because the outer field is small.The current terminal is still priced and checked through the existing L-infinity path. The clear terminal witness is sent directly and is not decomposed into a next-level
z_hat, so this PR does not apply an L2 embedding factor or an L2 rank cutover there. A future clear-witness terminal analysis should derive its own kernel/operator bound from the verifier's direct checks rather than automatically copying the recursive embedding factor.Sound protocol path
No zero-knowledge machinery and no four-squares proof is needed for the non-ZK rollout described here.
||z||₂²with a batched sumcheck.zto the existing digit-decomposed virtual witnessz_hat.op_norm(c) <= Γ, and an exact counting or rigorous lower-bound argument proves at least 128 bits of accepted challenge support.For a small base field, the full integer norm may wrap. If
the verifier can instead certify the limb Gram terms
Symmetry keeps only
a <= b, with a factor of two off diagonal. Reconstruction still needs a large enough integer range or extension field to exclude modular wraparound.Security and verifier safety
This draft deliberately stops before sound verification.
If both L-infinity and L2 checks exist in a future protocol, accepted collisions lie in the intersection of the two sets. The planner may use whichever independently sound analysis yields the smaller secure rank. The estimates are not multiplied or blended.
Breaking changes and preserved behavior
This is a diagnostic protocol and generated-identity change. Marked L2 schedules add transcript and wire data and therefore are not compatible with proofs generated before this branch.
Unmarked schedules retain the existing layout and do not gain a descriptor byte. L-infinity-only pricing, multi-chunk early folds, tensor challenges, recursive setup prefixes, and direct terminal verification remain supported.
Commit map
e6726f9d9— add the unchecked ADPS16 L2 planning and wire probe;49ad5b24b— account for the complete diagnostic proof payload;513bba7e7— preserve recursive A-rank frontiers in suffix planning;be2fbe5c4— replace coefficient L2 with convolution operator-norm pricing.Validation at
be2fbe5c4Local validation completed:
akita-types: 380 passed, 1 ignored;akita-planner --features catalog-gen: 35 passed;akita-typesandakita-planner;GitHub checks restarted for this exact head and are still pending. Earlier-head green checks are not counted as validation of
be2fbe5c4.Remaining work
A production rollout still needs:
z_hat;Γ;Sources
Reviewer map
Suggested reading order:
crates/akita-sis-estimator/src/euclidean.rscrates/akita-types/src/sis/ajtai_key.rscrates/akita-types/src/sis/norm_bound.rscrates/akita-planner/src/schedule_params/candidate/recursive.rscrates/akita-planner/src/schedule_params/suffix_dp.rscrates/akita-prover/src/protocol/core/fold/mod.rscrates/akita-verifier/src/protocol/core/fold/mod.rscrates/akita-types/src/proof/wire.rscrates/akita-planner/src/schedule_params/tests.rs