o1-labs / proof-systems

The proof systems used by Mina
https://o1-labs.github.io/proof-systems/
Apache License 2.0
410 stars 91 forks source link

Add Selectors #2543

Open marcbeunardeau88 opened 3 weeks ago

marcbeunardeau88 commented 3 weeks ago

The current desgin of the o1vm is one circuit per MIPS instructions. We want to change that and get one big circuit which does all the instruction depending on which selector is activated.

We need to add ‘selectors’ for (see kimchi and/or the original zkVM prototype, the plonk paper for the concept), and multiplex the instructions using those. The original zkVM is probably the best guide for this, this is how it originally worked.

Fizzixnerd commented 3 weeks ago

CC @dannywillems @marcbeunardeau88

I was wondering: do we want one giant selector q_MIPS which serves as essentially the opcode for MIPS, or several smaller selectors q_leftshift and friends that are in the range {0, 1}.

Or, is the selector something more clever than what I'm initially thinking of? For example, it might be possible to construct Z such that

Z(g^i, x) = MIPS_instruction(i)(x)

By using the same trick in Section 5 of PlonK.