Repository navigation
Conversation
dot zipped two slice iterators; the patch (pre-extraction only) indexes both slices instead, so the loop extracts over a range, as base_fold's does. The verifier's tests and the real-proof suite pass on the patched source.
dot_spec: the extracted dot is the sum of products in Ext3. ext_row_spec: ext_row regroups a row's words three to a lane. deeper_fold: given eq_kernel's output, dot(ext_row(row), weights) is ArkLib's multilinearCombine at the fold point of the row's lanes, lane i the extension element of words 3i, 3i + 1, 3i + 2. Its axioms are level0_fold's: Lean's three and the field proofs' bv_decide certificates.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #1: the WHIR fold of a queried row past level 0,
dot(ext_row(row), eq_kernel(r)), is ArkLib'smultilinearCombineatrof the row's lanes. With #1'slevel0_foldthis covers the verifier's fold at every level.What is proved
In
crates/verifier/proofs/verifier/lean/Verifier/Verification/:Dot.lean:dot_spec: the extracteddotof equal-length slices is the sum of products inExt3.ext_row_spec:ext_rowregroups a row's words three to a lane (wordsE).deeper_fold: giveneq_kernel's output,dot(ext_row(row), weights)of a row of3 · 2^nwords ismultilinearCombine (extLanes row n) r (), laneibeing the extension element of words3i, 3i + 1, 3i + 2.Std.lean: hax triples forVec::newandVec::push.deeper_foldrests on the same axioms aslevel0_fold: Lean's three and the field proofs'bv_decidecertificates, no opaque item's assumption.Patch
08-dot-by-index.patch(pre-extraction only) writesdot's loop over indices instead of azipof slice iterators. The verifier's tests and the real-proof suite (-p leanvm_core --test verifiers) pass on the patched source.Bug hunting
No bug found on this path. Checked that a prover cannot trip the preconditions the proofs need: every row reaching
ext_rowanddothas the length the verifier fixes (the raw form reads exactlyleaf_words, the pruned form'sexpandrequires it), folds are at most 6, withineq_kernel_spec's bound of 8, and the pruned openings come back in query order, duplicates included. Also revisited the raw form's unchecked level-0 lanes pastn_lanes(the pruned form forces them to zero): by argument, not by a test, they cannot move a claim, sinceevaluate_basisis a batch of the stack claims' weights, each of which should be zero outside its slot. Confirming that last step for every claim kind is an open item.Warnings
14, as on #1.