Repository navigation
Extend split-recursion to multiple proof systems - #1018
RobinJadoul wants to merge 5 commits into
Conversation
Kimi Code ReviewAutomated review by Kimi (Moonshot AI) |
Codex Code Review
The diff changes only the specification; no executable-code issues were found. |
erik-3milabs
left a comment
There was a problem hiding this comment.
general remarks:
- replace
pibyproof - replace
rbyrecord - you're opted to write
$v(x; w)$ rather than$v(x,w)$ . This is, however, contrary to all other notation in this document. Not saying it is wrong, but it should be clarified somewhere
| we will write $comm(x)$ and $comm2(x)$ as the (deterministic) commitments to $x$ | ||
| in the proof system of $verify_0$ and $verify_1$ respectively. | ||
|
|
||
| If we write $verify'_(b)([c_x, c_w]; w)$ to be an adaptation of $verify_(b)(c_x; w)$ that additionally gives has a public commitment to the private witness,#footnote[ |
There was a problem hiding this comment.
-
$v_b$ is not yet defined at this point. Or do you mean to use it as a variable that can be either 0 or 1? Eitherway, we should probably define this. Also, I don't know if$b$ is the right choice here. - Also,
$v'$ was already used in 36.1.2, so we're somewhat overloading things here.
There was a problem hiding this comment.
b is indeed just a generic bit here
| we will write $comm(x)$ and $comm2(x)$ as the (deterministic) commitments to $x$ | ||
| in the proof system of $verify_0$ and $verify_1$ respectively. | ||
|
|
||
| If we write $verify'_(b)([c_x, c_w]; w)$ to be an adaptation of $verify_(b)(c_x; w)$ that additionally gives has a public commitment to the private witness,#footnote[ |
There was a problem hiding this comment.
| If we write $verify'_(b)([c_x, c_w]; w)$ to be an adaptation of $verify_(b)(c_x; w)$ that additionally gives has a public commitment to the private witness,#footnote[ | |
| If we write $verify'_(b)([c_x, c_w]; w)$ to be an adaptation of $verify_(b)(c_x; w)$ that is additionally given a public commitment to the private witness,#footnote[ |
?
|
|
||
| The first two statements would follow naturally from proving $verify_(b)$ or the derived $verify'_(b)$. | ||
| To integrate the last statement, we introduce a "checksum" of the witness, which will be checked by both halves of the split: | ||
| $ verify^*_(b)([x, s]; w) = verify'_(b)(x; w) dot (serif("cksum")(w) =^? s). $ |
There was a problem hiding this comment.
|
|
||
| - $serif("cksum")(x) = serif("Hash")(x)$: compute a hash in both halves, at the cost of needing to evaluate a hash in a proof system that is likely not a good fit for that hash. | ||
| - $serif("cksum")(x) = comm2(x)$: recompute the commitment $comm2(x)$ as part of $verify^*_0$, and let $verify^*_1$ simply check that the checksum equals the public commitment. | ||
| In practice, this would come at the cost of evaluating a Reed-Solomon blowup over the field of $verify_0$ and computing a merkle tree, both inside $verify^*_0$. |
There was a problem hiding this comment.
In practice, this would come at the cost of evaluating a Reed-Solomon blowup over the field of [...]
This is an implementation detail not described anywhere else in the document.
There was a problem hiding this comment.
Fair, it is mostly meant as a remark to argue why it's not a good/performant approach
| Finally, we consider the instantiation $serif("chsum")(x) = chevron.l x, z chevron.r$ for a random zero-evader $z$. | ||
| This could be implemented by having an additional public input provided to $verify^*_(b)$, or by having $verify^*_(b)$ itself | ||
| derive it from the public inputs and context as a Fiat-Shamir challenge. | ||
| In either case, $z$ should not be known to the (recursion) prover before being bound to $[x, r]$ via its public commitment. |
There was a problem hiding this comment.
shouldn't the prover also commit to the proof it will be verifying first?
| the verification cost of computing $z$ and the soundness error of the zero-evader. | ||
| Where needed, multiple independent $z$ can be used to amplify soundnes. | ||
| In settings where both $verify^*_(b)$ are in the same proof system, with the same commitment scheme, but different representations of the committed data | ||
| (e.g. representing $pi$ as a sequence of committed bytes and as a sequence of extension field elemens), |
There was a problem hiding this comment.
| (e.g. representing $pi$ as a sequence of committed bytes and as a sequence of extension field elemens), | |
| (e.g. representing $pi$ as a sequence of committed bytes and as a sequence of extension field elements), |
| A larger $[pi, r]$ comes at a cost --- whether a cost of soundness or a cost of deriving more independent random $alpha_i$ --- | ||
| and as such should be kept as short as possible. | ||
| Since values that only one $verify^*_(b)$ reads or writes cannot lead to a differing result, the checksummed data need only | ||
| be the subsequence of elements of $[pi, r]$ that is read or written by both $verify^*_0$ and $verify^*_1$. |
There was a problem hiding this comment.
| be the subsequence of elements of $[pi, r]$ that is read or written by both $verify^*_0$ and $verify^*_1$. | |
| be the subsequence of elements of $[pi, r]$ that is accessed by both $verify^*_0$ and $verify^*_1$. |
or "interacted"?
Reason I'm proposing this, is to avoid the ambiguous interpretation that one need only include values that are either read by both or written by both (where in practice we see values being "written" by one and read by the other)
| To enable recursion from a split verifier, we start by considering that each part of the split may | ||
| be prove in a different proof system, and with a different commitment scheme. |
There was a problem hiding this comment.
| To enable recursion from a split verifier, we start by considering that each part of the split may | |
| be prove in a different proof system, and with a different commitment scheme. | |
| To enable recursion from a split verifier, we start by considering that either part may | |
| be proven in a different proof system, each using a different commitment scheme. |
| For a split verifier $(verify_0, verify_1, d_verify)$ to be recursively proven, | ||
| we will write $comm(x)$ and $comm2(x)$ as the (deterministic) commitments to $x$ |
There was a problem hiding this comment.
| For a split verifier $(verify_0, verify_1, d_verify)$ to be recursively proven, | |
| we will write $comm(x)$ and $comm2(x)$ as the (deterministic) commitments to $x$ | |
| We write $comm(x)$ and $comm2(x)$ as the (deterministic) commitments to $x$ |
| our goal then becomes to prove the following statements in parallel: | ||
|
|
||
| 1. $verify'_0([comm(bb(x)), c_0]; [pi, r]) = 1$ | ||
| 2. $verify'_1([comm2(bb(x)), c_1]; [pi, r]) = 1$ | ||
| 3. $exists pi, r: comm([pi, r]) = c_0 and comm2([pi, r]) = c_1$ |
There was a problem hiding this comment.
This doesn't flow right for me just yet. At this point we have just introduced
Perhaps we should start with
$v_0(x, [\pi, r]) = 1$ $v_1(x, [\pi', r']) = 1$ - show that
$(\pi, r) = (\pi', r')$
then introduce
and then transition to
$v' _0([x, s0], [\pi, r]) = 1$ $v'_1([x, s1], [\pi', r']) = 1$ $\exists \pi, r: comm_0(x, pi, r) = s0 \wedge comm_1(x, pi, r) = s1$
wdyt?
There was a problem hiding this comment.
but haven't bound it to anything
I felt like that was implied by the (informal) definition of the v'_b, and that elaborating that more formally would needlessly take up extra space.
| #aside[Minimizing the length of $z$][ | ||
| A larger $[pi, r]$ comes at a cost --- whether a cost of soundness or a cost of deriving more independent random $alpha_i$ --- | ||
| and as such should be kept as short as possible. | ||
| Since values that only one $verify^*_(b)$ reads or writes cannot lead to a differing result, the checksummed data need only |
There was a problem hiding this comment.
Clarify what you mean by "differing result". What result?
Co-authored-by: Erik <159244975+erik-3milabs@users.noreply.github.com>
No description provided.