1. Name the objects
Ask what kind of thing each symbol is: integer, set element, function, witness, randomness, polynomial, or group element.
Distilled from the CMU proof-writing book
A slide-style study site for blockchain engineers: fewer pages, tighter concepts, more diagrams, and a direct bridge from proof basics to finite fields, constraints, and zero-knowledge reasoning.
ZK beginners usually fail on quantifiers, definitions, and proof structure long before they fail on pairings or polynomials.
How To Read This
Ask what kind of thing each symbol is: integer, set element, function, witness, randomness, polynomial, or group element.
Most confusion comes from using the conclusion too early or forgetting what was actually assumed.
Direct proof, contradiction, contrapositive, or induction are different control flows. Choose one on purpose.
Slide Deck
12 Weeks
Read chapters 1-4. Translate every claim into plain English and symbols.
Drill induction until proof templates feel mechanical.
Internalize relations, equivalence classes, modular arithmetic, inverses.
Study functions, images, preimages, injective/surjective/bijective maps.
Move beyond the book: finite fields, polynomial interpolation, linear algebra, and cryptographic proof definitions. Build tiny code experiments alongside each concept.
Example Walkthrough
For every public input x, if there exists a witness w
such that C(x, w) = 1, then the honest prover can produce a proof
accepted by the verifier.
x is public input, w is witness,
C is a constraint system, prover/verifier are algorithms.
The statement begins with “for every x” and then “there exists w”. Witnesses may depend on the chosen public input.
There exists a satisfying witness. This is a completeness-style assumption.
Show the honest prover can generate an accepting proof. This is about construction, not impossibility.
SP1 Mental Map
Be precise about what your light client actually proves: header validity, chain continuity, execution of verification logic, and which outputs become public values on-chain.
Separate trusted checkpoints, candidate headers, storage proofs, and outputs. Many bugs are domain-mixing bugs before they are cryptographic bugs.
Read security claims as quantifier statements: for every malicious prover, for every invalid claim, acceptance should be infeasible.
Header-by-header verification is often easiest to think about inductively: trust base checkpoint, verify one transition, repeat.
Model your pipeline as maps:
inputs -> execution -> public outputs -> proof -> on-chain verification.
SP1 hides custom-circuit work from app developers, but the underlying proof system is still algebraic. Understanding the math lets you reason about costs, recursion, and where precompiles help.
Next