Skip to content

Commit ab4d7c1

Browse files
committed
docs: add canonical PROVER_COUNT.md tier table
Closes Audit-A new-doc gap #2: 15+ docs were citing different prover counts (12, 30, 48, 105). This file is the single source of truth for what each count means, the 10-tier breakdown, and the historical drift across versions. Other docs are migrated to cite it rather than hardcode a number. https://claude.ai/code/session_01YPqu7gti4azBach6ZvpRFJ
1 parent 6c52e7f commit ab4d7c1

1 file changed

Lines changed: 81 additions & 0 deletions

File tree

docs/PROVER_COUNT.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<!-- SPDX-License-Identifier: MPL-2.0 -->
2+
<!-- SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> -->
3+
4+
# Canonical Prover Count and Tier Table
5+
6+
**Status**: canonical. Cite this file when documenting backend coverage in any
7+
other doc. Other surfaces that quoted historical counts (12, 30, 48, 105) are
8+
being updated to point here. Last revised: 2026-05-26.
9+
10+
## TL;DR
11+
12+
| Question | Answer |
13+
|---|---|
14+
| Total `ProverKind` variants in `src/rust/provers/mod.rs` | **128** |
15+
| External prover bindings (separate binary or library) | 89 |
16+
| `TypeChecker` disciplines routed via TypedWasm Sigma | 39 |
17+
| Exposed by default REST API (`Tier 1` / core) | **12** |
18+
| With real `suggest_tactics` (not stub) | 91 of 91 (5 of 91 still use heuristic only; GNN-ranked is target end-state) |
19+
| With native search command | 16 of 91 (72 return `Ok(vec![])` — cross-prover search via `VeriSimAdvisor` covers them) |
20+
| Trust pipeline integrity-hashed | All Tier 1; Tier 2 incrementally |
21+
22+
## Tier table
23+
24+
Tiers correspond to CI coverage cadence and default-API visibility.
25+
26+
| Tier | Cadence | Members | Notes |
27+
|---|---|---|---|
28+
| **1 — core** | Every PR | Coq/Rocq, Lean 4, Agda, Isabelle/HOL, Idris 2, F*, Z3, CVC5, Alt-Ergo, Dafny, Vampire, E Prover | Exposed by default REST `/api/verify`. Required to pass for green CI. |
29+
| **2 — extended** | Every PR (allow-fail) | HOL Light, Metamath, Mizar, HOL4, PVS, ACL2, TLAPS, Twelf, Nuprl, Minlog, Imandra, SPASS, Princess, IProver, Twee, MetiTarski, CSI, AProVE, Leo3, Satallax, Lash, AgsyHOL, GLPK, SCIP, MiniZinc, Chuffed, OR-Tools, Dreal, CBMC, KeY, KeYmaera X, EasyCrypt, Abella, Athena, Cameleer, Why3 | Direct invocation via `ProverKind`. CI runs but doesn't block. |
30+
| **3 — niche** | Nightly | Arend, Cedille, Lego, Aprové, Boogie, CVC4, Petri-net checkers, modal-logic provers, real-algebraic provers | Specialised use. |
31+
| **4 — placeholder** | Smoke only | 19 backends present as `ProverKind` variants but with mock-only invocation. | Promote when upstream maintainer ships a Containerfile. See [`handover/TODO.md`](handover/TODO.md) P4. |
32+
| **5 — Wave-3 secured** | Every PR | Tamarin, ProVerif, Metamath (rust-native), Twelf, OR-Tools | All ✅ real, runtime-smoke verified, Containerfile.wave3 |
33+
| **6 — pure-Rust** | Every PR | Metamath (own crate) | No external binary; in-process. |
34+
| **7 — Wave-2 modal/real-algebraic** | Every PR | Modal, real-algebraic provers (Phase 3 implementations) | See [`handover/PHASE-3-PROMPT.md`](handover/PHASE-3-PROMPT.md) |
35+
| **8 — HP type-checker ecosystem** | Nightly | 13 corpus-only provers (Ephapax / Wokelang / AffineScript backends) | Adapters pending; tracked in handover/TODO P4 |
36+
| **9 — TypeChecker disciplines** | Every PR | 39 disciplines (Hindley-Milner, System F, Rank-N, ATS-style affine, …) | Routed via `crates/typed_wasm` Sigma parameters; do not require external binary. |
37+
| **10 — Coq-Jr ecosystem (playground)** | Sub-project CI | `echidna-playground/` backends | Separate sub-project; tracked there. |
38+
39+
## Why so many counts in the wild?
40+
41+
History of the count drift:
42+
43+
- v1.0 (Dec 2025): **12** real backends. Released as the MVP scope.
44+
- v1.2 (Jan 2026): **30** declared, 12 fully tested.
45+
- v1.3 (Feb 2026): **48** declared, ~32 with real `suggest_tactics`.
46+
- v2.0 (Apr 2026): **74** after Wave-1 + Wave-2 absorption.
47+
- v2.1 (May 2026): **105** after Wave-3 (Tamarin, ProVerif, Twelf, OR-Tools).
48+
- v2.2 (May 2026): **128** after 39 TypeChecker disciplines were Sigma-routed
49+
through TypedWasm (commit `c4bc272` and follow-on).
50+
51+
Documents in this repo predating each milestone often quote the count current
52+
to their authoring date. When in doubt, **trust this file** and
53+
`.machine_readable/6a2/STATE.a2ml`.
54+
55+
## Verifying locally
56+
57+
```bash
58+
# Total variant count
59+
rg -c "^\s*[A-Z][a-zA-Z0-9_]+," src/rust/provers/mod.rs | head -1
60+
61+
# Tier 1 core list
62+
rg "fn all_core" -A 30 src/rust/provers/mod.rs
63+
64+
# Per-tier breakdown
65+
just provers # if implemented
66+
echo "or read"
67+
cat .machine_readable/provers.a2ml
68+
```
69+
70+
## When to cite this file
71+
72+
Cite `docs/PROVER_COUNT.md` (not a number) in:
73+
- README.adoc tagline
74+
- CLAUDE.md project overview
75+
- Any new design doc
76+
- PR descriptions referring to "all backends"
77+
- Issue templates
78+
79+
If a count changes (new wave absorbed, backend retired), update this file
80+
in the same PR. The single source of truth for the count is `ProverKind::all()`
81+
in `src/rust/provers/mod.rs`; this doc is the human-readable mirror.

0 commit comments

Comments
 (0)