-
Notifications
You must be signed in to change notification settings - Fork 333
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore: Explanations about skippable #11984
Conversation
f202c1e
to
69953cb
Compare
|
||
## Introduction | ||
|
||
For each sub-trace defined in a .pil file, one can optionally add so-called "skippable" condition which allows to improve performance on prover side whenever the "skippable" condition is satisfied. It basically skips some accumulation computation in sumcheck protocol to all sub-relations pertaining to the sub-trace. More on how to define a valid "skippable" condition in the next section. We emphasize that the "skippable" mechanism does not change the behavior of the verifier and therefore does not present any security risk about soundness, i.e., it does not help a malicious prover to prove a wrong statement even if the "skippable" condition is too relaxed. What can however happen is that the verification fails when it should not (perfect completeness is not guarenteed anymore). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
well, we would still have perfect completeness if we don't make mistakes in skipping things
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@lucasxia01 Yep, I was describing the risk of an incorrect skippable condition. Otherwise, sure it is perfectly complete.
Do you think the last sentence is not clear enough that it is about a "too relaxed" condition?
## Strong Skippable Condition | ||
|
||
As accumulated column values in sumcheck will be in general unknown, a way to ensure that a skippable condition guarantees that all sub-relations will be satisfied is to choose a condition which algebraically implies that all sub-relations will be zero. Typically, if | ||
each sub-relation is of the form $sel * (\ldots) = 0$ then setting $sel == 0$ as "skippable" condition does the job. Similarly, for a list of boolean selectors $sel_1,\ldots sel_n$ and sub-relations of the form $sel_i * (\ldots) = 0$, a "skippable" condition can be picked as |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is this supposed to be a product of sel_i * (\ldots)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@lucasxia01 Since they are boolean, the sum is zero only if all selectors are zero (unless the number of selectors is as large as the field order.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I'm not questioning the condition, but I see what you meant now. Just n subrelations, each of the form
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.77.0</summary> ## [0.77.0](aztec-package-v0.76.4...aztec-package-v0.77.0) (2025-02-14) ### Miscellaneous * **aztec-package:** Synchronize aztec-packages versions </details> <details><summary>barretenberg.js: 0.77.0</summary> ## [0.77.0](barretenberg.js-v0.76.4...barretenberg.js-v0.77.0) (2025-02-14) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-packages: 0.77.0</summary> ## [0.77.0](aztec-packages-v0.76.4...aztec-packages-v0.77.0) (2025-02-14) ### ⚠ BREAKING CHANGES * Only decrement the counter of an array if its address has not changed (noir-lang/noir#7297) ### Features * PIL relations modifications for bc decomposition ([#11935](#11935)) ([6c93058](6c93058)) * Poseidon2 in vm2 ([#11597](#11597)) ([2c199d8](2c199d8)) * Refactor `append_tx_effects_for_blob` ([#11805](#11805)) ([e5a055b](e5a055b)) ### Bug Fixes * **docs:** Update token bridge diagram ([#11982](#11982)) ([e5da9ed](e5da9ed)) * Let LSP read `noirfmt.toml` for formatting files (noir-lang/noir#7355) ([4d35d2f](4d35d2f)) * Only decrement the counter of an array if its address has not changed (noir-lang/noir#7297) ([4d35d2f](4d35d2f)) * Test more prover agents devnet ([#11990](#11990)) ([f12be5f](f12be5f)) ### Miscellaneous * Avoid u128s in brillig memory (noir-lang/noir#7363) ([4d35d2f](4d35d2f)) * **ci:** Downgrade 4epochs test to transfer test ([#11983](#11983)) ([2340aab](2340aab)) * Explanations about skippable ([#11984](#11984)) ([19589bc](19589bc)) * Op wires index from 0 ([#11986](#11986)) ([be1b563](be1b563)) * Prep for ci3 ([8edee9e](8edee9e)) * Remove browser test ([3e570be](3e570be)) * Replace relative paths to noir-protocol-circuits ([b8ba716](b8ba716)) * Some polishing on the skippable document ([#11997](#11997)) ([50e0a38](50e0a38)) * Update docs about integer overflows (noir-lang/noir#7370) ([4d35d2f](4d35d2f)) </details> <details><summary>barretenberg: 0.77.0</summary> ## [0.77.0](barretenberg-v0.76.4...barretenberg-v0.77.0) (2025-02-14) ### Features * PIL relations modifications for bc decomposition ([#11935](#11935)) ([6c93058](6c93058)) * Poseidon2 in vm2 ([#11597](#11597)) ([2c199d8](2c199d8)) ### Miscellaneous * Explanations about skippable ([#11984](#11984)) ([19589bc](19589bc)) * Op wires index from 0 ([#11986](#11986)) ([be1b563](be1b563)) * Some polishing on the skippable document ([#11997](#11997)) ([50e0a38](50e0a38)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 I have created a release *beep* *boop* --- <details><summary>aztec-package: 0.77.0</summary> ## [0.77.0](AztecProtocol/aztec-packages@aztec-package-v0.76.4...aztec-package-v0.77.0) (2025-02-14) ### Miscellaneous * **aztec-package:** Synchronize aztec-packages versions </details> <details><summary>barretenberg.js: 0.77.0</summary> ## [0.77.0](AztecProtocol/aztec-packages@barretenberg.js-v0.76.4...barretenberg.js-v0.77.0) (2025-02-14) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions </details> <details><summary>aztec-packages: 0.77.0</summary> ## [0.77.0](AztecProtocol/aztec-packages@aztec-packages-v0.76.4...aztec-packages-v0.77.0) (2025-02-14) ### ⚠ BREAKING CHANGES * Only decrement the counter of an array if its address has not changed (noir-lang/noir#7297) ### Features * PIL relations modifications for bc decomposition ([#11935](AztecProtocol/aztec-packages#11935)) ([6c93058](AztecProtocol/aztec-packages@6c93058)) * Poseidon2 in vm2 ([#11597](AztecProtocol/aztec-packages#11597)) ([2c199d8](AztecProtocol/aztec-packages@2c199d8)) * Refactor `append_tx_effects_for_blob` ([#11805](AztecProtocol/aztec-packages#11805)) ([e5a055b](AztecProtocol/aztec-packages@e5a055b)) ### Bug Fixes * **docs:** Update token bridge diagram ([#11982](AztecProtocol/aztec-packages#11982)) ([e5da9ed](AztecProtocol/aztec-packages@e5da9ed)) * Let LSP read `noirfmt.toml` for formatting files (noir-lang/noir#7355) ([4d35d2f](AztecProtocol/aztec-packages@4d35d2f)) * Only decrement the counter of an array if its address has not changed (noir-lang/noir#7297) ([4d35d2f](AztecProtocol/aztec-packages@4d35d2f)) * Test more prover agents devnet ([#11990](AztecProtocol/aztec-packages#11990)) ([f12be5f](AztecProtocol/aztec-packages@f12be5f)) ### Miscellaneous * Avoid u128s in brillig memory (noir-lang/noir#7363) ([4d35d2f](AztecProtocol/aztec-packages@4d35d2f)) * **ci:** Downgrade 4epochs test to transfer test ([#11983](AztecProtocol/aztec-packages#11983)) ([2340aab](AztecProtocol/aztec-packages@2340aab)) * Explanations about skippable ([#11984](AztecProtocol/aztec-packages#11984)) ([19589bc](AztecProtocol/aztec-packages@19589bc)) * Op wires index from 0 ([#11986](AztecProtocol/aztec-packages#11986)) ([be1b563](AztecProtocol/aztec-packages@be1b563)) * Prep for ci3 ([8edee9e](AztecProtocol/aztec-packages@8edee9e)) * Remove browser test ([3e570be](AztecProtocol/aztec-packages@3e570be)) * Replace relative paths to noir-protocol-circuits ([b8ba716](AztecProtocol/aztec-packages@b8ba716)) * Some polishing on the skippable document ([#11997](AztecProtocol/aztec-packages#11997)) ([50e0a38](AztecProtocol/aztec-packages@50e0a38)) * Update docs about integer overflows (noir-lang/noir#7370) ([4d35d2f](AztecProtocol/aztec-packages@4d35d2f)) </details> <details><summary>barretenberg: 0.77.0</summary> ## [0.77.0](AztecProtocol/aztec-packages@barretenberg-v0.76.4...barretenberg-v0.77.0) (2025-02-14) ### Features * PIL relations modifications for bc decomposition ([#11935](AztecProtocol/aztec-packages#11935)) ([6c93058](AztecProtocol/aztec-packages@6c93058)) * Poseidon2 in vm2 ([#11597](AztecProtocol/aztec-packages#11597)) ([2c199d8](AztecProtocol/aztec-packages@2c199d8)) ### Miscellaneous * Explanations about skippable ([#11984](AztecProtocol/aztec-packages#11984)) ([19589bc](AztecProtocol/aztec-packages@19589bc)) * Op wires index from 0 ([#11986](AztecProtocol/aztec-packages#11986)) ([be1b563](AztecProtocol/aztec-packages@be1b563)) * Some polishing on the skippable document ([#11997](AztecProtocol/aztec-packages#11997)) ([50e0a38](AztecProtocol/aztec-packages@50e0a38)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
No description provided.