Continuations (Approach 2): prove executions epoch-by-epoch#685
Draft
nicole-graus wants to merge 31 commits into
Draft
Continuations (Approach 2): prove executions epoch-by-epoch#685nicole-graus wants to merge 31 commits into
nicole-graus wants to merge 31 commits into
Conversation
…orst-case local-to-global memory stress benchmark
… count by running the executor only, as a no-proving proxy for monolithic proving memory
… ordering constraint
… constrain it boolean, leaving the epoch-local Memory bus and the range/ordering checks on unconditional multiplicity so the cross-epoch init_epoch < fini_epoch ordering check can never be skipped via MU; padding rows stay harmless because they self-cancel on the Memory bus and send only valid range/ordering lookups. Also add a design doc describing the continuation local-to-global memory protocol, both MU-wiring designs, and the soundness reasoning.
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.
Motivation
Monolithic proving holds the whole execution trace in memory, so program size is bounded by RAM. Continuations split a long execution into fixed-size epochs that are proven independently, keeping peak memory flat as the program grows. Only memory consistency has to cross epoch boundaries.
What this does
GlobalMemoryLogUp plus aglobal_memorytable that anchors genesis (initial memory, recomputed from the ELF by the verifier — not prover-supplied) and finalization (final values).Soundness mechanisms
IsHalfwordhalfwords; values viaAreBytes).fini_epochas a verifier-supplied per-table constant (1-based labels, genesis = 0) — the prover can't choose it.init_epoch < fini_epoch, checked viaIsB20[fini_epoch − 1 − init_epoch], preventing a row from referencing a future/own epoch to inject an unjustified value.MUselector gating the GlobalMemory bus so padding rows are inert; the Memory bus and range/ordering checks stay unconditional, so the ordering check can never be skipped viaMU.Full write-up, including both
MU-wiring designs and the adversarial-review reasoning, indocs/continuations_l2g_design.md.Status — draft
Known soundness gap, deferred: cross-epoch register continuity (epoch
i's register init is a prover-supplied snapshot, not yet bound to epochi-1's fini). Memory continuity is complete.How to test