TL;DR
- A proof receipt answers one precise question: did this input, registered MoE block, routing policy, selected computation, and claimed output agree?
- The prover first commits to execution columns. Only then does the transcript derive challenges and query positions, so the committed story cannot adapt to them.
- Routing checks, registry authentication, nonlinear arithmetic, random compression, and bounded output accumulation each close a different substitution.
- Verification reads a small proof rather than the full execution, but acceptance remains narrow: it does not certify model truth, a complete Transformer, privacy, or unconditional end-to-end security.
The previous article followed one token through a Mixture-of-Experts layer.
The token was bank. The router scored eight experts. E2 had the highest score. E4 and E6 tied for second place, so a public smaller-index rule selected E4. The layer ran E2, E4, and one always-on shared feed-forward network.
That explains the computation.
It does not yet explain the proof.
What gets written down? What gets hidden behind a commitment? When does randomness enter? What does the verifier inspect? And what, exactly, has been established when the verifier says accept?
This article opens that receipt.
The goal is not to teach every detail of Circle STARKs or FRI. The goal is to build a reliable mental model of the proof boundary: claim, execution record, commitments, challenges, openings, checks, decision.
The whole article in one sentence
Begin with the verifier’s question
Imagine a restaurant receipt.
It names a restaurant, a set of items, their prices, and a total. The receipt is useful because those fields belong together. A total of $42 without the restaurant or items tells us almost nothing.
A proof receipt has the same requirement.
It must say which computation is being certified. A short cryptographic proof with no bound model, input, policy, or output is like a total with no bill.
For our recurring example, the question is:
Did this token state, evaluated under this registered MoE block and numeric policy, produce all router scores, select E2 and E4 under the public top-2 rule, run the registered selected and shared experts, and produce output
y?
Notice how much more precise that is than saying “the AI ran correctly.”
The proof does not decide whether y is useful. It does not decide whether the model’s answer is true. It does not decide whether another server ran a different model somewhere else.
It decides whether one named computation is internally consistent.
That narrowness is not a weakness. It is what makes the claim testable.
Name the claim before checking the proof
The public statement is the label on the receipt.
It fixes the objects that give the internal arithmetic its meaning:
- the input vector;
- the registered model or expert registry;
- the numeric policy, including scales and ranges;
- the routing policy;
- and the claimed output.
Why put these fields outside the hidden execution record?
Because the verifier needs to know which question it is answering. If the prover can choose the model after seeing the proof, or attach a different output after verification, the cryptography may still be valid while the application claim is false.
This distinction appears often in verifiable systems:
A valid proof is not automatically a valid application statement.
Suppose the server correctly proves arithmetic using a modified E4 matrix. If the public statement never authenticates what “E4” means, the proof only shows that some matrix was used correctly.
Suppose the server proves a lookup against one SiLU table but the application assumes another scale. Again, the equations may hold while the intended computation does not.
The public statement closes those naming gaps before the proof begins.
Build the detailed execution record
The verifier will not recompute the whole MoE block. The prover does.
While doing so, the prover builds a detailed record called the witness. You can think of it as the working paper behind the final receipt.
For this block, the record includes values such as:
- all eight router scores;
- the threshold classes used to derive the top-2 route;
- the selected expert identities E2 and E4;
- authentication data for their registered matrices;
- gate and up projections;
- SiLU lookup inputs and outputs;
- hidden products and down projections;
- route weights;
- shared-expert values;
- and the bounded output accumulation.
Those values are organized into columns. Different columns have different jobs, but they belong to one story.
The arrows in this picture matter more than the boxes.
Each arrow is a place where a dishonest prover might try to switch stories:
- use the right scores but a different route;
- use the right route labels but different matrices;
- use the right matrices but fake the nonlinear output;
- use correct expert outputs but a different weighted sum;
- or prove a valid sum and attach another
yafterward.
SparseProve’s relation places checks at those handoffs. The witness supplies the values. The constraints say which combinations are allowed.
An honest prover generates a witness that satisfies them. A malicious prover is allowed to generate any values it wants. Soundness depends on the verifier rejecting values that do not represent the named computation.
That adversarial view is essential. A test showing that an honest proof passes demonstrates completeness. It does not, by itself, demonstrate that false witnesses fail.
Lock the record behind short roots
The witness can be enormous. Sending every column to the verifier would make the proof pointless.
Instead, the prover commits to the columns.
A commitment turns a large table into a short root. The root does not tell the verifier every cell, but it fixes the table: after committing, the prover should not be able to change one cell while keeping the same root.
This gives us two useful properties:
- the verifier can refer to a large execution record using short commitment roots;
- the prover is locked into that record before learning later challenges.
The commitment is not the proof by itself.
A root can authenticate data, but it cannot explain what the data means. It does not prove that a score is the result of a router matrix multiplication or that E4 wins a tie.
Those meanings come from the algebraic relations that the openings must satisfy.
This is why “we hashed the model” is not enough. Hashes bind bytes. Constraints bind relationships.
Commit first, then derive challenges
The verifier needs randomness.
Random challenges let it compress many checks and choose positions that the prover could not prepare for in advance. In a non-interactive proof, those challenges are derived from a transcript: a deterministic hash of the public statement and proof messages seen so far.
The order is load-bearing.
The transcript first absorbs the statement and commitment roots. Only then does it derive the challenge used to combine claims or choose query positions.
Why not draw the challenge first?
Because a prover who knows the challenge before committing may arrange errors that cancel under that exact challenge.
Imagine two wrong slot outputs, a + error and b - error / r. If the prover knows the combining coefficient r in advance, their weighted sum can look correct even though both slots are wrong.
Commitment order removes that freedom. The prover must lock the slots before learning r.
SparseProve uses this pattern to compress compatible selected-output claims.
Random linear combinations are not magic compression. They are probabilistic checks with an explicit failure term. The paper must count that term together with lookup, FRI, Fiat-Shamir, and other soundness errors.
This is one reason the current research does not publish a concrete end-to-end security-bit claim. The implemented prover and verifier run, but the complete composition remains conditional on explicitly stated extraction and transcript assumptions.
The honest explanation is better than a decorative security number.
Open a few authenticated views
After the commitments and challenges are fixed, the verifier asks for openings.
An opening says, in effect:
At this transcript-derived position, the committed column has this value, and here is the authentication information connecting that value to the root you already saw.
The verifier checks a small number of positions rather than downloading every trace cell.
It also checks that the committed data behaves like evaluations of low-degree polynomials over the expected domains. This is where the polynomial commitment and FRI machinery enter.
The beginner’s mental model should keep three ideas separate:
- authentication: the opened value belongs to the committed data;
- algebraic validity: the opened and combined values satisfy the MoE relations;
- low-degree consistency: the committed tables have the polynomial structure the proof system expects.
All three matter.
Authentication without algebra lets a prover faithfully commit nonsense.
Algebra without binding lets it answer different checks with different stories.
Local checks without low-degree consistency do not justify conclusions about the full committed functions.
The proof backend connects these pieces into one verifier decision.
Close each substitution explicitly
It is tempting to look for one grand check called “AI correctness.” SparseProve has no such check.
Instead, several smaller checks close different substitutions.
1. Canonical routing
All router scores are range-bound and classified around a threshold. Counts and prefix rules derive exactly one selected set, including the E4/E6 tie.
This prevents the prover from choosing whichever experts are easiest to prove.
2. Registry authentication
Selected expert labels connect to matrices authenticated under the registered model root.
This prevents the prover from calling a cheaper or altered matrix “E4.”
3. Selected arithmetic
The input, registered weights, SiLU table, gate and up paths, hidden product, and down projection satisfy the bounded integer relation.
This prevents the prover from claiming an expert output it did not compute under the public policy.
4. Commit-then-challenge compression
Selected slot outputs are committed before a fresh transcript coefficient combines them.
This makes it unlikely that independent errors disappear inside the compressed check.
5. Output accumulation
Verifier-derived route weights, selected expert outputs, and the shared path combine into the claimed output under explicit bounds.
This prevents a correct internal computation from being attached to a different final result.
The chain is long because the claim is semantic. We are not merely checking that field equations have some satisfying assignment. We are checking that accepted field values represent one intended bounded-integer MoE computation.
That last step, from AIR constraints to intended integer meaning, is a real proof obligation. Range checks, encoders, lookup tables, and no-wrap bounds are part of the theorem, not implementation details.
Read acceptance at the actual boundary
At the end, the verifier returns one bit: accept or reject.
That bit is meaningful only when we preserve the statement around it.
For the current SparseProve receipt, acceptance means that one public input, one routing and numeric policy, one registered production-shaped MoE feed-forward block, and one output are connected by the checked relation.
It does not mean:
- the model’s answer is factually true;
- a complete Transformer was proved;
- attention, embeddings, or token sampling were proved;
- inactive experts were not executed elsewhere;
- the proof hides the witness;
- or every security term has been instantiated into one end-to-end bit count.
Those exclusions do not erase the result.
They tell us what the receipt can safely be used for.
The scientific contribution is the connected conditional path:
all scores -> canonical route -> registered selected weights -> selected nonlinear work -> output.
The system contribution is that a prover and verifier execute this relation inside one Circle-STARK-based receipt.
The open security work concerns the complete extraction and Fiat-Shamir composition, not whether the code can emit and verify a receipt.
That distinction will matter in the next article, because measurements can be just as easy to mislabel as proofs.
Next: test the thesis