LLM
Reads the compiled proof state, chooses the next move, and submits one proof-level intent.
Shannon Prover works at Phase III today. You currently retain control of the security model and the proof's intermediate claims; support for Phase II lemma decomposition is under active development.
Given a lemma, an EasyCrypt proof is a sequence of tactics that transforms its current goal until no obligations remain. Here is a complete four-tactic example from the public MEE-CBC development in this repository.
local lemma DQ_Sample_Compute_pr &m:
Pr[INDR_CPA_direct(CBC_Oracle(DoubleQuery(Sample)),A).main() @ &m:
DoubleQuery.bad] =
Pr[INDR_CPA_direct(Compute,A).main() @ &m : Compute.bad]
proof. byequiv=> //=. proc; call (_: ={bad,qs}(DoubleQuery,Compute)). by conseq DQ_Sample_Compute_eq. by inline *; auto.qed.
byequiv=> //=.pre = (glob A){2} = (glob A){m} /\ (glob A){1} = (glob A){m}
INDR_CPA_direct(CBC_Oracle(DoubleQuery(Sample)), A).main
~ INDR_CPA_direct(Compute, A).main
post = DoubleQuery.bad{1} = Compute.bad{2}by inline *; auto.No more goalsThe proof is shown exactly from proof. to qed..
Highlighted tactic lines point to the EasyCrypt goal immediately after that line runs.
Through MCP, each proof turn is a loop among three roles: the LLM reasons about what to do, the manager and proof-state compiler mediate the current proof state, and EasyCrypt executes and checks every committed tactic.
Reads the compiled proof state, chooses the next move, and submits one proof-level intent.
Owns the live proof session and presents the exact current goal, valid proof controls, and any bounded EasyCrypt-certified compiler output. It never chooses the proof strategy.
Executes tactics and returns the resulting goal or error. Only checker-accepted steps enter the proof.
Every turn carries exactly one proof intent. The manager applies it to EasyCrypt, returns the exact resulting goal or error, then compiles a bounded action surface for the unchanged current state. The agent uses that response to choose its next action.
submit_proof_intent, the agent can submit a tactic
(commit_tactic) or use an available session control: Undo last
(undo_last_step), Rewind (undo_to_checkpoint), Restart
(fresh_restart), or Finish (finish). After a failed step, the
manager may also offer guided amendment and replay (amend_and_replay).Ready to move from the paper to a live proof session? You need macOS or Linux, opam, Python ≥ 3.12, uv, and an authenticated proof-agent CLI. OpenAI Codex is the default; Claude is available when you explicitly choose it.
git clone https://github.com/SkyShannonProver/shannon-prover.git
cd shannon-prover
uv sync
Shannon Prover is locked to EasyCrypt r2026.06. The bootstrap command
creates and verifies the repository-managed opam root and switch:
uv run python tools/bootstrap_easycrypt.py
uv run python tools/bootstrap_easycrypt.py --verify-only
Python entry points select this environment automatically; no ambient opam switch is required.
Create one directory under projects/, put the target file and its
project-owned .ec/.eca dependencies there, and leave the target
lemma with an unfinished proof.
projects/
my-proof/
Target.ec
Dependency.ec
Run Codex from the repository and invoke the repo-scoped Prove skill. Claude Code provides the same one-argument interface through its project command:
# Codex — default backend and model
$prove my_lemma
# Claude Code — explicitly selects Claude
/prove my_lemma
The agent submits one intent per turn through submit_proof_intent. A proof
is written back only after a fresh offline EasyCrypt verification succeeds.
gpt-5.6-sol with high reasoning effort; direct runs may select another
backend, compatible model, and effort.$prove and
/prove work directly on your project. Proof stripping and filesystem
isolation belong only to controlled research evaluation.Install Shannon Prover and start a managed EasyCrypt proof from Codex or Claude.
Development dashboard for our ongoing controlled evaluation across models.