Skip to content

spec: Recursion - #943

Draft
erik-3milabs wants to merge 9 commits into
spec/mainfrom
spec/recursion
Draft

spec: Recursion#943
erik-3milabs wants to merge 9 commits into
spec/mainfrom
spec/recursion

Conversation

@erik-3milabs

Copy link
Copy Markdown
Collaborator

No description provided.

@erik-3milabs erik-3milabs self-assigned this Aug 21, 2026
@erik-3milabs erik-3milabs added the spec Updates and improvements to the spec document label Aug 21, 2026
@github-actions

Copy link
Copy Markdown

Kimi Code Review

⚠️ Review failed: Kimi API request failed with status 401


Automated review by Kimi (Moonshot AI)

@github-actions

Copy link
Copy Markdown

Codex Code Review

  • Medium — Recursive verification omits the required commitment (spec/recursion.typ:105). verify accepts a commitmentSpace, but the recursive branch treats commitment_1 as a function; lines 116–118 similarly pass verifier functions directly. Use an explicitly defined specialization operation producing comm(verify'(commitment_0, commitment_1, ·)). As written, the equations are ill-typed and do not establish the claimed recursive chain.

Comment thread spec/recursion.typ Outdated
Comment thread spec/recursion.typ Outdated
Comment thread spec/recursion.typ Outdated
Comment thread spec/recursion.typ Outdated
Comment thread spec/recursion.typ Outdated
Comment thread spec/recursion.typ Outdated
Comment thread spec/recursion.typ Outdated
Comment thread spec/recursion.typ Outdated
Comment thread spec/recursion.typ Outdated
Comment thread spec/recursion.typ Outdated
*Record $record$.*
The record contains all challenges the prover derived using Fiat-Shamir.

*Tasks for $verify'_b\(commitment_0, commitment_1, b, proof, record)$:*

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is missing a few of the ad-hoc checks, which are (I think) mostly related to memory and paging.
It would probably be a good idea to have an overview of those somewhere central as well.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not content with this section, at all. Indeed, stuff is missing.
I propose we have a full verifier description in verifier.typ (including all the ad-hoc checks you mention) and here only mention how to transform that monolithic verifier into the split/recursive verifier in this section.

wdyt of that split?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works for me

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I rewrote this section. Let me know what you think!

erik-3milabs and others added 4 commits August 26, 2026 10:14
Co-authored-by: Robin Jadoul <robin.jadoul@gmail.com>
Co-authored-by: Erik <159244975+erik-3milabs@users.noreply.github.com>
Comment thread spec/recursion.typ
Comment on lines +215 to +225
When recursing on this process, the prover provides the verifier with this commitment.
We thus have to demonstrate the commitments the prover provides are as expected.
This is achieved by having the verification algorithm `COMMIT` (see @commit)
to the public input it is provided.
This act produces an imbalance in the LogUp-component of the proof-of-verification,
which must be balanced during verification in the _next_ recursion layer.
In later recursions, the verifier must consistently `COMMIT` to its public input
and use the _same_ public input to balance out the LogUp-component of the proof
it is provided.
This solution effectively kicks the can down the road; the final verifier has to
provide the initial input to the program as input to verify the recursive proof.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. We may not have access to COMMIT in a future flock-fieldvm hybrid
  2. Isn't this handled by $\mathbb{c}_1 = \bar{\mathbb{x}}$ already? Since the instance $\mathbb{x}$ includes the public input?

Comment thread spec/recursion.typ
$

*Final verification.*
$verify'(commit(instance), (commit(verify'_b), commit(verify'_f)), 1, proof^((n))) =? one$

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
$verify'(commit(instance), (commit(verify'_b), commit(verify'_f)), 1, proof^((n))) =? one$
$verify'(commit(instance), (commit(verify'_b), commit(verify'_f)), 1, proof^((n))) =^? one$

Comment thread spec/recursion.typ
$

*Final verification.*
$verify'(commit(instance), (commit(verify'_b), commit(verify'_f)), 1, proof^((n))) =? one$

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We may be able to get rid of the b argument by having the statement being proven the OR of both options:
I know a proof that is either accepted for the original statement OR for the recursion function.
I suppose this is essentially absorbing this bit into the proof or witness, but it cleans up the final verification and allows proofs without compressing to be used without any further change.

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

Labels

spec Updates and improvements to the spec document

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants