@@ -24,9 +24,12 @@ one honest hole CommitLLM leaves open: non-reproducible attention.
2424
2525### What it does not claim
2626
27- It proves an exact arithmetic relation. It does not claim floating-point or PyTorch
28- equivalence, the physical truth of the predictions, or zero knowledge. Public
29- claims must be a subset of the proven statement.
27+ It proves an exact integer arithmetic relation. For predictor bundles, the export
28+ also carries a float reference output and a measured tolerance, and the demo CLI
29+ checks the verified integer output against that bound. The verifier still does
30+ not prove the full PyTorch program, the physical truth of the predictions, zero
31+ knowledge, or that the checkpoint bytes were exported honestly. Public claims
32+ must be a subset of the proven statement.
3033
3134## Quickstart
3235
@@ -64,11 +67,13 @@ ProvableWorldModel commit-and-audit over the le-wm world model
6467 ├ witness 689,760 claimed op outputs (5.26 MiB) trace_root 56bc38fc...
6568 └ bind absorbed model + inputs + trace, then squeezed the Freivalds r (non-adaptive)
6669
67- [stage 4/5] VERIFY no_std, float-free, never re-runs the model
70+ [stage 4/5] VERIFY no_std, float-free, commitment-bound, never re-runs the model
71+ ├ binding recomputed model, quantization, planner, input + output commitments
6872 ├ challenge derived the Freivalds r for 30 linear projections
6973 ├ checks Freivalds v·x == r·z (soundness ≤ 1/p, p = 2⁶¹−1; union over the checks ~2⁻⁴⁴)
7074 │ exact recompute of attention, softmax, GELU, LayerNorm, residuals
71- └ verdict ACCEPT in 28.6 ms (1.7x faster than proving; audits arithmetic only)
75+ ├ faith max |int - float| <= bundle tolerance (offline reference from the export bundle)
76+ └ verdict ACCEPT in 28.6 ms (1.7x faster than proving; commitments + arithmetic audited)
7277
7378[stage 5/5] TAMPER forge one matmul output
7479 └ forged matmul op 2 -> REJECT FreivaldsCheckFailed { op_id: 2 } (caught)
@@ -131,6 +136,7 @@ ProvableWorldModel export the real le-wm checkpoint into the prover
131136[QUANTIZE] 34 matrices -> 11,705,856 int8 params (float32 44.7 MiB -> int8 11.2 MiB, 4.0x smaller)
132137[COMMIT] model_commitment / quantization_commitment / graph_commitment (Blake2s-256)
133138[ENCODE] real PushT expert episode (lerobot/pusht): 3 frames @ frameskip 5 -> ViT encoder; real 2D action
139+ [CALIBRATE] real SiLU/GELU/inverse-sqrt/softmax-exp tables + measured predictor tolerance
134140```
135141
136142The prover then runs the exact-integer inference on those real weights and audits it:
@@ -148,8 +154,9 @@ The prover then runs the exact-integer inference on those real weights and audit
148154 ├ latency forward pass in 49.0 ms (49.7 Kop/s, 661 MMAC/s)
149155 └ z_next [11, 55, 32, -73, -57, 13] (predicted next-latent head, from the real forward pass)
150156
151- [stage 4/5] VERIFY no_std, float-free, never re-runs the model
152- └ verdict ACCEPT in 28.6 ms (1.7x faster than proving; audits arithmetic only)
157+ [stage 4/5] VERIFY no_std, float-free, commitment-bound, never re-runs the model
158+ ├ faith max |int - float| <= bundle tolerance (offline reference from the export bundle)
159+ └ verdict ACCEPT in 28.6 ms (1.7x faster than proving; commitments + arithmetic audited)
153160
154161[stage 5/5] TAMPER forge one matmul output
155162 └ forged matmul op 2 -> REJECT FreivaldsCheckFailed { op_id: 2 } (caught)
@@ -161,7 +168,14 @@ A real expert episode (consistent observation and action) goes through the
161168checkpoint's own encoders to produce the latent history and action embedding the
162169predictor consumes. The encode is the trusted offline step (the image encoder is
163170P4-deferred for proving), and the predictor step is what the no_std verifier
164- audits. The action is the real 2D expert control plus the agent state; the full
171+ audits. The bundle also carries the export-computed ` weights_root ` over the 30
172+ proven block tensors; the prover binds that carried value into the model
173+ commitment, so the verifier rejects unless the proven weights reproduce the
174+ export's commitment bit-for-bit (bundle ⇄ export bound; checkpoint ⇄ export
175+ trusted). The same bundle carries the calibrated SiLU, GELU, inverse-sqrt, and
176+ softmax-exp tables plus the float predictor output on the same encoded input; the
177+ CLI checks the verified integer ` z_next ` against the bundle's measured tolerance.
178+ The action is the real 2D expert control plus the agent state; the full
165179le-wm 10-dim action layout lives in the 13 GB lewm-pusht dataset.
166180
167181The predictor is built as the real le-wm architecture over the named-buffer block
@@ -208,7 +222,7 @@ and exactly recomputes the attention, softmax, GELU, LayerNorm, and residuals.
208222+============================+===============================================+
209223| v VERIFIER (no_std / float-free) |
210224| +------------------------------------------------------------+ |
211- | | VERIFY (NEVER re-runs the model; audits arithmetic only) | |
225+ | | VERIFY (NEVER re-runs the model; audits bindings + trace) | |
212226| | replay transcript; Freivalds-check every fixed matmul: | |
213227| | v.x == r.z because rT(W x) = (rT W) x | |
214228| | soundness err <= 1/p, p = 2^61-1; | |
@@ -227,7 +241,8 @@ and exactly recomputes the attention, softmax, GELU, LayerNorm, and residuals.
227241+============================================================================+
228242
229243exact integer fixed point makes attention reproducible: the one hole
230- CommitLLM leaves open is closed here. The verifier audits arithmetic only.
244+ CommitLLM leaves open is closed here. The verifier audits the committed
245+ statement and the exact arithmetic trace.
231246```
232247
233248The prover runs the model normally and commits to its execution trace. The
@@ -278,9 +293,10 @@ and reject tests. The exporter ingests the real `quentinll/lewm-pusht` checkpoin
278293and quantizes the full 192-dim V0 subgraph, and the Rust prover proves and
279294verifies the full 6-block, 16-head, 192-dim predictor with the real quantized
280295weights (` pwm prove-predictor ` ), plus the ` pred_proj ` head on its own
281- (` pwm prove-lewm ` ). The proof attests the exact integer (quantized) relation;
282- per-tensor activation-scale calibration for float-faithful outputs is a further
283- refinement. For P2, all ` S ` candidate costs must be proven, not only the winner:
296+ (` pwm prove-lewm ` ). The proof attests the exact integer (quantized) relation, and
297+ predictor bundles now include calibrated activation tables plus an offline
298+ float-reference tolerance that the CLI enforces after verification. For P2, all
299+ ` S ` candidate costs must be proven, not only the winner:
284300proving only the selected candidate would be unsound.
285301
286302Binding status, precisely: both the P0 feed-forward statement (` AuditArtifact ` ) and
@@ -295,6 +311,19 @@ claimed accumulator) before any challenge is squeezed, so the challenge is
295311statement-bound and non-adaptive. A bare ` verify_block ` still exists for standalone
296312arithmetic audits; the committed relation is the one to use for a real statement.
297313
314+ The trust boundary, exactly: ** bundle ⇄ export is cryptographically bound;
315+ checkpoint ⇄ export is trusted preprocessing.** The export computes a
316+ predictor-scoped ` weights_root ` over exactly the proven block tensors (in the
317+ prover's canonical ` tensor_id ` order) and carries it in the bundle; the prover
318+ binds that carried value, not a recomputed one, into the model commitment, so
319+ ` verify_predictor ` accepts only if the proven weights reproduce the export's
320+ commitment bit-for-bit (` CommitmentMismatch(Model) ` otherwise). The artifact alone
321+ therefore certifies * which* weight set was proven, with no out-of-band weights.
322+ What remains trusted is the export step itself: that the quantized tensors
323+ faithfully derive from the ` quentinll/lewm-pusht ` checkpoint bytes (download,
324+ float-to-int8 quantization, and input encoding are offline preprocessing, outside
325+ the proven relation).
326+
298327## Architecture
299328
300329Five small crates, one trust anchor. The verifier depends on neither the exporter
0 commit comments