Repository navigation
Conversation
Pin the root-profile identity bytes against a hand-assembled byte string and the digit-base tags against literals. Move the root_encoding module declaration and the shared no-wrap helper above the test modules.
Documentation blast radius (advisory)These regions may need doc/spec/book updates based on changed paths. Changed files in this PR: 16
|
PCS Profile Benchmark
13 of 13 profiles passed. Times are medians of Each sample verifies the same proof first with the configured multi-threaded pool and then with one thread. Both timings reuse the same verifier setup. Merge-base comparisons are available for Benchmark shards
Public opening statements
One-hot profiles generate deterministic witnesses with one Direct evaluates the public setup contribution during Stage 2. Recursive carries the same check through a Stage 3 setup-product sumcheck. Both modes execute the complete fold schedule and terminal verification. The chunked profiles Generated profiles may select different A, B, and D ring dimensions at different fold levels. The short profile names omit those dimensions. Each sample generates deterministic witnesses and opening points, prepares setup, commits, proves, serializes the proof, checks its size, prepares verifier setup, and verifies the claimed openings. It does not test malformed proofs. Phase time
Proof size and protocol shape
Grinding retries are rejected attempts at each fold, listed in measured-run order. Zero means the first sampled nonce was accepted. Each multi-group profile has two precommitted nv16 singleton polynomials and two polynomials in the displayed final group. Native proof accounting
Memory and setup size
Deltas are shown only for profiles with a matching merge-base case. Negative is smaller or faster. The uploaded |
CI test timing
Run summary
Wall time spans 2 parallel nextest slice shards. Slowest tests
Regressions vs mainNo per-test regressions above the threshold. New slow testsNo new tests ≥30s vs main baseline. |
…ed helpers precisely
|
/ai-review |
|
AI review attempt 1/3 reserved. Failed or incomplete attempts also count toward this PR's limit. |
There was a problem hiding this comment.
Usefulness: benefit supported. The change fills a concrete gap between the existing certified CSV/source-comparison ledger and runtime parameter admission. It centralizes rank selection, geometry, enforced digit ranges, and no-wrap bounds without adding estimator dependencies to runtime consumers or changing existing proof paths. The generated-table drift tests and independent parity oracles support the additional maintenance cost. Deferring setup binding and protocol integration is consistent with the stated numerical-admission scope.
Approval not recommended: new P0-P3 findings in this review.
| # LaBinius binary-root matrix and shape admission | ||
|
|
||
| Status: active | ||
| Book-chapter: book/src/foundations/security.md |
There was a problem hiding this comment.
[P3] Can we point this at book/src/how/security.md (or another existing owning chapter) and use the metadata-table format from specs/TEMPLATE.md? book/src/foundations/security.md doesn't exist, and check-book-chapter-paths.sh only scans | Book-chapter ... | rows, so this leaves a dead ownership reference that the documentation guardrail silently skips.
…ed by the security chapter
|
/ai-review |
|
AI review attempt 2/3 reserved. Failed or incomplete attempts also count toward this PR's limit. |
There was a problem hiding this comment.
Usefulness: benefit supported. The PR fills the gap between the existing offline certified-width lookup and runtime numerical admission. It centralizes certified rank selection, geometry, enforced digit ranges, and no-wrap calculations without bringing the estimator into runtime dependencies or changing existing proof paths. The generated-table drift tests and independent parity oracles provide useful safeguards for the added maintenance surface. Deferring matrix setup binding and protocol integration is consistent with the explicitly limited scope.
Recommended for approval: no unresolved findings in this automated review.
|
Superseded by #227, which carries the SIS admission, the root profile and the root shape for the single commitment prime. The earlier stack was re-cut into four pull requests: #226 (arithmetic), #227 (parameters), #228 (root reduction) and #229 (polynomial commitment). Closing without merging; the branch is left in place. |
Summary
This PR makes the certified LaBinius infinity-norm width table usable at runtime and adds the first closed binary-root profile with its derived shape, behind the existing off-by-default
labinius-sisfeature ofakita-params. Tracking issue: #45.It now provides:
labinius_min_secure_rank(prime, degree, eta, width): a lookup over a generated table emitted from the certified CSVcrates/akita-sis-estimator/data/labinius_infinity_width.csv(the CSV is unchanged), with a digest that binds the table version;LabiniusRootProfile::D648P128BoundedW46Delta16: D = 648, k = 4, P = 2^128 − 2^32 + 22537, bounded challenge weight 46 (Gamma_inf = 92), accepted response interval[−32768, 32767], with stable tags and identity bytes;LabiniusRootShape::derive(profile, log_num_cells, log_fold_width, lambda_fold): geometry, fold budget, honest-response admission,eta_A = 4·Gamma_inf·Delta, minimum certified rank, image and A-quotient lengths, and the direct parity bounds;LabiniusRootShape::derive_encoding(base)for digit bases b in {1, 2, 4}: enforced centered power-of-two ranges for the response, parity quotient and parity carry, one signed-digit map, the no-wrap check from the enforced magnitudes, and the lengths of the committed response digit table (in the canonicalakita_types::TrinomialResponseLayoutorder), the parity quotient and carry integer counts, and the image table.This is numerical matrix and shape admission. It is not full root admission; see "What this does not provide".
Normative design:
specs/labinius-root-admission.md.Diff metadata
3d69096eadb129c097e4fc2e4f2d289e82e0ea1a(dev)991b6765188054a53c9495744c487378ce535cf8Independent of #198 (the clear opening oracle); the two touch disjoint files.
Motivation
The merged LaBinius foundations certify SIS widths offline and bound one source occurrence, but nothing turns "a table of 2^n binary cells folded C at a time" into an admitted rank, an accepted response interval, and the exact lengths and ranges of the witness that the succinct root will commit. #198 admits geometry and the no-wrap comparison bound but does not consult the width table. Every later slice (lowered root relation, combined alphabet and relation sumcheck, planner rows) needs these numbers from one place, derived from enforced ranges rather than honest bounds.
Change-surface overview
generated_width_table.rsemitted from the CSV by--from-csv;width_table.rslookup by certified dominationroot_profile.rs)root_shape.rs: geometry, admission order, parity bounds,check_parity_no_wraproot_encoding.rs:LabiniusDigitBase,LabiniusSignedDigitRange,LabiniusRootEncodinglabinius-sisfeature[]akita-challenges/labinius-challenges(the profile reads the admitted challenge profile)--from-csvemission and a two-direction CSV/table testCONTRIBUTING.mdtest-labinius-sisjobDerivation
For the direct parity equation
B(v mod 2) = U(c mod 2)lifted to the integers inZ[X]/(X^162 + X^81 + 1):H = d·M·B_v + C·L1(c);Phi = X^162 + X^81 + 1gives a quotient bounded by2Hand a remainder bounded by3H, so the carry is bounded byfloor(3H/2);H + 3·2^(e_Q−1) + 2·2^(e_K−1) < P, using the enforced offsets.check_parity_no_wrapandderive_encodingshare one formula.The signed-digit map is
value = sum_i digit_i·2^(b·i) − 2^(e−1), with accepted interval[−2^(e−1), 2^(e−1) − 1];eis the smallest multiple ofbwhose interval contains the honest bound.Golden values at (log N, log C) = (22, 8),
lambda_fold = 128, checked by the tests and recomputed independently in review:For all three bases: padded coefficient length 1024, parity quotient 161 integers, parity carry 162 integers, image table length 262,144 (log 18).
H = 86,973,099,520; honestB_Q = 173,946,199,040,B_K = 130,459,649,280;eta_A = 24,116,880; certified rank 1; natural image length 165,888; A-quotient length 647.Committed table layout
The committed successor table is the response digit table alone, in the order of
akita_types::TrinomialResponseLayout: digits innermost, then the coefficient index padded to a power of two, then the ring element index.The parity quotient (
d − 1integers) and carry (dintegers) are not part of the committed table. This PR fixes their counts and enforced ranges; whether a protocol sends them in the clear and range-checks them or commits digits is the root protocol's choice, and the no-wrap condition uses the enforced offsets either way.akita-paramscannot depend onakita-types, so the encoding computes these lengths itself with checked arithmetic and the spec names the layout.Padding contract: every position of the response table, including coefficient positions
t >= D, is alphabet-checked, public relation weights are zero there, and honest padding is the zero digit. There is no selector and no support proof.Extension contract (
docs/branches.md)crates/akita-params/src/sis/labinius/and in the estimator's LaBinius example and test. Files that also exist onmainchange only to register it (labinius.rsmodule list and re-exports, one Cargo feature line, oneCONTRIBUTING.mdparagraph).labinius-sisoff, nothing new compiles in. With it on, nothing is selected: the profile and shape are plain functions that no proof-path code calls. Forwardingakita-challenges/labinius-challengesadds types toakita-challengesand selects nothing.ajtai_keyfile, estimator data file or schedule artifact changes.main: there is no affected configuration. No code on the setup, commitment, prover or verifier path changes. No proof-byte experiment was run for this PR.Security and verifier safety
akita_error::checkedforusize, checkedu128/i128for norms). Derivation rejects before allocating.What this does not provide
A. Thematrix_view_digestinside the single-occurrence admission calculation is a local zero placeholder, not a binding of any matrix.eta_Aand the comparison class; it does not prove that an accepted root binds a unique binary source.LabiniusRootEncodinggives lengths and ranges and names the response table's address rule; the relation over the table, and how the parity quotient and carry are represented, belong to the lowered relation.TrinomialResponseLayout::newseparately rejects table extents above2^28terms; parameter admission here does not apply that implementation limit (the first profile's largest table is2^26). A consumer must still run the layout constructor's checks.Commit map
5de589d25— runtime table, profile, shape, spec, estimator emission.f629d7f2b— enforced digit ranges, signed-digit map, no-wrap from enforced magnitudes, witness lengths, parity oracle tests.4d2f34bf9— literal fixtures for digit-base tags and the hand-assembled identity bytes; production items moved above the test modules inroot_shape.rs.fed6db800— the encoding exposes the canonical response-table lengths, parity integer counts and image table length in place of the earlier three-segment lengths; golden values and spec updated; an address-rule test and padding overflow tests added.991b67651— two spec sentences: the checked helpers named precisely, and the closing disclaimer no longer contradicts the stated address rule.Validation
At
fed6db8008471078745078fba9268f8dbe40f29c(the last commit that changes Rust code; the head commit changes two sentences of the spec):cargo test -p akita-params --lib --no-default-features --features labinius-sis,transcript-blake2b sis::labinius: 29 passed.cargo test -p akita-sis-estimator --lib --test labinius_width_table --no-default-features --features labinius-sis: 86 passed (2 suites).cargo clippy -p akita-params -p akita-sis-estimator --all-targets --no-default-features --features labinius-sis,transcript-blake2b -- -D warnings: clean.cargo clippy -p akita-params --all-targets --no-default-features --features transcript-blake2b -- -D warnings: clean.cargo fmt --all --check,scripts/check-rust-file-lines.sh --no-baseline,typos,./scripts/check-doc-guardrails.sh: clean.cargo test -p akita-types --lib --no-default-features --features labinius-trinomial,transcript-blake2b setup_contribution::trinomial::tests: 3 passed (the canonical layout the lengths are stated against; run in review).At head
991b6765188054a53c9495744c487378ce535cf8:typoson the spec,./scripts/check-doc-guardrails.sh,git diff --check: clean.At
4d2f34bf9(before the layout change):taplo fmt --check, the 179 Python script tests,check-crate-deps.shforakita-paramsandakita-sis-estimator,check-shared-field-identity.sh,check-external-schedule-artifacts.sh,cargo machete --with-metadata, and the estimator example tests (3 passed): clean. Not rerun since; the later commits touch three files and no manifest.At
f629d7f2b:--all --all-targets --release --no-default-features --features parallel,disk-persistence,transcript-blake2band--features transcript-blake2b): clean.git diff --quiet origin/devover the existing generated SIS tables,ajtai_key, the estimator data directory andartifacts/: no change.The parity bounds are tested against an independent big-integer long division, not against the closed form.
Not run locally: workspace Clippy configuration 3, the full workspace test pass, schedule regeneration, portability, Jolt compatibility, fuzzing, a fresh lattice-estimator search (the unchanged certified CSV is the authority).
Remaining work under #45
main, then the fused mixed root, planner and catalog rows.Reviewer map
specs/labinius-root-admission.mdcrates/akita-params/src/sis/labinius/width_table.rs, thenroot_profile.rscrates/akita-params/src/sis/labinius/root_shape.rs(admission order, parity bounds)crates/akita-params/src/sis/labinius/root_encoding.rsparity_tests.rs,root_encoding_tests.rs,root_profile_tests.rs