Lean Kernel Arena / perf/refute-cheap-first

Test "perf/refute-cheap-first"

Expected: ✋ reject · Size: 20.7 KB · Lines: 439 · lean4export: 3.1.0 · Lean: 4.29.1 · Timeout: 50.0 s · 📄 Declaration · 🔗 Source

The declaration to check claims

(false, count #n) = (true, count #(n+1))

and must be rejected. Both sides are constructor applications, so comparing components is the only route, and either component refutes on its own: false against true for Θ(1), the numerals for Θ(n²) (count #k evaluates to #k in Θ(k²) reductions). The test asks in which order a checker visits the components. refute-cheap-last.lean swaps them, and the ratio between the two files is what that order costs.

N=200 in the Lean source. From Courant and Leroy, POPL 2026, §10, where the two orders cost Rocq 4 × 10⁻⁶ s and 0.61 s.

Checker Result ⏱️ 🧠
mathgraph ✋ 1 ms (÷48) 37.9 MB (-45%)
sokonanoda ✋ 1 ms (÷48) 33.9 MB (÷2.0)
nanoclo ✋ 1 ms (÷37) 53.7 MB (-22%)
con-ron ✋ 24 ms (-44%) 60.8 MB (-12%)
lazylean ✋ 10 ms (÷4.0) 25.2 MB (÷2.7)
nanoda ✋ 1 ms (÷41) 3.2 MB (÷22)
nanobruijn ✋ 2 ms (÷26) 12.0 MB (÷5.7)
con-leche ✋ 5 ms (÷9.1) 24.6 MB (÷2.8)
eink0rn ✋ 3 ms (÷14) 16.8 MB (÷4.1)
ind-models ✋ 72 ms (+73%) 109.3 MB (+58%)
official ✋ 42 ms (0%) 69.0 MB (0%)
lean4lean ✋ 79 ms (+90%) 103.7 MB (+50%)
tenet ✋ 141 ms (×3.4) 44.8 MB (-35%)
nanoclo-fortran ✋ 2 ms (÷23) 4.6 MB (÷15)
lean4cobol ✋ 12 ms (÷3.5) 14.0 MB (÷4.9)
evmlean 🚫 1.9 s 133.9 MB
mini 💥 1.5 m 77.3 MB
overfull ✋ 1.1 m (×1524) 48.0 MB (-30%)
kiota ✋ 1 ms (÷32) 9.1 MB (÷7.6)
canonical-min 🚫 388 ms 1.1 GB
rpylean ✋ 4 ms (÷10) 13.2 MB (÷5.2)
vow-lean-kernel ✋ 7.4 s (×177) 16.9 MB (÷4.1)
official-v4.28.0 ✋ 49 ms (+18%) 74.6 MB (+8%)
still-nanoda ✋ 1 ms (÷41) 3.3 MB (÷21)
nyaya ✋ 3 ms (÷12) 10.2 MB (÷6.8)
parse-only 👍 28 ms 65.2 MB