SkyShannonProver/shannon-prover
GitHub: SkyShannonProver/shannon-prover
Shannon Prover 是一个利用 LLM 智能体在 EasyCrypt 中自动编写机器可检验密码学证明脚本的系统。
Stars: 4 | Forks: 0
# Shannon Prover
**编写机器可检验密码学证明的 LLM 智能体。**
Shannon Prover 通过受管理的证明会话,将语言模型智能体连接到
[EasyCrypt](https://www.easycrypt.info) 证明助手。智能体从不直接驱动证明器:
每一轮它会读取一个结构化的证明状态面板,以单次工具调用作为回应,
随后会话管理器会应用该调用,对照 EasyCrypt 进行检查,并重新渲染视图。
每个被接受的证明都不包含 `admit` 并且会进行离线重验证 —— 每次运行都是一份
关于智能体所看到的内容、做出的选择以及证明过程的完全可审计记录。
- **论文:** [ShannonProver: 走向自动化形式化密码学证明](https://arxiv.org/pdf/2607.02847) (arXiv:2607.02847)
- **网站:** [skyshannonprover.github.io/shannon-prover](https://skyshannonprover.github.io/shannon-prover/) — 托管的落地页 + 包含可重放运行记录的基准测试浏览器
- **联系方式:** shannonprover@gmail.com · [github.com/SkyShannonProver/shannon-prover](https://github.com/SkyShannonProver/shannon-prover)
- **本地站点:** 运行[演练场服务器](#the-playground-and-the-benchmark-browser)
并打开 `http://127.0.0.1:8000/` 以获取引导教程、实时演练场和基准测试浏览器。
## 此工具的功能 —— 以及您需要提供什么
形式化安全证明经历三个阶段(论文,图 1):
| 阶段 | 负责方 | 内容 |
|---|---|---|
| **I — 安全建模** | 专家 | 将方案及其安全概念表达为 EasyCrypt 模块和定义 |
| **II — 引理分解** | 专家 *(辅助功能即将推出 —— 敬请期待)* | 将主定理分解为中间引理陈述 —— 即构建证明的游戏跳跃 |
| **III — 战术级引理证明** | **Shannon Prover** | 使用 EasyCrypt 接受的战术脚本证明每个引理 |
**Shannon Prover 的范围是阶段 III**:您提供安全模型以及到引理级义务的分解,
它便会为每个引理编写战术级的证明脚本 —— 这是您现在可以委派的繁琐且耗时的部分。
各阶段之间存在反馈:证明成功的引理让您得以继续推进,而停滞的搜索通常意味着需要修改阶段 II 的分解。
## MCP 工具
Shannon Prover 通过 [Model Context Protocol](https://modelcontextprotocol.io) 与智能体进行通信。
智能体拥有且仅拥有**一个工具**,`submit_proof_intent` —— 每轮执行一个证明级别的操作。
始终可用的操作被刻意保持在很少的数量:提交 tactic、撤销、回退至检查点、重启、完成。
所有其他意图(符号查找、诊断、专用视图)在证明状态使其变得相关时,会由面板本身逐轮提供。
其他所有内容都隐藏在管理器之后:实时的 EasyCrypt 会话、文件、
会话状态、修复提示。当您运行证明时,每个树节点都会自动获得其专属的私有 MCP 服务器,
连接到一个无头模式的 Claude Code 实例 —— 无需任何配置,
且智能体在物理上除了通过此工具外,无法触碰证明器。
```
{"intent": "commit_tactic", "payload": {"tactic": "byequiv=> //."}}
```
### 两种接口模式
底层运行着相同的引擎、管理器和 EasyCrypt 后端;变化的仅有智能体读取的面板。
这是我们的接口消融实验所测量的实验变量(论文中的 L1/L4 表面层级):
| | **仅目标** (`l1_goal_projection`) | **工作台** (`l4_checked_action_surface`,默认) |
|---|---|---|
| 智能体所见 | 基本上只有**当前目标** —— 原始证明状态,无分析,无提示。 | 完整的 `ProverWorkspaceView`:目标**外加**事实性的编译器骨架 —— 程序前沿与对齐、调用点结构、类型化的 `candidate_moves` 菜单,以及签名/桥接引理查找句柄。 |
| 特点 | 模型单独能做什么的纯净基线。 | 真正试图**攻克困难证明**的默认选项 —— 大多数关系/概率证明都需要结构映射。 |
工作台所呈现的是**事实和合法选项**,而非操作指南:它
从不评判“最佳操作”,从不向智能体提供策略,且没有任何启发式规则会阻碍提交。
智能体选择操作;视图仅告知它在当前上下文中什么是合法的、该操作必须包含哪些事实,以及需要查阅哪些引理。
## 安装
前置条件:macOS 或 Linux,[opam](https://opam.ocaml.org),Python ≥ 3.12
搭配 [uv](https://docs.astral.sh/uv/),以及 Claude Code CLI(已安装并
登录)。
### 1. 通过 opam 安装 EasyCrypt
流水线预期 opam switch 被命名为 `easycrypt`(配置位于
`core/easycrypt/ec_env.py`):
```
opam init
opam switch --empty create easycrypt
opam pin -yn add easycrypt https://github.com/EasyCrypt/easycrypt.git
opam install --deps-only easycrypt
opam install alt-ergo.2.6.0 easycrypt
easycrypt why3config
```
然后,在运行证明器或演练场的**每一个** shell 中:
```
eval "$(opam env --switch=easycrypt)"
```
### 2. Python 环境
```
uv sync # installs from pyproject.toml (Python >= 3.12)
claude --version # the prover drives the Claude Code CLI — install & log in first
```
默认的证明器模型是处于 `high` 努力程度下的 `claude-opus-4-8`;可以通过某个套件的 `defaults` 下的
`"model"`/`"effort"` 键进行覆盖,或者在直接运行 `workflow.orchestrator` 时
使用 `--prover-model`/`--prover-effort`。
提示:在没有供应商 API 密钥的 Claude 订阅下,启动运行时
请取消设置供应商密钥变量(`env -u ANTHROPIC_API_KEY …`),以便 CLI 使用
您的登录状态。
### 3. 证明您的第一个引理
该仓库为 Claude Code 提供了一个 `/prove` 命令。在检出版本中打开 Claude Code,
并将其指向 `eval/examples/` 下的任意引理:
```
/prove PIR_correct # Workbench mode (default)
/prove PIR_correct l1_goal_projection # Goal-only mode
```
Claude 会找到该引理的源码,生成一个单目标的评估套件,
并在评估模式下启动运行 —— 源码会被复制到一个隔离的容器中,
并且目标的证明体会被剥离,因此智能体是在盲状态下进行证明的。
等效的直接命令:
```
eval "$(opam env --switch=easycrypt)"
uv run python -m eval_suite.run --suite eval_suite/suites/demo_pir.json \
--profiles l4_checked_action_surface
```
## 引入您自己的引理
将新的基准测试文件放在 `eval/examples/` 下 —— 可以是单个自包含的
`eval/examples/.ec`,或者是包含目标及其导入的所有同级 `.ec`/`.eca`
文件的项目目录 `eval/examples//`。
在 `eval_suite/suites/` 下创建一个 JSON 套件(复制 `demo_pir.json` 并编辑
`targets[0]`):
```
{
"suite": "local_",
"profiles": ["l1_goal_projection", "l4_checked_action_surface"],
"defaults": {
"eval_mode": true,
"max_iterations": 1,
"timeout_minutes": 30,
"repeats": 1,
"output_dir": "artifacts/eval_suite",
"source_isolation": true,
"strip_proofs": true
},
"targets": [
{
"id": "",
"file": "eval/examples//Target.ec",
"lemma": "",
"include_dir": "easycrypt-src/theories",
"copy_root": "eval/examples/"
}
]
}
```
(如果是单个自包含文件,则省略 `copy_root`。)务必先进行干运行,并
检查展开后的命令是否指向位于
`artifacts/eval_suite/.../source/...` 下的隔离源码:
```
uv run python -m eval_suite.run --suite eval_suite/suites/local_.json \
--profiles l4_checked_action_surface --dry-run
uv run python -m eval_suite.run --suite eval_suite/suites/local_.json \
--profiles l4_checked_action_surface
```
## 解读结果
指标会存放在 `artifacts/eval_suite////r01/`
(`eval_metrics.md`,`source_manifest.json`,`iteration_1/summary.json`)。每次
运行还会自动构建 **bundle** —— 这是每一次
回合的可点击且已提交的时间线:
```
agent_view_runs//__/
timeline_report.md # env header + per-step table + committed proof
timeline_report.json
run_meta.json
views//turn_NNN.json # the exact view the agent saw at each turn
```
每一行代表一个回合 —— *智能体看到的视图 → 它提交的意图 →
管理器给出的结果*。浏览 bundle 的最佳方式是使用
[基准测试浏览器](#the-playground-and-the-benchmark-browser)。如果某次运行在
自动钩子触发前被终止,可以通过
`python3 -m workflow.validation.run_report_bundle --timestamp …` 手动重建。
### 它真的证明了吗?
- 只有当最终证明**不包含 `admit.`** 时,运行才算真正的成功 ——
`admit.` 会在未证明的情况下将目标搁置。只要已提交的 admit 仍然存在,管理器就会阻止 `finish`,
回写路径会拒绝包含它的最终证明,并且每个被接受的证明都会通过全新的离线
EasyCrypt 运行进行重验证。请在 `eval_metrics.md` 中读取结果,并在 bundle 的
`## Agent's committed proof` 下查看证明体。
- **评估模式下的隔离是刻意设计的。** 运行器会剥离一份隔离副本;请**不要**
为了“帮助”完成证明而手动编辑主检出目录 —— 这会
破坏隔离性并影响数据准确性。
- **`why3server` / 沙盒(头号设置失败原因)。** 如果 OS 沙盒阻止了
`nice()` 系统调用,`why3server` 将永远无法启动,且 `smt()` 会失败并提示
*"cannot start & connect to why3server"*。请在沙盒之外运行 EasyCrypt/Why3。
## 演练场和基准测试浏览器
一个本地服务器托管了引导教程(`/`)、实时演练场(`/playground`
—— 选择一个引理,按开始,观看面板和提交的实时流),以及
基准测试浏览器(`/results/` —— 模型能力排行榜以及所有记录在案的
运行记录,均可逐回合重放):
```
eval "$(opam env --switch=easycrypt)"
uv run --with fastapi --with "uvicorn[standard]" \
uvicorn playground.server:app --host 127.0.0.1 --port 8000
```
仅限本地 —— 没有身份验证层;请将其绑定在 `127.0.0.1`,并且
当有评估套件运行正在同一个检出版本中使用 EasyCrypt 时,请不要运行演练场。
## 架构
```
flowchart TD
Orchestrator["workflow/orchestrator.py + tree policy
proof-search strategy"] --> Runtime["workflow/proof_node_runtime.py
long-lived proof node"] Runtime --> Manager["workflow/proof_node_manager.py
ProofNodeManager"] Agent["Prover agent"] -->|"submit_proof_intent MCP tool
JSON proof intent"| Runtime Runtime -->|"private manager bridge"| Manager Manager --> ReplMgr["ReplSessionManager
session lifecycle"] ReplMgr --> Backend["core/easycrypt backend
session_cli/runtime/daemon"] Backend --> EC["EasyCrypt REPL / daemon"] Backend --> Events["events.jsonl + completed snapshot"] Events --> Projection["session_projection.py"] Projection --> ToolView["session_tool_view.py"] Projection --> ContextView["session_agent_view.py
ProofContextView"] ToolView --> ContextView Analysis["core/easycrypt/analysis
ProofIR / candidate menu / actions"] --> ContextView ContextView --> Workspace["session_prover_workspace_view.py
ProverWorkspaceView"] Analysis --> Navigator["workspace navigation adapters
current-view map interpreter"] Navigator --> Workspace Workspace --> ViewMgr["session_workspace_view_manager.py
sanitize/order/lint"] ViewMgr -->|"IDE-style view"| Manager Manager -->|"factual candidate_moves"| Runtime Runtime -->|"bounded result + latest view ref"| Agent ContextView --> Observer["workflow/session_observer.py"] Workspace --> Observer Observer --> Tree["workflow/progress.py"] Events --> Acceptance["workflow/proof_acceptance.py"] Acceptance --> Replay["workflow/validation/proof_replay.py"] KB["knowledge/base/agent/*"] --> Agent ``` 经验法则: - 面向智能体的证明交互通过 `ProofNodeManager` 进行; - 长生命周期的证明器 worker 通过逐节点的 `submit_proof_intent` MCP 工具和私有运行时桥接将该交互暴露给 Claude; - EasyCrypt 的生命周期和状态变更由管理器通过 `ReplSessionManager` 负责控制; - 候选方案和证据由 ProofContextView、ProofIR、ToolViews、 诊断和 KB 源生成;`ProverWorkspaceView` 仅负责为面向智能体的表层 过滤、排序、润色和检查这些素材; - 工作流代码仅在通过事件契约验证和离线 EasyCrypt 验证后才会接受证明。 请参阅 [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) 获取贡献者级别的 详细说明,以及 [`TESTING.md`](TESTING.md) 了解重放、回归和 A/B 测试流程。 ## 主要目录 ``` core/easycrypt/ EasyCrypt backend: session runtime, events, projection, workspace views, goal/ProofIR analysis, lemma search workflow/ orchestrator, tree supervisor, proof-node runtime + manager + MCP server, agents, validation (replay/audit) knowledge/ prover-facing KB build/search (+ gitignored trace stores) eval/examples/ EasyCrypt benchmark corpus (data only) eval_suite/ benchmark runner + checked-in suites agent_view_runs/ committed run bundles (browse at /results/) playground/ the local web server: tour, live playground, benchmark bundle_browser/ static benchmark-browser SPA + manifest builder tools/ offline audit & analysis toolboxes (panel fidelity, panel value, L1-vs-L4 metrics) tests/ test suite easycrypt-src/ vendored upstream EasyCrypt (its own MIT license) ``` 生成的运行输出归属于 `artifacts/` 或 `workflow/runs/`;两者均 被 gitignored。 ## 许可证与引用 Shannon Prover 基于 [MIT 许可证](LICENSE) 发布。 `easycrypt-src/` 目录包含了上游 EasyCrypt,其遵循自身的 MIT 许可证。 如果您在研究中使用了 Shannon Prover,请引用 ([CITATION.cff](CITATION.cff)): ``` @article{ma2026shannonprover, title = {ShannonProver: Towards Automating Formal Cryptographic Proofs}, author = {Ma, Yiping and Tsai, Yu-Lin and Rathee, Mayank and Rathee, Deevashwer and Dupressoir, Fran\c{c}ois and Strub, Pierre-Yves and Popa, Raluca Ada}, journal = {arXiv preprint arXiv:2607.02847}, year = {2026} } ``` Shannon Prover 是一个研究原型:欢迎在 [github.com/SkyShannonProver/shannon-prover](https://github.com/SkyShannonProver/shannon-prover) 或 shannonprover@gmail.com 提交问题与进行讨论。
proof-search strategy"] --> Runtime["workflow/proof_node_runtime.py
long-lived proof node"] Runtime --> Manager["workflow/proof_node_manager.py
ProofNodeManager"] Agent["Prover agent"] -->|"submit_proof_intent MCP tool
JSON proof intent"| Runtime Runtime -->|"private manager bridge"| Manager Manager --> ReplMgr["ReplSessionManager
session lifecycle"] ReplMgr --> Backend["core/easycrypt backend
session_cli/runtime/daemon"] Backend --> EC["EasyCrypt REPL / daemon"] Backend --> Events["events.jsonl + completed snapshot"] Events --> Projection["session_projection.py"] Projection --> ToolView["session_tool_view.py"] Projection --> ContextView["session_agent_view.py
ProofContextView"] ToolView --> ContextView Analysis["core/easycrypt/analysis
ProofIR / candidate menu / actions"] --> ContextView ContextView --> Workspace["session_prover_workspace_view.py
ProverWorkspaceView"] Analysis --> Navigator["workspace navigation adapters
current-view map interpreter"] Navigator --> Workspace Workspace --> ViewMgr["session_workspace_view_manager.py
sanitize/order/lint"] ViewMgr -->|"IDE-style view"| Manager Manager -->|"factual candidate_moves"| Runtime Runtime -->|"bounded result + latest view ref"| Agent ContextView --> Observer["workflow/session_observer.py"] Workspace --> Observer Observer --> Tree["workflow/progress.py"] Events --> Acceptance["workflow/proof_acceptance.py"] Acceptance --> Replay["workflow/validation/proof_replay.py"] KB["knowledge/base/agent/*"] --> Agent ``` 经验法则: - 面向智能体的证明交互通过 `ProofNodeManager` 进行; - 长生命周期的证明器 worker 通过逐节点的 `submit_proof_intent` MCP 工具和私有运行时桥接将该交互暴露给 Claude; - EasyCrypt 的生命周期和状态变更由管理器通过 `ReplSessionManager` 负责控制; - 候选方案和证据由 ProofContextView、ProofIR、ToolViews、 诊断和 KB 源生成;`ProverWorkspaceView` 仅负责为面向智能体的表层 过滤、排序、润色和检查这些素材; - 工作流代码仅在通过事件契约验证和离线 EasyCrypt 验证后才会接受证明。 请参阅 [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) 获取贡献者级别的 详细说明,以及 [`TESTING.md`](TESTING.md) 了解重放、回归和 A/B 测试流程。 ## 主要目录 ``` core/easycrypt/ EasyCrypt backend: session runtime, events, projection, workspace views, goal/ProofIR analysis, lemma search workflow/ orchestrator, tree supervisor, proof-node runtime + manager + MCP server, agents, validation (replay/audit) knowledge/ prover-facing KB build/search (+ gitignored trace stores) eval/examples/ EasyCrypt benchmark corpus (data only) eval_suite/ benchmark runner + checked-in suites agent_view_runs/ committed run bundles (browse at /results/) playground/ the local web server: tour, live playground, benchmark bundle_browser/ static benchmark-browser SPA + manifest builder tools/ offline audit & analysis toolboxes (panel fidelity, panel value, L1-vs-L4 metrics) tests/ test suite easycrypt-src/ vendored upstream EasyCrypt (its own MIT license) ``` 生成的运行输出归属于 `artifacts/` 或 `workflow/runs/`;两者均 被 gitignored。 ## 许可证与引用 Shannon Prover 基于 [MIT 许可证](LICENSE) 发布。 `easycrypt-src/` 目录包含了上游 EasyCrypt,其遵循自身的 MIT 许可证。 如果您在研究中使用了 Shannon Prover,请引用 ([CITATION.cff](CITATION.cff)): ``` @article{ma2026shannonprover, title = {ShannonProver: Towards Automating Formal Cryptographic Proofs}, author = {Ma, Yiping and Tsai, Yu-Lin and Rathee, Mayank and Rathee, Deevashwer and Dupressoir, Fran\c{c}ois and Strub, Pierre-Yves and Popa, Raluca Ada}, journal = {arXiv preprint arXiv:2607.02847}, year = {2026} } ``` Shannon Prover 是一个研究原型:欢迎在 [github.com/SkyShannonProver/shannon-prover](https://github.com/SkyShannonProver/shannon-prover) 或 shannonprover@gmail.com 提交问题与进行讨论。
标签:DLL 劫持, EasyCrypt, 大语言模型, 定理证明器, 密码学证明, 形式化验证, 漏洞数据库, 逆向工具