The Lean Kernel Arena presents, tests and benchmarks proof checkers for the Lean Theorem Prover.
Details
Scoring
The data below is generated by running each checker on a suite of test inputs. Test inputs are invalid proofs that should be rejected (columns β), valid proofs that should be accepted (columns π), or corner cases without an expected outcome (columns π€·). Within each group, the columns count how often the checker answered correctly, wrongly, or declined the test (π«). The checkers are scored based on their ability to correctly reject and accept these tests, and the table is sorted accordingly: first by the number of wrongly accepted invalid proofs, then by the number of wrongly rejected valid proofs, then by the time to check the mathlib test (checkers that do not manage that test rank below those that do), and finally by the number of declined tests.
Checkers that do not implement all features may choose to explicitly decline to process certain tests (column π«). These tests are not taken into account for correctness scoring. Tests that crash the checker (π₯) also considered declined.
Tests can come without an expected outcome (shown as π€·). These test corner cases that are not known to be soundness relevant and not typically relevant in practice, and where it is acceptable for a checker to accept or to reject. They are excluded from the completeness and soundness scoring.
Performance
The time and space measurements refer to the mathlib test case, the largest correct test in the suite. The β±οΈ column shows virtual CPU time, calculated from instruction counts using a fixed rate of 6.0β―Ginstr/s. This provides consistent performance comparison across different hardware, though it does not reflect parallel processing capabilities that some checkers may use.
For performance-compared tests (such as the perf/ group), the cells show the runtime relative to the official checker. A dark green background marks the fastest checker for that test, and a light green background marks checkers that are at least 10% faster than the official checker.
Downloads
A tarball of the test suite (excluding tests larger than 10 MB) is available for download: lean-arena-tests.tar.gz (113 good tests, 73 bad tests, 2.7β―MB). The tarball contains subdirectories good/ and bad/ based on expected results, making it easy to test your own checker implementation.
The raw data behind this page is available as results.json (2.8β―MB). It contains the checker metadata (checkers), the test metadata (tests) and the array of all individual results (results), and may be useful for further analysis of the data.
Contributing
For more details on the interface for external checks, and how to submit these, see the project's README.md file.
The test suite includes a set of tutorial test cases that exercise individual features of the Lean type system step by step, from basic definitions through inductives, recursors, projections, definitional equality rules, and quotient types. Each tutorial test is a small self-contained environment, making them a useful starting point for developing and debugging a new kernel checker.
We are interested in extending our test suite, in particular tests that should be rejected are a useful help for authors of new kernel checkers.
Rounds
The arena runs in rounds. This page shows the round currently in progress, rebuilt whenever checkers or tests change; results from earlier, closed rounds are archived on the rounds page. Results are only really comparable within a round, since checkers, tests and the Lean version they are measured against all move between rounds.
Checkers
| Checker | Version | β | π | π€· | β±οΈ | π§ | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| β | β | π« | β | β | π« | β | π« | ||||||||
| mathgraph | mathgraph (2de1895) | 73 | 118 | 12 | 2.3β―m | 6.7β―GB | |||||||||
| nanoda | master (0505569) | 66 | 7 | 116 | 2 | 12 | 22.1β―m | 7.4β―GB | |||||||
| nanobruijn | master (79048ed) | 73 | 118 | 12 | 26.4β―m | 5.5β―GB | |||||||||
| ind-models | main (b3df02d) | 69 | 4 | 118 | 12 | 31.7β―m | 7.9β―GB | ||||||||
| official | v4.34.0-rc2 | 73 | 118 | 12 | 32.9β―m | 7.6β―GB | |||||||||
| lean4lean | arena (bce3448) | 73 | 118 | 12 | 39.8β―m | 9.2β―GB | |||||||||
| evmlean | 0.3.0 | 69 | 4 | 99 | 19 | 12 | - | - | |||||||
| mini | master (7ea4f55) | 65 | 8 | 103 | 15 | 11 | 1 | - | - | ||||||
| sokonanoda | master (0fab887) | 71 | 2 | 118 | 12 | 2.4β―m | 6.7β―GB | ||||||||
| nanoclo | main (b27e4c5) | 71 | 2 | 118 | 12 | 7.9β―m | 6.6β―GB | ||||||||
| zignodamus | master (1113722) | 71 | 2 | 117 | 1 | 12 | - | - | |||||||
| vow-lean-kernel | 0.1.0 | 66 | 5 | 2 | 108 | 1 | 9 | 12 | - | - | |||||
| official-v4.28.0 | 4.28.0 | 66 | 6 | 1 | 118 | 12 | 41.4β―m | 9.3β―GB | |||||||
| still-nanoda | cache-study-port (06a07b7) | 67 | 6 | 116 | 2 | 12 | 15.5β―m | 5.2β―GB | |||||||
| kiota | 0.1.0 | 67 | 6 | 112 | 5 | 1 | 12 | - | - | ||||||
| rpylean | v2026.7.6 | 66 | 7 | 114 | 3 | 1 | 12 | - | - | ||||||
| nyaya | master (a748f56) | 59 | 11 | 3 | 103 | 4 | 11 | 12 | - | - | |||||
| parse-only | v4.34.0-rc2 | 6 | 67 | 118 | 12 | 4.6β―m | 7.6β―GB | ||||||||