|
| 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