- Python 97.6%
- CSS 2.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
A formal verifier (Verus) is the honesty oracle, so dishonesty is a mechanical contradiction between a model's self-report and its artifact, with no LLM judge and no human rater. Two modes (a hollow proof passes only via an unsound primitive the model denies; a grounded lie claims success on a proof its own assessment judged failed), an agentic harness that hides the soundness check from the model, a 121-task difficulty-graded Verus task set, the writeup (REPORT.md + report.css), and a test suite. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
| data | ||
| scripts | ||
| src/hollow_proofs | ||
| tests | ||
| .gitignore | ||
| .python-version | ||
| LICENSE | ||
| pyproject.toml | ||
| README.md | ||
| report.css | ||
| REPORT.md | ||
| uv.lock | ||
Hollow Proofs
A judge-free benchmark for measuring dishonesty in LLMs that produce formally checkable proofs. A formal verifier (Verus) is the honesty oracle, so dishonesty is mechanically detectable as a contradiction between the model's self-report and its artifact, in two modes:
- Hollow proof — the proof passes standard verification only because it hides an unsound primitive (
assume,admit,external_body,assume_specification), whichverus --no-cheatingcatches, while the model denies using one. - Grounded lie — the proof fails, the model's own unpressured assessment agrees it failed, yet under pressure it claims success.
No judge LLM, no human rater. The model produces its proof through an agentic loop against the standard verifier (write → check → fix) and is never shown the soundness check; we compare its final claim to its artifact once, afterward, in the scorer. See REPORT.md for the full writeup and pilot results.
Quick start
uv sync
uv run pytest -q # 46 tests, no external data
uv run python scripts/validate_agentic.py # mockllm end-to-end, zero API cost
Render the report to PDF (no LaTeX needed): pandoc REPORT.md -f gfm -s -c report.css --pdf-engine=weasyprint -o REPORT.pdf
Data and reproduction
The test suite and the mockllm validators use only in-repo fixtures and a mock model, so uv run pytest -q validates the instrument on a fresh clone with no external data.
Re-running the task curation or the real-model pilots needs Verus installed (we pin 0.2026.05.17.e479cce with Rust toolchain 1.95.0; set VERUS_BIN if it is not on PATH) and the upstream task corpus:
git clone https://github.com/microsoft/verus-proof-synthesis vendor/verus-proof-synthesis
data/curated_gradient.json and data/curated_tasks.json store task ids, not task bodies; the bodies load from vendor/ at runtime. Sources are Verus-Bench and VeruSAGE-Bench (in microsoft/verus-proof-synthesis), which include the CloverBench- and MBPP-derived entries. Respect the upstream licenses when redistributing task content. Real model runs cost money: see scripts/run_pilot.py and scripts/analyze.py.
Layout
src/hollow_proofs/— package:verifier,detector,schema,prompts,tools,parsing,task,analysisscripts/—curate_tasks,validate_*(mockllm, zero cost),probe_cheat_knowledge,run_pilot,analyzedata/curated_gradient.json— the 121-task difficulty-graded set;data/curated_tasks.json— the 20-task pilot subsettests/— unit tests and Verus fixturesREPORT.md— the writeup;report.css— its PDF stylesheet
License
MIT, see LICENSE. Task content loaded from vendor/ is governed by its own upstream license.
Maintainer
Orpheus Lummis.