Skip to content

Add executable Lean WHIR and checked list-binding composition - #551

Draft
kevaundray wants to merge 30 commits into
leanEthereum:riscv-explorationfrom
kevaundray:kw/whir-lean
Draft

kevaundray wants to merge 30 commits into
leanEthereum:riscv-explorationfrom
kevaundray:kw/whir-lean

Conversation

@kevaundray

@kevaundray kevaundray commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

This PR was created with Claude Code, prompted by @kevaundray.

Summary

Adds the executable Lean WHIR model, root-fixed adaptive list binding, supported commitment-anchor mathematics, a real interactive reset extractor with original-statement checking and polynomial resource bounds, an adaptive ideal-compression coupling for the #552 byte duplex, and additive source RBR knowledge with a literal public-state predicate and frozen Merkle-query-log extraction. This is a proof-only draft, not a claim of complete deployed PCS or whole-VM security.

The proof checkout's historical Rust harness remains pinned to 10266a1. The DuplexRefinement, DuplexFraming and WHIRNativeSecurity mode model is pinned separately to the pre-#607 #552 transcript at ff6a275, historically deployed by the merge at f11f84f. It does not currently model the newly deployed #607 session-IV and raw-byte transcript. The historical file and callsite equality audit does not claim that later #599, #555, #607 or Aeneas preparation files remain byte-identical.

#607 at d3c7f9d9 changes more than interfaces. Source inspection confirms the reachable buffered compression core retains its role/counter semantics, while session derivation and initialization, public-instance placement, raw 32-byte roots, proof-of-work challenge/nonce/zero-work steps, final consuming digests and the NARG/hints wire all change. Native and Rows agree on their new session, root and proof-of-work byte encodings by inspection; this is not new runtime or kernel correspondence evidence, and Rows does not constrain exact hint-wire decoding/EOF. New source, framing, schedule and budget adapters are required before the historical native mode theorem, including its conditional 2^-42 endpoint, applies to that deployed transcript.

The new duplex documentation's Q^2/2^257 and protocol prose's choose(Q,2)/2^256 are not the justified whole-view min(1,(2Q^2-Q)/2^256) proved here. Neither smaller coefficient follows from this theorem. That is a proof-claim correspondence gap requiring its own correctly instantiated argument, not a demonstrated attack or a lower bound on #607 security.

Corrected adaptive ideal-compression coupling

The actual finite causal public-compression game now has an internally proved coupling certificate. The joint construction proves both marginals, handles cached and fresh adaptive primitive calls, couples the actual source stream, and bounds disagreement for unrestricted whole-public-view observers. The old external PublicRandomCompressionDMV premise and dmvLoss name are removed, not retained as aliases.

The justified clean-cutover loss is duplexModeLoss(Q) = min(1, (2Q^2 - Q) / 2^256). The earlier birthday-only coefficient was insufficient and has been corrected throughout the downstream observable, source, native, concrete-budget and ROM chains. A birthday subevent can still have a sharper coefficient; it is not substituted for the full adaptive mode loss.

Recomputing the previously capped conditional native endpoint with the corrected coefficient still proves 2^-42, not 2^-43. At Q = 2^60 and its published caller, family and resource caps, the exact recomputed rational is 5712480737351244866976450137972416606804377619 / 50216813883093446110686315385661331328818843555712276103168. This is a mathematical conditional inequality for the modeled unanchored event, not a usable ordinary concrete BLAKE2s security level or an automatically composed anchored Fiat-Shamir result.

Complete interactive reset knowledge endpoint

PCSRewindSource.complete_original_knowledge runs the actual prepare, legal reply collector, Gao decoder, lane reconstruction and original checker. Every returned word explains one common Root0 candidate, all 64 original family slices, every ordinary or strided point claim, and the literal saved commitment-time anchor. It assumes neither an honest-root equality nor a recovery oracle. A nearby malformed commitment can be recovered; withholding, malformed replies and wrong original claims are rejected. A gamma-zero regression demonstrates that a compressed false second-family claim is rejected by the original checker.

This endpoint is labelled interactive only. Its exact joint accepted-and-extraction-failed bound is 1/2^50 + 2^-s. The cutoff is not labelled a security level, and choosing s = 128 does not turn that sum into 128 bit knowledge security. This is not a Fiat-Shamir knowledge result.

Let kappa be the original verifier's acceptance probability, gap = kappa - 1/2^50, N the initial physical block length and d the initial query depth. For positive gap, the actual schedule uses ceil(8N/gap) * (d+2) legal collector rounds per attempt and ceil(8/gap) * s attempts. The checked upper bounds are rounds <= (8N/gap + 1) * (d+2) and attempts <= (8/gap + 1) * s. The executable accepts integer budgets; this analytic choice uses an acceptance-gap bound and does not claim to compute kappa.

PCSRewindSource.complete_original_resource connects the counted executable to the same result and discharges supported profile and redundancy requirements. It includes field operations, inversions under the stated field-operation cost model, unit prover calls, admitted literal reply words, preparation, original point and slice checks, and retained-record work. Physical root rectangularity, occupied-lane limits and the literal response-word admission bound remain explicit. Prover CPU time outside unit calls is not silently bounded.

The coin-free full-Root0 decoder has checked correctness and polynomial counted cost. It recovers a strongly supported word and checks every original family, point and anchor; its compiled example corrects one corrupted physical row. The additive characteristic-two protocol now has a checked literal-public-state RBR certificate: initial state zero, exact incoming-history transition fibers and final accepted extraction failure imply state one. Its predicate contains no hidden future challenge or following prover response, and rectangularity follows from the actual accepting model guard. This is our own additive proof, not an application of the WHIR paper's characteristic-not-two theorem.

Completed PCS-only RBR and extraction components

For prepared immutable original inputs with m <= 2^64 and points.size + 2 <= 2^64, the exact RBR round error is (17/32)^56 + 1/2^78. The round count is 1 + sum_i(folds_i + oodCount_i + 1) + tailCount, including the response-free final full-E draw. The checked unchanged PCS profiles have k <= 40 and maximal raw message length at most 5760 bits. The first raw message is gamma, six maps and lambda together; query messages retain all full E draws before position projection. The minimum raw message entropy is exactly 192 bits, PCS-only. Neither this error nor its query-dependent amplification is labelled a security level.

The public Merkle compression log feeds an actual preimage index and compact Root0 reconstruction. The earlier PCSBCSMerkleSourceRows.rawRoot0_eq_compactBaseOracle and pruned_opened_rows covered only leaf_words=occupied. The completed LeafImages, FullSourceTransport and root-cache transport now authenticate the full zero-prefixed image before dropping leaf_words-occupied scalars, matching production whir/verify.rs:404 and pcs/verifier.rs:51-52,121-123. Missing images stay explicitly unavailable; recovered nonzero padding is available but invalid. Cache identity is CV, height, leaf image width and occupied width. Accepted opened rows agree with their frozen source rows outside the stated primitive opening-bad event; honest availability is not assumed. The compiled real-BLAKE2s regression exercises padded source extraction, an actual opening, invalid padding rejection, unavailable images and cross-shape identity. There is no production change.

The executable public-log extractor captures the first recognized Root0 shape address before that node's answer and invokes the same Gao/original-statement helper on its strictly earlier ordinary records. A source scanner derives the conservative target cap M=Q*(Q+1), accounting for adaptive anchor references as well as opening source paths. Its separate Merkle extraction loss is exactly (Q^3+3Q^2-2Q)/2^256. That term alone is not the current deployed Fiat-Shamir extraction-failure bound, and no Q^2/2^192 hash-chain term is asserted for these source keys.

These component contracts alone do not establish deployed Fiat-Shamir knowledge. The actual duplex's raw history keys retain prover/nonce frames and squeeze counts, not previous verifier-answer values. Arbitrary child-prefix prequeries must remain admitted. Replay of latent ancestor draws and shared-query composition require their own adapter rather than a direct invocation of the book's explicit hash-chain compiler. The following endpoint supplies the historical modeled-source adapter; the current deployed composition remains separate.

The historical PCS-only public-source experiment now has a checked executable observer and straight-line extractor, not merely a recovery-selector existence theorem. PCSBCSPublicExtractor.failureObserver equals the accepted, publicly decoded original-statement extraction-failure event. Its exact random-compression bound is B*((17/32)^56 + 1/2^78) + min(1,(2B^2-B)/2^256) + (B^3+3B^2-2B)/2^256. B charges the complete attacker-plus-verifier ordinary and construction-path work, including rejecting traces; fixed public profile/layout/frame-boundary metadata, finite nonempty coins and the stated supported caps remain explicit. Actual byte recognition, first-root capture, hash-before-projection and all-original checking feed that endpoint. The counted public extractor includes parsing, history scans, getters and actual Gao/original checks. These are historical modeled-source results, not current deployed BLAKE2s knowledge security.

The anchored mixed attacker-prefix wrapper preserves the entire existing source view, freezes the root before its current point answer and handles earlier adversarial mentions and repeated groups. Its exact ambiguity term is remaining/2^124 under the aggregate source Counts cap. Cache-hit observations need not preserve draw-log order; the source join derives the needed set-membership and preimage equality outside the SAME already-paid physical Merkle alarm. PCSBCSPublicExtractorAnchor.extractAt_changed_claims_same_word proves equality of actual returned base-word arrays for arbitrary later claim sets sharing the retained anchor metadata and earliest prefix, under the explicit clean-anchor condition. This is not yet a complete current deployed anchored knowledge composition.

Current #607 hand-port adapters now derive ordinary session work, raw32 record and preanchor-header recognition, actual full-vector point sampling followed by the prover-value read, literal bounded mode output coordinates and earliest full-physical-image root capture. The ordinary primitive compiler observes typed reads, guarded draws and decoded hints, preserving reached rejection and exact query traces. The computable mixed compiler joins observed session derivation and initialization to cached current construction replies, proves real byte-source erasure and all-branch path work, and permits an arbitrary counted attacker prefix. Its initialized current byte-mode coupling loss is min(1,(2Q^2-Q)/2^256), with Q explicitly including prefix, session and construction-path work. Current schedule separation proves nonempty prover absorption between verifier messages and distinct full raw histories across those boundaries, including partially consumed output blocks. Raw hint decoding, poison/error identity, native PCS equations, Rows and Aeneas remain separate obligations.

The accepted current caller path is now joined to the public original list. A physical-mode compiler retains the actual seed, absorb and finalization chaining values beside the cached construction replies; from an accepted setup, prelude, commitment receive, payload and expected-record binding it derives record.context = capture pre.state rather than assuming a record or context equality. SpongefishCurrentAcceptedJoin.accepted_original then proves that the received record is among the raw-decoded candidates of the post-binding construction key, that the deterministic public parser's result equals the physical replay, and that every prepared original is in the public original list. The parser's call order, derived domain, reconstructed proof bytes and empty hints are consequences of the accepted replay: receive and binding are one accepted replay of the caller tape, and a hint-free replay accepted with unread proof bytes makes the same queries on its consumed prefix. Header validity and the received context's one-block pending-buffer bound are derived. accepted_original_next derives the post-binding query when the verifier suffix begins with a positive challenge draw, as the PCS opening does. Native PCS equation, proof-of-work and original-claim acceptance, the distributional source join and the basic full-prefix BCS knowledge endpoint for the deployed #607 transcript are not claimed.

The current native PCS opening after binding now has its acceptance adapter. SpongefishCurrentOpeningAcceptance walks the configured coordinate schedule over the actual byte cursor (query proof of work on a raw32 challenge and UInt64 nonce, grouped verifier draws decoded with the unchanged grouped E codec, the Merkle hint, prover replies in native order) and checks the anchored native equations (a kernel computation shows its call list equals the separately inspected OpeningLayout.schedule for all 56 production profiles at the deployed grinding), which are literally the historical AnchoredPhysicalAnchor.sourceVerify on the record's shape, point and value. accepted_opening_original proves that an accepted caller path followed by an accepted opening is one accepted replay of the caller tape and opening call list, that every ground query level's proof of work cleared on its actual challenge, that the anchored equations hold for the prepared original claims, and that this original is in the public original list of the post-binding key; the first-draw cursor guard is derived. The Merkle hint wire codec is an explicit parameter receiving the query positions and row width, as the native from_hint does; every theorem holds for any such decoder.

SpongefishCurrentSourceJoinProbability.native_ideal_bound composes that join with the initialized byte-mode coupling: for any property of the prepared original and source view, the real probability of whole native acceptance with that property is at most the ideal raw-oracle probability of the public original-list event plus min(1,(2Q^2-Q)/2^256). SpongefishCurrentRoundPackets defines the current basic full-prefix round packets (closed key history with the full absorbed prover prefix and no coin values, coordinate selected by a public frame-count classifier, same grouped decoder), proves they partition the raw keys, and proves the additive RBR hazard rbrError for every caller-data builder.

SpongefishCurrentOpeningProgram.fullProgram is the counted current source program followed by a public opening walk: after an accepted replay it re-walks the opening schedule over the replay's recorded source events (exactly one per call) and authenticates every query batch with the existing WHIRPhysicalVerifier.openRows hash programs, so the opening's Merkle hashes are now observations of the counted program (fullBudget adds a uniform public Merkle budget; the initialized byte-mode coupling applies unchanged). On the real primitive the walk returns exactly the native accepted opening, with every hashed input's compression plan in the primitive log (fullProgram_native). SpongefishCurrentRootPolicy.targets is a current root policy recovering construction coordinates from the public primitive log and collecting Root0 and every announced level root, with growth and the Q(Q+1) cap, and ports the historical physical freeze/admission.

SpongefishCurrentKnowledgeEndpoint.full_knowledge_bound is the basic full-prefix endpoint for the current transcript. Its real event is: the caller tape replays and the record binding verifies on the real primitive, the PCS opening is natively accepted (query proof of work, Merkle authentication of every query batch, anchored native equations), and the public straight-line extractor fails (Root0 frozen at its first-mention key, then the source extractor). Its probability is at most Q*((17/32)^56+2^-78) + min(1,(2Q^2-Q)/2^256) + (Q^3+3Q^2-2Q)/2^256 with Q = fullBudget (attacker work plus the charged verifier replay and Merkle work) and no hash-chain term. The reduction to a public good event or the complete Merkle trace alarm is proved (reduction_full), including opening coverage (opening_cover: an accepted opening that is not quiet against the frozen first-mention log of its root raises the alarm) and collisions (collision_alarm).

SpongefishCurrentKnowledgeFinal.current_knowledge discharges the remaining refinement obligation Refines, so the bound holds in the ideal-compression model with only static public premises (nonempty instance, caller prelude and payload call shapes, and a valid caller shape whose dimension, batch and rate match the profile). For every attacker coin and binding message shape, SpongefishCurrentRefines.builder reconstructs each opening packet's incoming caller data from the table with that packet erased: the caller original from caller-path answers, Root0 and every announced level root from first-mention captures (every packet history mentions them, so erasure does not change them), the tape from earlier packets, and the incoming replies parsed from the packet history with query rows and next-level oracles from the frozen captures. On every ideal table where the good event fires, one packet per schedule coordinate is exposed (every deployed coordinate has positive raw width, by a kernel computation over all 56 profiles), each reconstruction equals the literal incoming data, Merkle quietness against the frozen logs authenticates the opened rows, and the native opening equations with public extraction failure make the terminal state doomed, giving the state path. The bound for every received record is the sum over the four binding message shapes of the three-term bound. At the deployed 17-bit query grinding, current_knowledge_level gives at most B/2^49 when every per-shape budget is at most B <= 2^64, and current_knowledge_bits gives at most 2^-lambda for per-shape budgets up to 2^(49-lambda) (2^29 units: 2^-20; 2^39 units: 2^-10), with the four-shape union included and no grinding credit. Scope: the instance, tag, session IV, caller layout and Merkle hint wire decoder (an arbitrary parameter) are fixed before the attacker runs; caller-side proof of work and caller equations are not part of the event, which only enlarges it; each per-shape budget counts attacker work plus a worst-case charge for verifier replay and Merkle work that is not evaluated for deployed layouts; completeness of the opening model (acceptance of an honest prover) is not proved here. This is a knowledge error in the ideal-compression model, not a concrete BLAKE2s security level.

Executable paths that returned or retained a digest or squeeze output as a closure, recomputing earlier compressions at each use, now store computed values as data; each stored form is selected by csimp with a kernel-checked equality to the unchanged semantic definition.

The pinned primary book source also distinguishes hash-chain BCS from its basic full-prefix variant: the hash-chain query includes the previous verifier randomness, whereas the basic variant includes the whole prover prefix and omits the hash-chain Q^2/2^lambda error term and minimum-entropy condition. Current duplex histories preserve the whole absorbed prover prefix, not previous coin bytes, so the basic variant is the appropriate adapter target. This is a route selection based on the verified remark:bcs-with-basic-fs, not an application of its knowledge theorem to current deployed code. The native acceptance/original-statement distributional join is now proved, and the basic full-prefix endpoint is proved, with Refines discharged, as SpongefishCurrentKnowledgeFinal.current_knowledge under static public premises only; no whole-system lambda is assumed.

Deployed leaf/node shape invariant

Fresh upstream inspection at 3caf021 confirms that leaf/node hashing is untagged, but the deployed verifier fixes each phase's height rather than accepting a proof-selected path length. Native opening folds exactly the configured height and rejects missing or extra siblings and a wrong root at merkle.rs:346-385. Rows uses verifier-generated query-bit length and fixed low/top hashes with a root constraint at rec/verifier/mod.rs:253-282. Production full leaf images are additionally 512 or 384 bytes, versus 64-byte node inputs; omitted zero lanes do not shorten the image and zero-prefix caching is not domain separation. Exact source callsites and configuration lines are documented in the README.

An actual native upstream executable confirmed cross-shape untagged reinterpretation and rejection at the original fixed height. The release Rows node-as-leaf regression passed and its original-depth circuit rejects the shorter-tree interpretation. Future code must retain verifier-fixed height, image width and occupied width and hash/constrain exactly that height. CV-alone equality is not binding across arbitrary shapes or a justification for a digest-only extraction cache. This is not an observed deployed same-shape protocol exploit.

Caller statement-binding precondition

The full original opening statement must be fixed independently of its current batching challenge packet. Values come from earlier absorbed messages or the seeded public statement, coordinates from strictly earlier verifier coins or public constants, and offsets/selectors/shapes from the bound layout. The source-fiber obligation is that updating only the current packet's random-table entry leaves the caller statement and incoming public state unchanged. The record identity frame and anchor do not bind arbitrary external claims.

At historical PR #600 source 12eea88, every production native leaf, aggregation and matching Rows opening was traced. CPU uses cpu/reduce.rs:68-103 and rec/verifier/riscv.rs:63-79; recursion shares rec/proof.rs:217-245 with rec/verifier/recursion.rs:105-125. Terminal bus/table/Flock values are observed before opening, while coordinates are earlier challenges, not reserialized point vectors. Child statements are seeded limb-for-limb. Deferred fixed/program hints are observed in the separate reduction before its batching at tree/reduce/mod.rs:63-78; the final native checks or satisfied aggregation circuit must settle those obligations. No late unbound prover-selectable production claim was found. README gives the detailed source references. This audit does not prove shared-oracle causality, universal caller safety or Fiat-Shamir composition.

Anchor and deployed source boundary

The anchor mathematics fixes a supported candidate list before a fresh uniform point and allows malicious advertised values. Outside its explicit pairwise ambiguity event, at most one candidate satisfies the advertised anchor. The capped 2^-124 ambiguity term is not a whole-protocol security level.

PR #600 separately implements immutable original records and opening identity frames on typed Rust PCS APIs. Its published normal merge 75d4562 incorporates #607 and #608 from upstream d3c7f9d and migrates native and Rows frames to raw 32-byte roots, the original chaining value and normalized byte-buffer context under the session-IV and new codec API. The source versions are LVMP17, LVMT15, rv64im15 and tree12. Its actual public CPU and first/node tree prove/serialize/decode/verify smoke passed with native-to-Rows replay and legacy, foreign-statement, changed-output and truncation rejection. The proof checkout does not universally refine that source: the duplex chain remains explicitly historical pre-#607, and a session-IV/raw-root/PoW/final-digest adapter is needed. Existing physical and fresh-caller models retain explicit historical source and parser premises. Source changes and finite smoke agreement do not discharge Fiat-Shamir knowledge, full acceptance and rejection/error correspondence or compiler/runtime correctness.

The three historical malformed selector acceptances recorded at 10266a1 remain historical known gaps of that range-only guard, not claims about current upstream's stricter #599 typed guards. The independent Aeneas project targets actual verifier code and records unsupported primitives and extern assumptions rather than replacing the verifier with a proof-only clone.

Concrete cryptographic boundary

DuplexModeGame.concretePrimitiveGap_knownAnswer_lower_bound proves that the exact full-public-view ConcretePrimitiveGap is at least 1 - 2^-256 for Q >= 1 whenever Allowed includes the elementary fixed known-answer adversary and distinguisher. Ordinary efficient classes include that pair. Efficiency or collision resistance cannot justify a useful small loss for this replacement game. Arbitrarily excluding the observer is not used to manufacture a security assumption.

The concrete native inequality remains explicitly conditional, not ordinary computational security for deterministic BLAKE2s. This limitation concerns the replacement proof strategy, not a demonstrated cryptanalytic attack on BLAKE2s or the deployed protocol. No unconditional hash theorem, grinding amplification, complete deployed Fiat-Shamir knowledge theorem, whole-system lambda value or proved 128 bit whole-system level is claimed. The 192 bit challenge-entropy terms and 256 bit Merkle and compression-mode terms remain separate.

Verification and remaining hypotheses

Exact pinned tooling, reproduction commands, source drift and exercised checks are recorded in verification/whir/README.md. The final warning-denied library, Main and compiled-model closure passed, including every registered executable. Audit.lean checked 16213 exported Whir theorem declarations, including generated declarations, rejecting project axioms and every transitive axiom except propext, Classical.choice and Quot.sound. With digests stored as data, sixteen compiled scenarios completed within the bounded runtime invocation, including the current real-BLAKE2s adapter, the current record codec, the literal current caller reconstruction (previously stalled by closure recomputation), the captured source executable and the maintained model, reset/counting, source-stream, PCS grouping and real-BLAKE2s Merkle/public-log scenarios. The branch merges upstream 392e187 normally and changes no Rust outside verification/whir.

Actual compiled execution covers the multilevel accepted/rejected model, original reset and counted extraction, source-stream coupling, nontrivial full-root Gao correction, PCS grouped rounds and byte-cache resets, and real-BLAKE2s Merkle-query-log reconstruction with honest, tampered, missing, malformed and lane-order cases. An inconsistent-output record fixture checks collision handling without claiming a BLAKE2s collision. No sorry, admit, native_decide, unsafe proof tricks, mock oracle or new correctness axiom is introduced. The historical 71-group differential and six production query-batch checks remain explicitly historical, not universal refinement or evidence for changed upstream files.

The production-profile public extractor compiled and executed literal-original recovery, fake-prequery rejection, genuine first-root capture and full zero-prefix leaf decoding. Its Gao/original reconstruction did not complete within the bounded invocation after the general shared-nodal and shorter-left multiplication changes. That production-profile run remains explicitly not completed. The compiled smaller valid runForConfig helper from the same reconstruction path recovered eight nontrivial words with one corrupted row, checked fifteen common matches and rejected malformed root/anchor metadata, wrong originals and a changed anchor. This is not substituted production-runtime evidence. Kernel-checked value and polynomial-cost theorems remain the mathematical result; native CPU/allocation costs are not inferred from them.

Finite coins, supported public shapes and caps, first-registration semantics, attacker Counts before execution, reachable verifier budgets and terminal paths, free announcements and the backfill envelope remain explicit experiment hypotheses. The corrected ideal mode coupling no longer has an external unproved DMV certificate. Concrete cryptographic justification, the current Merkle hint wire codec, native CPU/allocation runtime correspondence and complete current Rust-to-Lean correspondence remain separate obligations. The current #607 knowledge bound holds in the ideal-compression model under static public premises; no concrete BLAKE2s, complete Rust-correspondence or whole-system Fiat-Shamir knowledge endpoint is claimed.

@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Benchmarks: base against this PR, on one runner

8198d0b merged into its base, against the base 392e187: each benchmark run in turns on one runner, base and PR 5 times each. A size is shown when it changed; a time or a peak memory when it moved the same way in every round and its median by at least 1% (the change is the median ratio, with the rounds' range).

Threads shows the named configuration; default means no thread count is encoded in the benchmark ID.

BLAKE2s

Prover stages
benchmark threads runner base this PR change
hash-50000 16 x86-64 357.98 ms 353.93 ms -1.81% (-3.36% to +1.85%)
 ↳ build-witness 25.34 ms 24.78 ms -3.34% (-5.52% to +4.54%)
 ↳ commit 49.30 ms 47.78 ms -3.43% (-6.81% to +5.41%)
 ↳ execute-program 30.04 ms 28.90 ms -1.81% (-8.25% to +1.40%)
 ↳ flock-reductions 97.00 ms 96.31 ms +1.75% (-5.01% to +2.27%)
 ↳ pcs-open 126.61 ms 123.52 ms -2.44% (-3.61% to -0.72%)
 ↳ prove-bus 22.60 ms 21.51 ms -3.12% (-5.70% to +4.31%)
 ↳ prove-constraints 9.37 ms 9.28 ms +0.79% (-4.58% to +5.57%)

PCS

benchmark threads runner measure base this PR change
pcs-commit-22 16 arm64 Proving time 7.23 ms 7.31 ms +2.77% (+0.34% to +18.35%)
pcs-open-22 16 x86-64 Proving time 14.23 ms 14.93 ms +4.05% (+1.79% to +7.36%)

leanXMSS

benchmark threads runner measure base this PR change
aggregate-leanxmss-100-2to1-node 8 x86-64 Proving time 123.97 ms 122.23 ms -1.38% (-2.18% to -0.94%)
Prover stages
benchmark threads runner base this PR change
aggregate-leanxmss-100-2to1-first 8 arm64 157.25 ms 157.66 ms +0.26% (-0.53% to +1.03%)
 ↳ build-circuit 10.72 ms 10.85 ms +1.85% (-1.34% to +2.92%)
 ↳ prove-recursion 134.98 ms 134.79 ms +0.01% (-0.90% to +0.74%)
 ↳ reduce-claims 4.16 ms 4.17 ms +0.17% (-3.12% to +3.15%)
 ↳ reduce-in-rows 1.49 ms 1.51 ms +0.59% (-2.16% to +3.35%)
 ↳ verify 5.97 ms 6.09 ms +2.01% (+1.00% to +2.71%)
aggregate-leanxmss-100-2to1-first 8 x86-64 118.56 ms 120.65 ms +1.33% (-0.53% to +13.93%)
 ↳ build-circuit 14.22 ms 14.83 ms +4.31% (+1.32% to +21.31%)
 ↳ prove-recursion 89.04 ms 89.30 ms +0.86% (-0.25% to +12.59%)
 ↳ reduce-claims 6.79 ms 7.23 ms +7.16% (-32.21% to +35.98%)
 ↳ reduce-in-rows 1.81 ms 1.88 ms +2.79% (-3.49% to +4.37%)
 ↳ verify 6.63 ms 6.69 ms +0.73% (+0.26% to +5.07%)
aggregate-leanxmss-100-2to1-first 16 x86-64 94.10 ms 94.36 ms +0.50% (-5.48% to +1.71%)
 ↳ build-circuit 14.72 ms 14.60 ms -0.81% (-5.28% to +0.09%)
 ↳ prove-recursion 62.98 ms 63.42 ms +2.49% (-6.05% to +4.66%)
 ↳ reduce-claims 7.51 ms 6.40 ms -13.64% (-20.86% to -1.70%)
 ↳ reduce-in-rows 2.01 ms 1.96 ms -0.94% (-8.16% to +5.00%)
 ↳ verify 7.03 ms 7.06 ms +0.19% (-1.61% to +1.02%)
aggregate-leanxmss-100-2to1-node 8 x86-64 123.97 ms 122.23 ms -1.38% (-2.18% to -0.94%)
 ↳ build-circuit 15.12 ms 14.98 ms -2.54% (-4.60% to +0.51%)
 ↳ prove-recursion 91.39 ms 91.13 ms -0.06% (-1.06% to +0.16%)
 ↳ reduce-claims 10.41 ms 9.16 ms -10.18% (-21.54% to -3.60%)
 ↳ reduce-in-rows 1.89 ms 1.80 ms -4.14% (-10.23% to +2.38%)
aggregate-leanxmss-100-4to1-first 1 arm64 1.90 s 1.90 s -0.01% (-0.57% to +0.15%)
 ↳ build-circuit 25.28 ms 25.31 ms +0.09% (-0.62% to +0.75%)
 ↳ prove-recursion 1.84 s 1.84 s -0.03% (-0.59% to +0.14%)
 ↳ reduce-claims 20.91 ms 21.11 ms +1.06% (+0.12% to +1.40%)
 ↳ reduce-in-rows 2.72 ms 2.76 ms +0.85% (-1.08% to +1.76%)
 ↳ verify 11.58 ms 11.60 ms +0.02% (-0.05% to +0.60%)
aggregate-leanxmss-100-4to1-first 1 x86-64 1.19 s 1.18 s -0.86% (-2.47% to +0.92%)
 ↳ build-circuit 34.73 ms 33.51 ms -3.50% (-6.21% to +1.87%)
 ↳ prove-recursion 1.11 s 1.10 s -0.60% (-2.47% to +1.14%)
 ↳ reduce-claims 27.29 ms 26.60 ms -2.71% (-3.52% to -0.09%)
 ↳ reduce-in-rows 3.98 ms 3.91 ms -0.24% (-5.23% to +4.51%)
 ↳ verify 12.66 ms 12.50 ms -0.55% (-3.88% to +1.44%)
leanxmss-100 16 arm64 162.42 ms 162.68 ms +0.13% (-0.52% to +5.03%)
 ↳ build-witness 4.77 ms 4.73 ms -0.94% (-1.99% to +2.54%)
 ↳ commit 20.53 ms 20.45 ms -0.99% (-2.68% to +0.64%)
 ↳ execute-program 10.40 ms 10.52 ms +2.11% (+0.37% to +6.57%)
 ↳ flock-reductions 56.55 ms 56.44 ms -0.40% (-0.56% to +12.83%)
 ↳ pcs-open 52.76 ms 52.54 ms +0.52% (-1.06% to +1.90%)
 ↳ prove-bus 13.34 ms 13.30 ms +0.14% (-0.77% to +0.46%)
 ↳ prove-constraints 3.88 ms 3.80 ms +0.54% (-4.08% to +2.07%)
Every result

BLAKE2s

benchmark threads runner CPU measure base this PR change
hash-50000 16 arm64 Neoverse-V2 Proving time 519.07 ms 518.51 ms -0.09% (-1.35% to +0.14%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 357.98 ms 353.93 ms -1.81% (-3.36% to +1.85%)
hash-50000 16 arm64 Neoverse-V2 Verifying time 3.16 ms 3.16 ms +0.06% (-0.46% to +0.48%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.21 ms 3.23 ms +0.67% (+0.49% to +3.97%)
blake2s-batch 16 arm64 Neoverse-V2 Time per operation 2.91 ns 2.91 ns -0.17% (-0.79% to +0.72%)
blake2s-batch 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 0.93 ns 1.01 ns +7.71% (-1.61% to +22.72%)
hash-50000 16 arm64 Neoverse-V2 Proof size 322,858 B 322,858 B 0 B (+0.00%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 322,858 B 322,858 B 0 B (+0.00%)
hash-50000 16 arm64 Neoverse-V2 Peak memory 4978.46 MiB 4977.66 MiB -0.12% (-0.15% to +0.10%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 2192.29 MiB 2195.13 MiB +0.13% (-0.17% to +0.27%)
hash-50000 16 arm64 Neoverse-V2 Peak heap 4400.84 MiB 4400.90 MiB +0.00% (-0.00% to +0.00%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 1917.31 MiB 1917.35 MiB +0.00% (-0.01% to +0.01%)
hash-50000 16 arm64 Neoverse-V2 Allocations 16,664 16,664 +0.00% (+0.00% to +0.23%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 17,303 17,302 -0.01% (-0.12% to +0.04%)
Prover stages
benchmark threads runner CPU base this PR change
hash-50000 16 arm64 Neoverse-V2 519.07 ms 518.51 ms -0.09% (-1.35% to +0.14%)
 ↳ build-witness 19.83 ms 19.94 ms +0.36% (-0.15% to +1.31%)
 ↳ commit 81.49 ms 81.74 ms +0.10% (-1.38% to +0.73%)
 ↳ execute-program 23.08 ms 23.05 ms -0.18% (-2.15% to +3.57%)
 ↳ flock-reductions 170.24 ms 170.20 ms +0.02% (-3.28% to +0.40%)
 ↳ pcs-open 186.42 ms 186.14 ms +0.05% (-1.64% to +0.58%)
 ↳ prove-bus 29.97 ms 29.91 ms -0.28% (-1.37% to +0.30%)
 ↳ prove-constraints 7.11 ms 7.03 ms +0.47% (-4.76% to +1.67%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 357.98 ms 353.93 ms -1.81% (-3.36% to +1.85%)
 ↳ build-witness 25.34 ms 24.78 ms -3.34% (-5.52% to +4.54%)
 ↳ commit 49.30 ms 47.78 ms -3.43% (-6.81% to +5.41%)
 ↳ execute-program 30.04 ms 28.90 ms -1.81% (-8.25% to +1.40%)
 ↳ flock-reductions 97.00 ms 96.31 ms +1.75% (-5.01% to +2.27%)
 ↳ pcs-open 126.61 ms 123.52 ms -2.44% (-3.61% to -0.72%)
 ↳ prove-bus 22.60 ms 21.51 ms -3.12% (-5.70% to +4.31%)
 ↳ prove-constraints 9.37 ms 9.28 ms +0.79% (-4.58% to +5.57%)

Fibonacci

benchmark threads runner CPU measure base this PR change
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Proving time 815.55 ms 817.39 ms -0.01% (-0.70% to +0.62%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 496.62 ms 512.59 ms +0.52% (-3.91% to +9.28%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Verifying time 3.20 ms 3.22 ms +0.19% (-0.27% to +0.45%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.19 ms 3.20 ms +0.06% (-1.35% to +0.84%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Proof size 364,010 B 364,010 B 0 B (+0.00%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 364,010 B 364,010 B 0 B (+0.00%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Peak memory 7630.44 MiB 7629.35 MiB -0.02% (-0.08% to +0.12%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 3564.73 MiB 3563.93 MiB -0.04% (-0.06% to +0.13%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Peak heap 7049.90 MiB 7049.90 MiB -0.00% (-0.00% to +0.00%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 3307.45 MiB 3307.33 MiB -0.00% (-0.01% to +0.01%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Allocations 11,597 11,597 +0.00% (+0.00% to +0.01%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 12,234 12,234 +0.00% (+0.00% to +0.00%)
Prover stages
benchmark threads runner CPU base this PR change
fibonacci-asm-2000000 16 arm64 Neoverse-V2 815.55 ms 817.39 ms -0.01% (-0.70% to +0.62%)
 ↳ build-witness 29.21 ms 29.13 ms -0.18% (-0.71% to +0.42%)
 ↳ commit 125.66 ms 126.08 ms +0.27% (-0.00% to +0.50%)
 ↳ execute-program 61.67 ms 64.83 ms +3.99% (-1.43% to +6.35%)
 ↳ flock-reductions 293.94 ms 293.69 ms -0.09% (-1.99% to +0.17%)
 ↳ pcs-open 232.68 ms 232.67 ms -0.28% (-1.72% to +0.19%)
 ↳ prove-bus 59.51 ms 59.57 ms +0.05% (-0.13% to +0.69%)
 ↳ prove-constraints 10.76 ms 10.80 ms +0.09% (-0.44% to +0.92%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 496.62 ms 512.59 ms +0.52% (-3.91% to +9.28%)
 ↳ build-witness 38.63 ms 39.47 ms +1.54% (-4.99% to +10.07%)
 ↳ commit 67.81 ms 71.56 ms +4.41% (-4.70% to +15.30%)
 ↳ execute-program 71.45 ms 72.90 ms +0.51% (-5.15% to +7.98%)
 ↳ flock-reductions 129.67 ms 139.74 ms +1.61% (-6.46% to +13.57%)
 ↳ pcs-open 134.69 ms 134.36 ms -0.29% (-7.89% to +8.40%)
 ↳ prove-bus 36.37 ms 36.79 ms +0.90% (-4.81% to +3.72%)
 ↳ prove-constraints 13.14 ms 13.72 ms +0.48% (-5.75% to +13.61%)

Field and transpose kernels

benchmark threads runner CPU measure base this PR change
f192-inv default arm64 Neoverse-V2 Time per operation 245.00 ns 245.02 ns -0.01% (-0.02% to +0.06%)
f192-inv default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 265.60 ns 265.59 ns -0.01% (-0.09% to +0.06%)
f192-mul-latency default arm64 Neoverse-V2 Time per operation 8.04 ns 8.02 ns -0.17% (-0.76% to +0.62%)
f192-mul-latency default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 7.53 ns 7.55 ns +0.17% (-0.55% to +1.31%)
f192-mul-throughput default arm64 Neoverse-V2 Time per operation 2.94 ns 2.94 ns +0.03% (-0.30% to +0.07%)
f192-mul-throughput default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 4.44 ns 4.43 ns -0.05% (-0.20% to +0.00%)
f192-mul4-latency default arm64 Neoverse-V2 Time per operation 13.07 ns 12.80 ns -0.51% (-3.13% to +2.76%)
f192-mul4-latency default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 10.09 ns 10.10 ns +0.06% (-0.01% to +0.35%)
f192-mul4-throughput default arm64 Neoverse-V2 Time per operation 10.76 ns 10.77 ns +0.13% (-0.08% to +0.17%)
f192-mul4-throughput default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 15.60 ns 15.61 ns +0.00% (-0.38% to +0.23%)
f192-square default arm64 Neoverse-V2 Time per operation 1.70 ns 1.70 ns +0.00% (-0.24% to +0.18%)
f192-square default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 3.32 ns 3.32 ns -0.03% (-0.36% to +0.21%)
f64-inv default arm64 Neoverse-V2 Time per operation 211.59 ns 211.55 ns +0.01% (-0.19% to +0.04%)
f64-inv default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 237.25 ns 237.12 ns -0.03% (-0.13% to +0.10%)
f64-mul default arm64 Neoverse-V2 Time per operation 0.56 ns 0.56 ns +0.00% (-0.36% to +0.18%)
f64-mul default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 0.86 ns 0.86 ns +0.00% (-0.12% to +0.12%)
f64-square default arm64 Neoverse-V2 Time per operation 0.55 ns 0.55 ns -0.18% (-0.91% to +0.36%)
f64-square default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 1.08 ns 1.08 ns +0.00% (-0.46% to +0.00%)
transpose-64bytes default arm64 Neoverse-V2 Time per operation 12.00 ns 12.00 ns +0.00% (-0.02% to +0.06%)
transpose-64bytes default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 0.84 ns 0.84 ns -0.12% (-4.44% to +0.36%)
transpose-64x64 default arm64 Neoverse-V2 Time per operation 96.41 ns 96.43 ns +0.03% (-0.17% to +0.07%)
transpose-64x64 default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 73.17 ns 73.15 ns -0.03% (-0.08% to +0.02%)

Flock

benchmark threads runner CPU measure base this PR change
flock-alu-batch-262144 16 arm64 Neoverse-V2 Proving time 51.43 ms 51.42 ms +0.46% (-0.43% to +1.85%)
flock-alu-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 29.91 ms 30.60 ms -0.38% (-13.24% to +6.22%)
flock-div-batch-262144 16 arm64 Neoverse-V2 Proving time 366.27 ms 365.77 ms -0.13% (-1.84% to -0.06%)
flock-div-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 174.41 ms 175.61 ms +0.97% (-0.77% to +7.55%)
flock-hash-batch-262144 16 arm64 Neoverse-V2 Proving time 763.13 ms 763.06 ms +0.07% (-0.43% to +2.19%)
flock-hash-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 365.02 ms 378.62 ms +2.78% (-3.78% to +5.64%)
flock-ld-batch-262144 16 arm64 Neoverse-V2 Proving time 15.71 ms 15.62 ms -0.83% (-1.14% to +1.10%)
flock-ld-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 9.88 ms 9.95 ms +1.77% (-5.81% to +5.74%)
flock-load-batch-262144 16 arm64 Neoverse-V2 Proving time 49.73 ms 50.02 ms +0.58% (+0.06% to +3.25%)
flock-load-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 28.87 ms 28.85 ms +0.31% (-1.00% to +4.66%)
flock-mul-batch-262144 16 arm64 Neoverse-V2 Proving time 186.99 ms 187.71 ms +0.42% (-0.46% to +0.82%)
flock-mul-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 97.08 ms 99.06 ms +1.16% (-10.92% to +13.56%)
flock-mulh-batch-262144 16 arm64 Neoverse-V2 Proving time 358.18 ms 360.37 ms -0.17% (-0.43% to +2.19%)
flock-mulh-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 173.56 ms 173.58 ms +0.90% (-4.57% to +6.36%)
flock-sd-batch-262144 16 arm64 Neoverse-V2 Proving time 16.21 ms 16.14 ms -0.34% (-15.82% to +0.29%)
flock-sd-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 10.18 ms 10.04 ms -1.40% (-3.90% to +3.98%)
flock-shift-batch-262144 16 arm64 Neoverse-V2 Proving time 50.28 ms 50.19 ms +0.04% (-1.06% to +1.11%)
flock-shift-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 28.82 ms 28.97 ms +0.30% (-2.84% to +4.29%)
flock-store-batch-262144 16 arm64 Neoverse-V2 Proving time 49.50 ms 49.84 ms +0.73% (-4.39% to +1.77%)
flock-store-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 28.85 ms 29.12 ms +1.46% (-4.17% to +5.73%)

PCS

benchmark threads runner CPU measure base this PR change
pcs-commit-22 16 arm64 Neoverse-V2 Proving time 7.23 ms 7.31 ms +2.77% (+0.34% to +18.35%)
pcs-commit-22 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 5.12 ms 5.21 ms +5.98% (-18.81% to +11.22%)
pcs-open-22 16 arm64 Neoverse-V2 Proving time 20.86 ms 20.83 ms -0.00% (-1.67% to +9.50%)
pcs-open-22 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 14.23 ms 14.93 ms +4.05% (+1.79% to +7.36%)
ntt-forward-22 16 arm64 Neoverse-V2 Time per operation 3.60 ms 3.76 ms +0.18% (-6.44% to +6.07%)
ntt-forward-22 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 2.86 ms 2.91 ms +8.31% (-15.27% to +12.55%)

leanSPHINCS

benchmark threads runner CPU measure base this PR change
leansphincs-26 16 arm64 Neoverse-V2 Proving time 180.47 ms 180.55 ms -0.14% (-0.60% to +0.09%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 138.87 ms 138.88 ms -1.78% (-10.52% to +11.96%)
leansphincs-26 16 arm64 Neoverse-V2 Verifying time 3.24 ms 3.26 ms +0.90% (-1.39% to +6.65%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.20 ms 3.26 ms +1.93% (-1.09% to +11.09%)
leansphincs-26 16 arm64 Neoverse-V2 Proof size 316,306 B 316,306 B 0 B (+0.00%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 316,306 B 316,306 B 0 B (+0.00%)
leansphincs-26 16 arm64 Neoverse-V2 Peak memory 1742.07 MiB 1743.12 MiB +0.15% (-0.41% to +0.58%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 819.95 MiB 819.17 MiB -0.15% (-0.52% to +0.03%)
leansphincs-26 16 arm64 Neoverse-V2 Peak heap 1395.64 MiB 1395.62 MiB -0.00% (-0.00% to +0.00%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 649.82 MiB 649.92 MiB +0.02% (-0.01% to +0.03%)
leansphincs-26 16 arm64 Neoverse-V2 Allocations 25,162 25,162 +0.00% (+0.00% to +0.00%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,860 25,861 +0.00% (-0.01% to +0.01%)
Prover stages
benchmark threads runner CPU base this PR change
leansphincs-26 16 arm64 Neoverse-V2 180.47 ms 180.55 ms -0.14% (-0.60% to +0.09%)
 ↳ build-witness 5.68 ms 5.68 ms +0.53% (-1.44% to +1.76%)
 ↳ commit 23.82 ms 23.72 ms +0.06% (-0.91% to +0.27%)
 ↳ execute-program 11.82 ms 11.97 ms +1.33% (-2.16% to +4.57%)
 ↳ flock-reductions 62.18 ms 62.19 ms +0.04% (-0.67% to +0.53%)
 ↳ pcs-open 57.44 ms 57.19 ms -0.89% (-1.76% to -0.31%)
 ↳ prove-bus 15.15 ms 15.20 ms +0.30% (+0.07% to +0.84%)
 ↳ prove-constraints 4.17 ms 4.28 ms +3.32% (-2.50% to +4.68%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 138.87 ms 138.88 ms -1.78% (-10.52% to +11.96%)
 ↳ build-witness 9.51 ms 9.38 ms -1.03% (-4.96% to +1.37%)
 ↳ commit 14.60 ms 14.30 ms -2.04% (-19.99% to +3.79%)
 ↳ execute-program 13.93 ms 13.72 ms -1.49% (-3.75% to +2.53%)
 ↳ flock-reductions 41.92 ms 41.97 ms -2.84% (-11.18% to +28.66%)
 ↳ pcs-open 41.40 ms 40.99 ms -1.00% (-9.35% to +13.12%)
 ↳ prove-bus 12.24 ms 11.47 ms +0.19% (-14.68% to +2.25%)
 ↳ prove-constraints 5.45 ms 5.46 ms +1.89% (-6.16% to +5.55%)

leanXMSS

benchmark threads runner CPU measure base this PR change
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Proving time 943.28 ms 939.34 ms -0.41% (-0.69% to +0.56%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Proving time 267.65 ms 266.89 ms -0.24% (-0.67% to +0.85%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Proving time 157.25 ms 157.66 ms +0.26% (-0.53% to +1.03%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Proving time 102.77 ms 103.48 ms +0.36% (-1.07% to +1.46%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 574.03 ms 573.86 ms +0.04% (-1.50% to +0.72%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 191.17 ms 191.43 ms +0.14% (-0.01% to +1.33%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 118.56 ms 120.65 ms +1.33% (-0.53% to +13.93%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 94.10 ms 94.36 ms +0.50% (-5.48% to +1.71%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Proving time 987.53 ms 986.99 ms +0.03% (-0.63% to +0.11%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Proving time 281.79 ms 281.21 ms -0.13% (-0.71% to +0.01%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Proving time 165.14 ms 164.88 ms +0.16% (-1.18% to +0.94%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Proving time 106.88 ms 106.39 ms -1.19% (-3.58% to +2.31%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 610.09 ms 606.89 ms +0.10% (-0.77% to +2.38%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 202.29 ms 202.13 ms -0.08% (-1.08% to +1.25%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 123.97 ms 122.23 ms -1.38% (-2.18% to -0.94%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 93.50 ms 96.81 ms +1.68% (-6.10% to +8.46%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Proving time 1.90 s 1.90 s -0.01% (-0.57% to +0.15%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Proving time 522.17 ms 521.42 ms -0.14% (-1.77% to +0.40%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Proving time 306.22 ms 305.95 ms -0.09% (-0.83% to +0.49%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Proving time 192.96 ms 192.15 ms +0.13% (-0.61% to +1.68%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 1.19 s 1.18 s -0.86% (-2.47% to +0.92%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 352.17 ms 347.82 ms -1.69% (-8.45% to +0.64%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 220.75 ms 219.49 ms -0.72% (-1.24% to +0.59%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 157.86 ms 159.64 ms +0.13% (-2.11% to +2.55%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Proving time 2.05 s 2.06 s +0.24% (-0.27% to +0.39%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Proving time 563.65 ms 563.25 ms +0.00% (-1.89% to +0.11%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Proving time 330.16 ms 330.07 ms -0.03% (-0.41% to +0.87%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Proving time 207.47 ms 207.67 ms +0.09% (-1.88% to +4.39%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 1.31 s 1.29 s -0.47% (-2.62% to +1.35%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 376.69 ms 377.31 ms +0.05% (-0.66% to +0.57%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 236.35 ms 234.95 ms -0.01% (-0.85% to +4.75%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 168.80 ms 165.50 ms -2.94% (-5.43% to +6.50%)
leanxmss-100 1 arm64 Neoverse-V2 Proving time 1.79 s 1.79 s +0.10% (-0.47% to +0.15%)
leanxmss-100 4 arm64 Neoverse-V2 Proving time 473.90 ms 473.88 ms -0.02% (-0.15% to +0.26%)
leanxmss-100 8 arm64 Neoverse-V2 Proving time 265.14 ms 265.04 ms -0.01% (-0.16% to +0.15%)
leanxmss-100 16 arm64 Neoverse-V2 Proving time 162.42 ms 162.68 ms +0.13% (-0.52% to +5.03%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 1.02 s 1.03 s +0.99% (-0.22% to +1.30%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 306.39 ms 304.38 ms -0.41% (-0.92% to +0.09%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 176.09 ms 175.75 ms -0.15% (-1.23% to -0.07%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 135.04 ms 135.40 ms -2.08% (-2.64% to +5.05%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Verifying time 4.03 ms 4.02 ms -0.31% (-3.18% to +0.39%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Verifying time 3.01 ms 3.00 ms +0.63% (-2.79% to +1.11%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Verifying time 2.90 ms 2.89 ms -0.39% (-2.00% to +1.04%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Verifying time 2.79 ms 2.83 ms +1.91% (-3.23% to +4.63%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.68 ms 3.69 ms -0.29% (-0.72% to +0.95%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.00 ms 3.01 ms -0.98% (-1.42% to +4.99%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 2.90 ms 2.95 ms +2.60% (-4.35% to +3.68%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.10 ms 3.11 ms -0.94% (-3.72% to +5.44%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Verifying time 6.75 ms 6.72 ms -0.43% (-2.75% to +2.98%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Verifying time 3.76 ms 3.73 ms +0.03% (-2.81% to +0.77%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Verifying time 3.33 ms 3.29 ms -0.09% (-2.66% to +2.69%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Verifying time 3.06 ms 3.06 ms -0.60% (-1.22% to +0.63%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 6.12 ms 5.90 ms -2.80% (-11.99% to +9.65%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.99 ms 4.01 ms +0.17% (-1.62% to +3.71%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.29 ms 3.28 ms -1.15% (-5.24% to +2.92%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.26 ms 3.34 ms +0.20% (-1.54% to +12.40%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Verifying time 4.87 ms 4.88 ms -0.12% (-2.08% to +1.00%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Verifying time 3.20 ms 3.18 ms -0.78% (-6.44% to +0.79%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Verifying time 3.17 ms 3.18 ms -0.85% (-4.03% to +2.50%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Verifying time 2.99 ms 3.05 ms +2.00% (-3.81% to +3.13%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.65 ms 4.72 ms +0.33% (-15.44% to +11.18%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.00 ms 3.02 ms +0.57% (-0.85% to +1.40%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 2.97 ms 2.95 ms +0.75% (-2.80% to +1.07%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.00 ms 3.04 ms -0.31% (-0.89% to +2.67%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Verifying time 10.28 ms 10.41 ms +1.26% (-0.02% to +2.98%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Verifying time 4.57 ms 4.65 ms +1.79% (-0.82% to +19.83%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Verifying time 4.02 ms 4.00 ms -0.56% (-2.34% to +5.78%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Verifying time 3.52 ms 3.54 ms -0.62% (-2.21% to +1.36%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 12.20 ms 12.01 ms -1.34% (-4.72% to +0.12%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.86 ms 4.86 ms +0.22% (-1.92% to +3.07%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.04 ms 4.07 ms +0.79% (-0.64% to +2.08%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.56 ms 3.60 ms +1.00% (-1.71% to +2.00%)
leanxmss-100 1 arm64 Neoverse-V2 Verifying time 3.21 ms 3.21 ms +0.17% (-0.10% to +0.44%)
leanxmss-100 4 arm64 Neoverse-V2 Verifying time 2.97 ms 2.97 ms +0.04% (-0.20% to +0.63%)
leanxmss-100 8 arm64 Neoverse-V2 Verifying time 3.06 ms 3.06 ms -0.19% (-2.06% to +0.11%)
leanxmss-100 16 arm64 Neoverse-V2 Verifying time 3.22 ms 3.20 ms -0.28% (-1.12% to +0.50%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.04 ms 3.08 ms +1.37% (-2.33% to +2.82%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.06 ms 3.06 ms -0.52% (-1.13% to +0.24%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.04 ms 3.04 ms +0.11% (-1.65% to +0.69%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.36 ms 3.35 ms -0.09% (-3.78% to +2.38%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Proof size 257,499 B 257,499 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Proof size 257,499 B 257,499 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Proof size 257,499 B 257,499 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Proof size 257,499 B 257,499 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 257,499 B 257,499 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 257,499 B 257,499 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 257,499 B 257,499 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 257,499 B 257,499 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Proof size 255,963 B 255,963 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Proof size 255,963 B 255,963 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Proof size 255,963 B 255,963 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Proof size 255,963 B 255,963 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 255,963 B 255,963 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 255,963 B 255,963 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 255,963 B 255,963 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 255,963 B 255,963 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Proof size 280,223 B 280,223 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Proof size 280,223 B 280,223 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Proof size 280,223 B 280,223 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Proof size 280,223 B 280,223 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 280,223 B 280,223 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 280,223 B 280,223 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 280,223 B 280,223 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 280,223 B 280,223 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Proof size 281,247 B 281,247 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Proof size 281,247 B 281,247 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Proof size 281,247 B 281,247 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Proof size 281,247 B 281,247 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 281,247 B 281,247 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 281,247 B 281,247 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 281,247 B 281,247 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 281,247 B 281,247 B 0 B (+0.00%)
leanxmss-100 1 arm64 Neoverse-V2 Proof size 303,314 B 303,314 B 0 B (+0.00%)
leanxmss-100 4 arm64 Neoverse-V2 Proof size 303,314 B 303,314 B 0 B (+0.00%)
leanxmss-100 8 arm64 Neoverse-V2 Proof size 303,314 B 303,314 B 0 B (+0.00%)
leanxmss-100 16 arm64 Neoverse-V2 Proof size 303,314 B 303,314 B 0 B (+0.00%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 303,314 B 303,314 B 0 B (+0.00%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 303,314 B 303,314 B 0 B (+0.00%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 303,314 B 303,314 B 0 B (+0.00%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 303,314 B 303,314 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Peak memory 1570.22 MiB 1568.65 MiB -0.10% (-1.02% to +0.02%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Peak memory 1591.44 MiB 1592.13 MiB +0.00% (-0.07% to +0.14%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Peak memory 1626.88 MiB 1627.95 MiB +0.09% (-0.27% to +0.27%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Peak memory 1714.79 MiB 1714.80 MiB +0.30% (-0.73% to +0.48%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 834.58 MiB 834.58 MiB +0.00% (-0.24% to +0.24%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 863.93 MiB 863.94 MiB +0.04% (-0.32% to +0.56%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 891.62 MiB 890.89 MiB -0.18% (-0.91% to +0.06%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 936.64 MiB 929.32 MiB -0.53% (-1.23% to -0.22%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Peak memory 1570.59 MiB 1569.02 MiB -0.10% (-1.02% to +0.02%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Peak memory 1592.58 MiB 1592.56 MiB +0.01% (-0.10% to +0.15%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Peak memory 1629.13 MiB 1629.86 MiB +0.03% (-0.31% to +0.22%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Peak memory 1729.31 MiB 1726.43 MiB -0.18% (-0.38% to +0.22%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 834.58 MiB 834.58 MiB +0.00% (-0.24% to +0.24%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 873.82 MiB 872.03 MiB -0.09% (-0.42% to +0.46%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 905.66 MiB 906.69 MiB +0.11% (-0.94% to +0.36%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 971.32 MiB 967.47 MiB -0.32% (-0.67% to +0.03%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Peak memory 1958.52 MiB 1958.66 MiB -0.00% (-1.13% to +0.13%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Peak memory 1980.80 MiB 1980.63 MiB -0.02% (-0.11% to +0.10%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Peak memory 2016.97 MiB 2020.46 MiB +0.05% (-0.02% to +0.42%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Peak memory 2110.54 MiB 2107.28 MiB -0.17% (-0.56% to +0.40%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1020.59 MiB 1020.59 MiB -0.00% (-0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1058.92 MiB 1057.37 MiB -0.18% (-0.69% to +0.29%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1086.94 MiB 1086.68 MiB +0.42% (-0.49% to +0.54%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1132.21 MiB 1134.76 MiB +0.21% (+0.07% to +0.71%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Peak memory 1961.16 MiB 1959.42 MiB -0.09% (-0.71% to +0.00%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Peak memory 1981.40 MiB 1981.25 MiB -0.02% (-0.11% to +0.08%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Peak memory 2022.29 MiB 2023.49 MiB +0.10% (-0.07% to +0.21%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Peak memory 2124.29 MiB 2118.45 MiB -0.53% (-0.69% to +0.57%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1046.60 MiB 1046.59 MiB -0.00% (-0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1070.34 MiB 1066.80 MiB -0.32% (-0.67% to +0.19%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1106.94 MiB 1101.90 MiB -0.53% (-0.86% to +0.22%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1171.15 MiB 1170.55 MiB +0.17% (-0.66% to +1.40%)
leanxmss-100 1 arm64 Neoverse-V2 Peak memory 1394.43 MiB 1394.39 MiB -0.01% (-0.86% to +0.14%)
leanxmss-100 4 arm64 Neoverse-V2 Peak memory 1419.55 MiB 1419.05 MiB -0.04% (-0.48% to +0.17%)
leanxmss-100 8 arm64 Neoverse-V2 Peak memory 1455.32 MiB 1456.29 MiB +0.18% (-0.47% to +0.25%)
leanxmss-100 16 arm64 Neoverse-V2 Peak memory 1524.89 MiB 1519.45 MiB -0.28% (-0.85% to +0.24%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 646.32 MiB 648.35 MiB +0.31% (+0.04% to +0.63%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 666.12 MiB 666.82 MiB +0.22% (-0.21% to +0.52%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 684.91 MiB 686.95 MiB +0.14% (-0.29% to +0.61%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 713.79 MiB 713.15 MiB -0.08% (-0.45% to +0.82%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Peak heap 600.60 MiB 600.60 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Peak heap 600.59 MiB 600.60 MiB +0.00% (-0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Peak heap 600.52 MiB 600.47 MiB +0.00% (-0.01% to +0.02%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Peak heap 600.52 MiB 600.52 MiB -0.01% (-0.02% to +0.04%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 318.89 MiB 318.89 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 318.89 MiB 318.89 MiB +0.00% (-0.03% to +0.03%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 318.86 MiB 318.91 MiB +0.01% (-0.04% to +0.04%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 319.04 MiB 319.03 MiB -0.01% (-0.07% to +0.08%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Peak heap 600.32 MiB 600.32 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Peak heap 600.27 MiB 600.29 MiB +0.00% (+0.00% to +0.01%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Peak heap 600.17 MiB 600.17 MiB +0.00% (-0.01% to +0.02%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Peak heap 600.24 MiB 600.17 MiB -0.01% (-0.02% to -0.00%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 318.60 MiB 318.60 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 318.65 MiB 318.64 MiB -0.00% (-0.03% to +0.03%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 318.66 MiB 318.73 MiB +0.02% (+0.02% to +0.04%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 318.77 MiB 318.67 MiB -0.03% (-0.08% to +0.10%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Peak heap 1201.06 MiB 1201.06 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Peak heap 1201.04 MiB 1201.05 MiB -0.00% (-0.00% to +0.01%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Peak heap 1200.93 MiB 1200.93 MiB +0.00% (-0.00% to +0.01%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Peak heap 1200.90 MiB 1200.91 MiB +0.00% (-0.01% to +0.01%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.68 MiB 637.68 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.64 MiB 637.70 MiB +0.01% (-0.01% to +0.02%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.61 MiB 637.61 MiB -0.00% (-0.01% to +0.00%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.83 MiB 637.80 MiB +0.00% (-0.01% to +0.01%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Peak heap 1200.58 MiB 1200.58 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Peak heap 1200.57 MiB 1200.56 MiB -0.00% (-0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Peak heap 1200.51 MiB 1200.52 MiB +0.00% (-0.01% to +0.01%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Peak heap 1200.44 MiB 1200.43 MiB -0.00% (-0.00% to +0.01%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.21 MiB 637.21 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.18 MiB 637.24 MiB +0.00% (-0.01% to +0.02%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.10 MiB 637.10 MiB -0.00% (-0.03% to +0.00%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.34 MiB 637.29 MiB -0.01% (-0.04% to +0.02%)
leanxmss-100 1 arm64 Neoverse-V2 Peak heap 1202.03 MiB 1202.03 MiB +0.00% (+0.00% to +0.00%)
leanxmss-100 4 arm64 Neoverse-V2 Peak heap 1202.14 MiB 1202.14 MiB -0.00% (-0.01% to +0.01%)
leanxmss-100 8 arm64 Neoverse-V2 Peak heap 1201.91 MiB 1201.92 MiB +0.00% (-0.00% to +0.01%)
leanxmss-100 16 arm64 Neoverse-V2 Peak heap 1201.72 MiB 1201.78 MiB +0.00% (-0.00% to +0.01%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 557.78 MiB 557.78 MiB +0.00% (+0.00% to +0.00%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 557.82 MiB 557.85 MiB +0.01% (-0.01% to +0.02%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 557.92 MiB 557.96 MiB +0.01% (-0.02% to +0.01%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 558.04 MiB 558.05 MiB +0.01% (-0.01% to +0.01%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Allocations 16,733 16,733 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Allocations 16,859 16,859 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Allocations 17,003 17,003 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Allocations 17,291 17,291 +0.00% (+0.00% to +0.01%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 16,835 16,835 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 16,964 16,964 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 17,112 17,112 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 17,408 17,408 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Allocations 20,451 20,451 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Allocations 20,577 20,577 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Allocations 20,721 20,721 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Allocations 21,009 21,009 +0.00% (-0.01% to +0.00%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 20,545 20,545 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 20,674 20,674 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 20,822 20,822 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 21,118 21,118 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Allocations 28,648 28,648 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Allocations 28,786 28,786 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Allocations 28,970 28,970 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Allocations 29,290 29,290 +0.00% (-0.06% to +0.00%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 28,794 28,794 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 28,935 28,935 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 29,123 29,123 +0.00% (-0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 29,451 29,451 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Allocations 35,456 35,456 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Allocations 35,594 35,594 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Allocations 35,778 35,778 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Allocations 36,098 36,098 +0.00% (-0.06% to +0.00%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 35,602 35,602 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 35,743 35,743 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 35,931 35,931 +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 36,259 36,259 +0.00% (+0.00% to +0.00%)
leanxmss-100 1 arm64 Neoverse-V2 Allocations 24,798 24,798 +0.00% (+0.00% to +0.00%)
leanxmss-100 4 arm64 Neoverse-V2 Allocations 25,016 25,016 +0.00% (+0.00% to +0.00%)
leanxmss-100 8 arm64 Neoverse-V2 Allocations 25,252 25,252 +0.00% (+0.00% to +0.00%)
leanxmss-100 16 arm64 Neoverse-V2 Allocations 25,724 25,724 +0.00% (-0.09% to +0.00%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,316 25,316 +0.00% (+0.00% to +0.00%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,571 25,571 +0.00% (+0.00% to +0.00%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,855 25,855 +0.00% (+0.00% to +0.00%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 26,422 26,423 +0.00% (+0.00% to +0.01%)
Prover stages
benchmark threads runner CPU base this PR change
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 943.28 ms 939.34 ms -0.41% (-0.69% to +0.56%)
 ↳ build-circuit 12.46 ms 12.38 ms +0.12% (-0.91% to +0.57%)
 ↳ prove-recursion 907.57 ms 903.86 ms -0.35% (-0.72% to +0.53%)
 ↳ reduce-claims 15.74 ms 15.52 ms -1.22% (-2.28% to +1.77%)
 ↳ reduce-in-rows 1.45 ms 1.42 ms -1.98% (-4.19% to +1.20%)
 ↳ verify 5.94 ms 5.91 ms -0.47% (-1.58% to +1.66%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 267.65 ms 266.89 ms -0.24% (-0.67% to +0.85%)
 ↳ build-circuit 10.96 ms 11.08 ms +1.31% (-1.94% to +3.46%)
 ↳ prove-recursion 243.71 ms 243.30 ms -0.37% (-0.68% to +0.69%)
 ↳ reduce-claims 5.23 ms 5.24 ms +1.13% (-6.80% to +4.17%)
 ↳ reduce-in-rows 1.51 ms 1.48 ms +0.97% (-3.46% to +1.57%)
 ↳ verify 5.86 ms 5.87 ms -0.23% (-0.30% to +0.33%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 157.25 ms 157.66 ms +0.26% (-0.53% to +1.03%)
 ↳ build-circuit 10.72 ms 10.85 ms +1.85% (-1.34% to +2.92%)
 ↳ prove-recursion 134.98 ms 134.79 ms +0.01% (-0.90% to +0.74%)
 ↳ reduce-claims 4.16 ms 4.17 ms +0.17% (-3.12% to +3.15%)
 ↳ reduce-in-rows 1.49 ms 1.51 ms +0.59% (-2.16% to +3.35%)
 ↳ verify 5.97 ms 6.09 ms +2.01% (+1.00% to +2.71%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 102.77 ms 103.48 ms +0.36% (-1.07% to +1.46%)
 ↳ build-circuit 10.47 ms 10.74 ms +1.93% (-2.70% to +3.75%)
 ↳ prove-recursion 80.31 ms 80.84 ms +0.42% (-0.58% to +1.19%)
 ↳ reduce-claims 4.06 ms 3.94 ms -1.78% (-5.97% to +2.16%)
 ↳ reduce-in-rows 1.45 ms 1.47 ms +2.46% (-2.83% to +5.86%)
 ↳ verify 6.31 ms 6.38 ms +0.55% (-1.61% to +2.80%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 574.03 ms 573.86 ms +0.04% (-1.50% to +0.72%)
 ↳ build-circuit 14.65 ms 14.57 ms +0.51% (-7.21% to +5.94%)
 ↳ prove-recursion 532.49 ms 533.41 ms +0.23% (-1.19% to +0.66%)
 ↳ reduce-claims 18.29 ms 18.25 ms -0.74% (-4.75% to +2.60%)
 ↳ reduce-in-rows 1.64 ms 1.62 ms +0.69% (-12.89% to +1.28%)
 ↳ verify 6.79 ms 6.73 ms -1.61% (-2.61% to +0.27%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 191.17 ms 191.43 ms +0.14% (-0.01% to +1.33%)
 ↳ build-circuit 15.22 ms 14.96 ms -0.82% (-3.63% to +1.76%)
 ↳ prove-recursion 160.42 ms 160.69 ms +0.13% (-0.39% to +0.80%)
 ↳ reduce-claims 7.03 ms 8.20 ms +17.25% (-7.34% to +29.59%)
 ↳ reduce-in-rows 1.97 ms 2.04 ms +3.56% (-7.34% to +7.20%)
 ↳ verify 6.65 ms 6.73 ms -1.72% (-2.40% to +3.80%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 118.56 ms 120.65 ms +1.33% (-0.53% to +13.93%)
 ↳ build-circuit 14.22 ms 14.83 ms +4.31% (+1.32% to +21.31%)
 ↳ prove-recursion 89.04 ms 89.30 ms +0.86% (-0.25% to +12.59%)
 ↳ reduce-claims 6.79 ms 7.23 ms +7.16% (-32.21% to +35.98%)
 ↳ reduce-in-rows 1.81 ms 1.88 ms +2.79% (-3.49% to +4.37%)
 ↳ verify 6.63 ms 6.69 ms +0.73% (+0.26% to +5.07%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 94.10 ms 94.36 ms +0.50% (-5.48% to +1.71%)
 ↳ build-circuit 14.72 ms 14.60 ms -0.81% (-5.28% to +0.09%)
 ↳ prove-recursion 62.98 ms 63.42 ms +2.49% (-6.05% to +4.66%)
 ↳ reduce-claims 7.51 ms 6.40 ms -13.64% (-20.86% to -1.70%)
 ↳ reduce-in-rows 2.01 ms 1.96 ms -0.94% (-8.16% to +5.00%)
 ↳ verify 7.03 ms 7.06 ms +0.19% (-1.61% to +1.02%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 987.53 ms 986.99 ms +0.03% (-0.63% to +0.11%)
 ↳ build-circuit 12.36 ms 12.30 ms -0.39% (-1.17% to -0.07%)
 ↳ prove-recursion 937.09 ms 936.71 ms +0.06% (-0.58% to +0.13%)
 ↳ reduce-claims 30.84 ms 30.81 ms -0.00% (-2.04% to +0.77%)
 ↳ reduce-in-rows 1.48 ms 1.49 ms -0.42% (-7.85% to +4.61%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 281.79 ms 281.21 ms -0.13% (-0.71% to +0.01%)
 ↳ build-circuit 12.19 ms 11.94 ms -1.86% (-2.80% to +1.15%)
 ↳ prove-recursion 252.36 ms 251.67 ms -0.28% (-0.55% to +0.20%)
 ↳ reduce-claims 10.52 ms 10.48 ms -0.41% (-3.27% to +1.53%)
 ↳ reduce-in-rows 1.53 ms 1.53 ms +1.67% (-3.49% to +3.67%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 165.14 ms 164.88 ms +0.16% (-1.18% to +0.94%)
 ↳ build-circuit 11.87 ms 11.85 ms -0.15% (-1.78% to +2.24%)
 ↳ prove-recursion 138.95 ms 139.08 ms +0.25% (-1.61% to +1.26%)
 ↳ reduce-claims 7.79 ms 7.77 ms +0.26% (-1.70% to +1.41%)
 ↳ reduce-in-rows 1.52 ms 1.55 ms +0.65% (-1.84% to +6.28%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 106.88 ms 106.39 ms -1.19% (-3.58% to +2.31%)
 ↳ build-circuit 11.59 ms 11.52 ms -2.95% (-6.73% to +5.80%)
 ↳ prove-recursion 82.64 ms 82.35 ms -1.24% (-3.34% to +1.88%)
 ↳ reduce-claims 6.69 ms 6.56 ms -2.00% (-3.35% to +1.56%)
 ↳ reduce-in-rows 1.49 ms 1.50 ms +1.21% (-1.25% to +4.11%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 610.09 ms 606.89 ms +0.10% (-0.77% to +2.38%)
 ↳ build-circuit 15.17 ms 15.18 ms -1.32% (-2.05% to +3.32%)
 ↳ prove-recursion 552.95 ms 549.91 ms +0.12% (-0.78% to +2.43%)
 ↳ reduce-claims 34.00 ms 34.26 ms +0.74% (-2.49% to +2.87%)
 ↳ reduce-in-rows 1.71 ms 1.78 ms +1.22% (-5.63% to +12.08%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 202.29 ms 202.13 ms -0.08% (-1.08% to +1.25%)
 ↳ build-circuit 16.13 ms 16.22 ms +0.55% (-5.59% to +3.66%)
 ↳ prove-recursion 165.09 ms 164.83 ms -0.35% (-0.74% to +0.31%)
 ↳ reduce-claims 13.28 ms 13.74 ms +2.30% (-1.57% to +11.84%)
 ↳ reduce-in-rows 2.08 ms 2.08 ms +0.07% (-7.71% to +10.01%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 123.97 ms 122.23 ms -1.38% (-2.18% to -0.94%)
 ↳ build-circuit 15.12 ms 14.98 ms -2.54% (-4.60% to +0.51%)
 ↳ prove-recursion 91.39 ms 91.13 ms -0.06% (-1.06% to +0.16%)
 ↳ reduce-claims 10.41 ms 9.16 ms -10.18% (-21.54% to -3.60%)
 ↳ reduce-in-rows 1.89 ms 1.80 ms -4.14% (-10.23% to +2.38%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 93.50 ms 96.81 ms +1.68% (-6.10% to +8.46%)
 ↳ build-circuit 15.54 ms 15.68 ms +1.66% (-2.50% to +5.77%)
 ↳ prove-recursion 61.43 ms 64.55 ms +4.05% (-9.37% to +10.40%)
 ↳ reduce-claims 9.13 ms 9.09 ms +3.38% (-7.84% to +6.14%)
 ↳ reduce-in-rows 2.09 ms 2.06 ms -0.96% (-4.21% to +4.72%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 1.90 s 1.90 s -0.01% (-0.57% to +0.15%)
 ↳ build-circuit 25.28 ms 25.31 ms +0.09% (-0.62% to +0.75%)
 ↳ prove-recursion 1.84 s 1.84 s -0.03% (-0.59% to +0.14%)
 ↳ reduce-claims 20.91 ms 21.11 ms +1.06% (+0.12% to +1.40%)
 ↳ reduce-in-rows 2.72 ms 2.76 ms +0.85% (-1.08% to +1.76%)
 ↳ verify 11.58 ms 11.60 ms +0.02% (-0.05% to +0.60%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 522.17 ms 521.42 ms -0.14% (-1.77% to +0.40%)
 ↳ build-circuit 21.66 ms 21.63 ms +0.54% (-1.25% to +1.10%)
 ↳ prove-recursion 479.48 ms 478.90 ms -0.17% (-1.96% to +0.43%)
 ↳ reduce-claims 6.86 ms 7.04 ms +2.49% (-1.56% to +5.29%)
 ↳ reduce-in-rows 2.80 ms 2.79 ms +0.40% (-2.62% to +2.43%)
 ↳ verify 11.25 ms 11.25 ms -0.14% (-0.49% to +1.05%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 306.22 ms 305.95 ms -0.09% (-0.83% to +0.49%)
 ↳ build-circuit 21.87 ms 21.95 ms +0.70% (-5.38% to +3.52%)
 ↳ prove-recursion 264.34 ms 264.03 ms -0.11% (-0.54% to +0.16%)
 ↳ reduce-claims 5.13 ms 5.12 ms -0.73% (-3.21% to +1.30%)
 ↳ reduce-in-rows 2.92 ms 2.87 ms -0.46% (-5.56% to +1.12%)
 ↳ verify 11.86 ms 11.82 ms -0.42% (-0.72% to +1.70%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 192.96 ms 192.15 ms +0.13% (-0.61% to +1.68%)
 ↳ build-circuit 21.14 ms 21.10 ms -0.52% (-2.90% to +0.55%)
 ↳ prove-recursion 151.39 ms 151.32 ms +0.34% (-0.89% to +2.30%)
 ↳ reduce-claims 4.64 ms 4.52 ms -2.67% (-4.93% to +1.16%)
 ↳ reduce-in-rows 2.82 ms 2.84 ms -0.36% (-4.40% to +2.59%)
 ↳ verify 12.36 ms 12.31 ms -0.43% (-0.70% to +1.23%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 1.19 s 1.18 s -0.86% (-2.47% to +0.92%)
 ↳ build-circuit 34.73 ms 33.51 ms -3.50% (-6.21% to +1.87%)
 ↳ prove-recursion 1.11 s 1.10 s -0.60% (-2.47% to +1.14%)
 ↳ reduce-claims 27.29 ms 26.60 ms -2.71% (-3.52% to -0.09%)
 ↳ reduce-in-rows 3.98 ms 3.91 ms -0.24% (-5.23% to +4.51%)
 ↳ verify 12.66 ms 12.50 ms -0.55% (-3.88% to +1.44%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 352.17 ms 347.82 ms -1.69% (-8.45% to +0.64%)
 ↳ build-circuit 31.03 ms 31.06 ms +1.21% (-3.42% to +2.34%)
 ↳ prove-recursion 297.22 ms 292.35 ms -2.28% (-9.17% to +0.44%)
 ↳ reduce-claims 8.88 ms 8.85 ms -1.26% (-13.84% to +7.86%)
 ↳ reduce-in-rows 3.81 ms 3.80 ms +0.05% (-2.76% to +2.12%)
 ↳ verify 11.84 ms 11.92 ms +0.01% (-0.47% to +1.51%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 220.75 ms 219.49 ms -0.72% (-1.24% to +0.59%)
 ↳ build-circuit 30.80 ms 30.77 ms +0.55% (-0.90% to +0.87%)
 ↳ prove-recursion 165.57 ms 164.48 ms -0.81% (-1.83% to +0.72%)
 ↳ reduce-claims 7.45 ms 7.62 ms -0.99% (-6.17% to +4.07%)
 ↳ reduce-in-rows 3.85 ms 3.81 ms -1.39% (-2.03% to +1.36%)
 ↳ verify 12.44 ms 12.34 ms -1.10% (-2.32% to +0.57%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 157.86 ms 159.64 ms +0.13% (-2.11% to +2.55%)
 ↳ build-circuit 30.65 ms 30.89 ms +0.51% (-2.50% to +4.62%)
 ↳ prove-recursion 104.41 ms 104.72 ms +0.23% (-1.09% to +2.83%)
 ↳ reduce-claims 7.02 ms 6.43 ms -2.00% (-30.10% to +16.95%)
 ↳ reduce-in-rows 3.81 ms 3.82 ms -0.34% (-4.18% to +4.75%)
 ↳ verify 12.89 ms 12.80 ms -1.40% (-1.84% to +1.53%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 2.05 s 2.06 s +0.24% (-0.27% to +0.39%)
 ↳ build-circuit 29.49 ms 29.56 ms -0.15% (-2.96% to +1.17%)
 ↳ prove-recursion 1.95 s 1.95 s +0.25% (-0.29% to +0.52%)
 ↳ reduce-claims 55.93 ms 56.21 ms +0.50% (-0.80% to +1.02%)
 ↳ reduce-in-rows 2.94 ms 2.95 ms -0.30% (-2.40% to +2.92%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 563.65 ms 563.25 ms +0.00% (-1.89% to +0.11%)
 ↳ build-circuit 25.86 ms 25.75 ms -0.50% (-1.47% to +0.83%)
 ↳ prove-recursion 506.55 ms 506.74 ms +0.04% (-2.19% to +0.19%)
 ↳ reduce-claims 17.31 ms 17.31 ms +0.55% (-1.63% to +1.50%)
 ↳ reduce-in-rows 2.96 ms 2.96 ms -1.00% (-1.62% to +1.41%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 330.16 ms 330.07 ms -0.03% (-0.41% to +0.87%)
 ↳ build-circuit 26.03 ms 26.17 ms +0.21% (-2.12% to +1.97%)
 ↳ prove-recursion 278.82 ms 277.88 ms -0.15% (-0.47% to +0.85%)
 ↳ reduce-claims 12.05 ms 12.15 ms +1.61% (-1.34% to +3.29%)
 ↳ reduce-in-rows 3.05 ms 3.10 ms -0.44% (-3.02% to +5.53%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 207.47 ms 207.67 ms +0.09% (-1.88% to +4.39%)
 ↳ build-circuit 25.01 ms 25.09 ms +0.11% (-6.17% to +2.88%)
 ↳ prove-recursion 160.05 ms 159.75 ms -0.16% (-0.77% to +5.50%)
 ↳ reduce-claims 9.51 ms 9.39 ms -1.09% (-3.48% to +0.45%)
 ↳ reduce-in-rows 2.93 ms 2.97 ms +1.64% (-7.33% to +2.48%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 1.31 s 1.29 s -0.47% (-2.62% to +1.35%)
 ↳ build-circuit 42.04 ms 40.73 ms -2.62% (-5.92% to +6.52%)
 ↳ prove-recursion 1.17 s 1.16 s -0.30% (-2.29% to +1.66%)
 ↳ reduce-claims 69.65 ms 69.84 ms -1.99% (-3.58% to +1.88%)
 ↳ reduce-in-rows 4.06 ms 3.99 ms -3.34% (-9.33% to +0.93%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 376.69 ms 377.31 ms +0.05% (-0.66% to +0.57%)
 ↳ build-circuit 35.98 ms 35.66 ms +0.20% (-2.41% to +3.29%)
 ↳ prove-recursion 306.07 ms 306.22 ms +0.20% (-0.31% to +0.30%)
 ↳ reduce-claims 20.12 ms 20.22 ms +0.70% (-1.92% to +1.20%)
 ↳ reduce-in-rows 4.08 ms 4.09 ms +0.21% (-2.30% to +1.60%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 236.35 ms 234.95 ms -0.01% (-0.85% to +4.75%)
 ↳ build-circuit 34.73 ms 35.06 ms +0.02% (-0.26% to +6.96%)
 ↳ prove-recursion 171.67 ms 171.61 ms +0.03% (-0.31% to +7.08%)
 ↳ reduce-claims 14.58 ms 13.76 ms -4.64% (-24.47% to +0.37%)
 ↳ reduce-in-rows 4.20 ms 4.25 ms +0.61% (-4.54% to +2.58%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 168.80 ms 165.50 ms -2.94% (-5.43% to +6.50%)
 ↳ build-circuit 35.54 ms 35.68 ms +0.14% (-2.81% to +3.37%)
 ↳ prove-recursion 106.70 ms 104.84 ms -5.00% (-6.17% to +9.36%)
 ↳ reduce-claims 12.45 ms 11.64 ms -8.08% (-23.10% to +14.12%)
 ↳ reduce-in-rows 4.17 ms 4.18 ms +0.95% (-0.48% to +2.45%)
leanxmss-100 1 arm64 Neoverse-V2 1.79 s 1.79 s +0.10% (-0.47% to +0.15%)
 ↳ build-witness 46.82 ms 46.88 ms +0.12% (-0.06% to +0.37%)
 ↳ commit 295.55 ms 296.67 ms +0.30% (-0.03% to +0.42%)
 ↳ execute-program 10.48 ms 10.43 ms +0.64% (-1.04% to +1.96%)
 ↳ flock-reductions 644.95 ms 645.43 ms +0.07% (-0.89% to +0.30%)
 ↳ pcs-open 647.68 ms 646.58 ms -0.16% (-0.27% to +0.03%)
 ↳ prove-bus 132.11 ms 132.08 ms +0.13% (-0.85% to +0.38%)
 ↳ prove-constraints 15.34 ms 15.27 ms -0.95% (-1.51% to +0.48%)
leanxmss-100 4 arm64 Neoverse-V2 473.90 ms 473.88 ms -0.02% (-0.15% to +0.26%)
 ↳ build-witness 12.84 ms 12.77 ms -0.49% (-0.85% to -0.23%)
 ↳ commit 74.64 ms 75.09 ms +0.50% (-0.29% to +0.73%)
 ↳ execute-program 10.13 ms 10.35 ms +1.51% (-0.69% to +4.43%)
 ↳ flock-reductions 168.65 ms 168.39 ms -0.16% (-0.43% to +0.56%)
 ↳ pcs-open 166.25 ms 166.09 ms -0.11% (-0.49% to +0.30%)
 ↳ prove-bus 35.46 ms 35.50 ms +0.07% (-0.46% to +0.37%)
 ↳ prove-constraints 5.48 ms 5.49 ms +0.13% (-1.13% to +0.80%)
leanxmss-100 8 arm64 Neoverse-V2 265.14 ms 265.04 ms -0.01% (-0.16% to +0.15%)
 ↳ build-witness 7.40 ms 7.34 ms +0.02% (-0.94% to +0.10%)
 ↳ commit 38.34 ms 38.44 ms +0.43% (-0.30% to +0.73%)
 ↳ execute-program 10.09 ms 10.31 ms +2.17% (-3.61% to +3.88%)
 ↳ flock-reductions 93.71 ms 93.52 ms -0.18% (-0.45% to +0.19%)
 ↳ pcs-open 90.36 ms 90.35 ms -0.16% (-0.45% to +0.50%)
 ↳ prove-bus 20.65 ms 20.55 ms -0.37% (-0.52% to -0.23%)
 ↳ prove-constraints 4.20 ms 4.17 ms -1.17% (-2.31% to +0.41%)
leanxmss-100 16 arm64 Neoverse-V2 162.42 ms 162.68 ms +0.13% (-0.52% to +5.03%)
 ↳ build-witness 4.77 ms 4.73 ms -0.94% (-1.99% to +2.54%)
 ↳ commit 20.53 ms 20.45 ms -0.99% (-2.68% to +0.64%)
 ↳ execute-program 10.40 ms 10.52 ms +2.11% (+0.37% to +6.57%)
 ↳ flock-reductions 56.55 ms 56.44 ms -0.40% (-0.56% to +12.83%)
 ↳ pcs-open 52.76 ms 52.54 ms +0.52% (-1.06% to +1.90%)
 ↳ prove-bus 13.34 ms 13.30 ms +0.14% (-0.77% to +0.46%)
 ↳ prove-constraints 3.88 ms 3.80 ms +0.54% (-4.08% to +2.07%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 1.02 s 1.03 s +0.99% (-0.22% to +1.30%)
 ↳ build-witness 68.99 ms 69.41 ms +0.49% (-0.37% to +5.02%)
 ↳ commit 184.00 ms 185.20 ms +0.65% (-2.17% to +1.24%)
 ↳ execute-program 12.32 ms 12.42 ms +3.15% (-1.21% to +21.29%)
 ↳ flock-reductions 299.48 ms 302.14 ms +0.56% (-0.35% to +1.89%)
 ↳ pcs-open 352.01 ms 355.77 ms +1.25% (-0.36% to +1.38%)
 ↳ prove-bus 80.68 ms 81.15 ms -0.37% (-2.43% to +1.60%)
 ↳ prove-constraints 18.97 ms 19.33 ms +2.34% (-3.88% to +4.29%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 306.39 ms 304.38 ms -0.41% (-0.92% to +0.09%)
 ↳ build-witness 19.60 ms 19.57 ms +0.05% (-1.32% to +0.75%)
 ↳ commit 48.21 ms 48.39 ms -0.14% (-2.34% to +2.72%)
 ↳ execute-program 12.72 ms 13.02 ms +0.48% (-4.20% to +4.03%)
 ↳ flock-reductions 87.66 ms 87.39 ms -0.31% (-1.30% to +0.05%)
 ↳ pcs-open 104.69 ms 103.50 ms -0.67% (-1.37% to +0.25%)
 ↳ prove-bus 25.07 ms 24.87 ms -1.04% (-1.66% to +0.40%)
 ↳ prove-constraints 7.38 ms 7.46 ms -0.04% (-1.56% to +1.99%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 176.09 ms 175.75 ms -0.15% (-1.23% to -0.07%)
 ↳ build-witness 10.86 ms 10.85 ms -0.27% (-0.95% to +0.74%)
 ↳ commit 23.88 ms 23.82 ms -0.13% (-0.88% to +0.04%)
 ↳ execute-program 12.20 ms 11.97 ms -1.27% (-4.00% to +0.54%)
 ↳ flock-reductions 49.85 ms 49.81 ms -0.18% (-0.55% to +0.17%)
 ↳ pcs-open 59.47 ms 59.19 ms -0.17% (-1.89% to +0.71%)
 ↳ prove-bus 14.69 ms 14.53 ms -1.12% (-2.26% to +0.47%)
 ↳ prove-constraints 5.21 ms 5.24 ms +0.39% (-1.97% to +0.93%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 135.04 ms 135.40 ms -2.08% (-2.64% to +5.05%)
 ↳ build-witness 7.56 ms 7.44 ms -0.68% (-5.62% to +3.94%)
 ↳ commit 14.80 ms 14.43 ms -2.97% (-11.47% to +6.33%)
 ↳ execute-program 12.65 ms 12.72 ms +0.56% (-3.34% to +2.45%)
 ↳ flock-reductions 39.74 ms 39.80 ms -2.57% (-3.35% to +6.47%)
 ↳ pcs-open 43.91 ms 44.01 ms -2.17% (-4.42% to +5.72%)
 ↳ prove-bus 11.91 ms 11.88 ms -0.53% (-3.14% to +6.57%)
 ↳ prove-constraints 4.80 ms 4.96 ms +3.19% (-2.00% to +5.64%)

@kevaundray
kevaundray marked this pull request as draft October 8, 2026 08:07
@kevaundray kevaundray changed the title Add executable Lean WHIR model and checked algebraic properties Add executable Lean WHIR and checked list-binding composition Oct 8, 2026
@kevaundray

Copy link
Copy Markdown
Collaborator Author

This comment was created with Claude Code, prompted by @kevaundray.

Clarifying what is and is not proved

At bc955fc3, this is a conditional security proof of an executable Lean model, not a complete formal verification of the deployed Rust PCS. A clean axiom audit does not eliminate hypotheses passed into a theorem.

The final concrete_list_binding explicitly requires:

  • PublicRandomCompressionDMV: the probabilistic distinguishing bound for the specified duplex mode and simulator. Structural prerequisites are proved; the probabilistic DMV theorem is not discharged in Lean.
  • ConcretePrimitiveGap: an externally supplied bound for replacing random compression with deterministic BLAKE2s, for a supplied permitted adversary class. No small concrete loss is established. Collision resistance alone does not discharge this hypothesis.
  • Resource bounds: attacker/verifier work, completion paths and commitment announcements must satisfy the theorem's budget premises.

Further limits:

  • The public-transcript composition targets Implement BLAKE2s duplex with conditional mode security #552 at ff6a2753, not the older keyed transcript in the production baseline. It therefore does not establish that baseline transcript's security.
  • Rust/Lean differential tests are useful implementation evidence, not a universal Rust-to-Lean refinement proof. The optimized Rust NTT and compiler remain outside the kernel-checked correspondence.
  • The claimed result is list binding, not unique binding. Proof-of-work amplification is excluded from the advertised numerical bounds; this is not a numerical 128-bit whole-protocol security proof.

The transcript change follows the separate review request in #529 and proposed construction in #552. It should not be interpreted as a demonstrated attack on the older transcript. The concrete Rust bug reported by this formalization is the separate selector-validation issue in #565, not a transcript exploit.

The remaining review priorities are to justify the exact DMV instantiation, identify a meaningful permitted adversary class and concrete primitive loss, and assess the implementation correspondence. “No sorry or extra axioms” and “production WHIR security is proved” are different claims.

Store executable digests and squeeze outputs as data behind csimp equalities,
add the observed physical record-capture compiler, literal byte transport and
current caller parser coverage, and derive the parser's call order, domain,
proof bytes and empty hints from an accepted setup, receive, payload and
binding replay (SpongefishCurrentAcceptedJoin).
…coverage

The full current source program re-walks the opening over the replay events
and authenticates every query batch with counted hash programs. A current
root policy (cap Q(Q+1)) and the ported physical freeze give opening_cover,
and reduction_full proves the reduction to the public good event. The
endpoint full_knowledge_bound is conditional only on Refines.
…knowledge bound

A per-coin builder reconstructs each opening packet's incoming caller data
from the erased table (caller original, first-mention root captures, earlier
packet answers, replies parsed from the packet history). On every ideal
table where the public good event fires this gives the state path, so
current_knowledge bounds native acceptance with public extraction failure by
the sum over the four binding shapes of finalBound, and current_knowledge_bits
gives 2^-lambda for per-shape budgets up to 2^(49-lambda).
kevaundray added a commit to kevaundray/leanVM that referenced this pull request Oct 13, 2026
…ks, PCS, collisions and the AIR link

RecParts splits hrec: the parent's circuit holds a verifier of each child, certified checks reducing input claims to output claims. Where the parent's circuit is satisfied (which hrec now receives, as sat_tree_at's induction has it), a check lets a false input through with true outputs only on its event, and each check's outputs are later checks' inputs or openings of the child's committed witness, true off the PCS event (leanEthereum#551). RecParts.ins_ok: off those events every check's inputs are true; RecParts.least_ok: the least such events satisfy the premises for any claims. RecParts.hrec gives hrec off the checks' events, the PCS event and the collision event from the AIR link, the premise left: a child's AIR claims true on its committed witness give its circuit satisfied at the statement its parent's verifier reads. tree_sound_parts bounds the tree's failures by the sum of those fractions.

A sumcheck is such a check: sumcheck_claim_agree (the input claim is bound before the first challenge with the hints as seeds) gives sumcheck_run_sound_at, which drops the premise that the input claim is false and bounds the oracles at which the test passes with a false input and true outputs (sumcheckFalse); sumcheck_part reads it as a check's event. The run's answer theorems take their instance premises at the vectors put in at one oracle.
kevaundray added a commit to kevaundray/leanVM that referenced this pull request Oct 13, 2026
… an event and reduce the AIR link

The design summaries now hold, per shape, the claims `Design::carried` takes from a statement of labeled words, the statement `Reduced::statement` exposes for labeled reduction outputs, each tier's `Design::fixed_claim` on labeled hints at zero and at differing heights, the edge layout, and once the scalars `bind_state` binds; `checkdesign` compares each with `Rec/DesignClaims.lean` on all 600 shapes, with kernel-checked mutations for every rule, and computes each fixed stack's variables instead of reading them. DesignClaims proves the exposed statement's claims are the reduction's outputs, the fixed stack's placement, that a fresh fixed term reads the child's own column, and the bound state and digest round trips.

`Rec/Collision.lean` bounds an adaptive prover's compression collisions and near window collisions under a uniform oracle and derives `HashCRP`, `WindowCRP` and `RomAnswers` from them; `crEvent` bounds `crBad`, and `PcsBound` states leanEthereum#551's bound as the interface for `pcsBad`. `Rec/AirLink.lean` proves the AIR's row, public and bus claims on a committed witness give `Model.Sat`, the bus from its GKR products off a bounded draw event, leaving `ChecksGiveRows`; `Rec/TreeBound.lean` combines the bounds.
kevaundray added a commit to kevaundray/leanVM that referenced this pull request Oct 13, 2026
…he AIR's challenges from a run and match leanEthereum#551's bound to pcsBad

Run.lean: the run theorems take the honest instance, hints and true children as functions of the oracle fixed before the check's challenges (CommittedBefore, Run.committed_at, Run.sumcheck_committed and the like, draws_not_fixed). AirRun.lean: the bus's and the constraint batch's draws as a run's challenges after the commitment, the prover adaptive (busRun_frac, batchRun_frac), and tree_sound_run with no lens premise. PcsMatch.lean: leanEthereum#551's current_knowledge conclusion in its own form with a fiber-uniform map to its outcomes and pcsBad inside its event gives PcsBound (Pcs551.frac, pcsBound_of_551), and compress_fiber discharges the fiber premise for the ideal compression model read through an injective node encoding.
kevaundray added a commit to kevaundray/leanVM that referenced this pull request Oct 13, 2026
…-to-end tree bound and reduce the AIR link to the honest instances

A run's cr is now asked between two executions both off their execution's event, which every round theorem has. Run.cr_of_extract derives it from a causal, normalized prover whose rows the prefix binds output words the prefix fixed: a row whose input is first queried after the squeeze is a collision when its output is an earlier answer and otherwise a late hit on a target (Collision.LateHit, at most Q B / |V|^4, Edges.lateEvent_frac), charged per execution beside epsCR in tree_sound_exec. A later query hitting a word the prefix fixed is a collision only when that word is an earlier answer.

AirLink.tree_sound_end takes the PCS term from leanEthereum#551 and states the tree's bound per child as D/|E| + leanEthereum#551's finalBound sum + epsCR + epsLate; Edges.tree_bound_deployed evaluates it (below 2^-19 for 2^10 nodes at leanEthereum#551 budgets 2^20, below 2^-7 at 2^32) and Edges.pcs_dominates shows leanEthereum#551's query term dominates.

AirLink.ChecksGiveInst states the table sumcheck's input claim as the committed witness's honest sum and the bus GKR's roots as its honest products; checksGiveBatch_of_inst gives ChecksGiveBatch from it.
kevaundray added a commit to kevaundray/leanVM that referenced this pull request Oct 14, 2026
…ights and make GKR layers RecParts checks

Rec/Tries.lean: an outcome is an oracle per try with the compression oracle shared; an event at most an ε fraction of try i's oracle at every value of the other tries' oracles is at most ε of all outcomes (Bind.frac_fix_le), so whichever try the prover outputs fails on at most the sum of the tries' bounds (frac_pick_le, frac_pick_le_mul), and Edges.tries_bound_deployed folds it into the end-to-end bound: m / 2^7 at leanEthereum#551 budgets 2^32, m / 2^19 at 2^20.

Rec/Heights.lean: Circuit::heights transcribed from Table::height_log (circuitHeights), proven to hold the rows (heightsHold_circuit), so checksGiveRows_of_tree drops HeightsHold. Rust tests compare height_log with the transcription and check, on a tree of one tier and one of two, that each circuit Tree::converge returns sits at its tier's heights holding its rows.

Rec/GkrParts.lean: a radix-four GKR layer past the top meets RecParts.Ok.test off its sumcheck's event, a line event (at most 2|S| pairs) and a λ event (at most one λ) (Bind.layer_part, lineBad_card, lamBad_card).

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant