Lean Kernel Arena / perf/unroll-versus-evaluate

Test "perf/unroll-versus-evaluate"

Expected: 馃憤 accept 路 Size: 44.6鈥疜B 路 Lines: 1.2鈥痥 路 lean4export: 3.1.0 路 Lean: 4.29.1 路 馃搫 Declaration馃敆 Source

The declaration to check compares

count #(n+1)      and      N.add (count #n) #1

where #k is the numeral with k successors, and count #k evaluates to #k in 螛(k虏) reductions.

The head constants differ. Unrolling count once turns the left side into the right side, leaving a traversal of the shared numeral #n, for 螛(n); evaluating both sides costs 螛(n虏). The test asks which of two differing head constants a checker chooses to unfold.

N=1000 in the Lean source. From Courant and Leroy, POPL 2026, 搂2.

Checker Result 鈴憋笍 馃
mathgraph 馃憤 3鈥痬s (梅12) 48.5鈥疢B (-24%)
ind-models 馃憤 65鈥痬s (脳2.1) 106.9鈥疢B (+67%)
official-nightly 馃憤 31鈥痬s (+1%) 63.4鈥疢B (-1%)
evmlean 馃毇 1.6鈥痵 137.7鈥疢B
nanoda 馃憤 1鈥痬s (梅21) 3.3鈥疢B (梅19)
mini 馃挜 1.5鈥痬 87.2鈥疢B
lean4lean 馃憤 31鈥痬s (+2%) 97.6鈥疢B (+53%)
sokonanoda 馃憤 3鈥痬s (梅11) 48.4鈥疢B (-24%)
zignodamus 馃憤 3鈥痬s (梅9.2) 9.7鈥疢B (梅6.6)
nanoclo 馃憤 4鈥痬s (梅8.2) 60.4鈥疢B (-5%)
nanobruijn 馃憤 2鈥痬s (梅16) 9.2鈥疢B (梅6.9)
kiota 馃憤 6鈥痬s (梅4.8) 13.3鈥疢B (梅4.8)
official 馃憤 31鈥痬s (0%) 63.8鈥疢B (0%)
vow-lean-kernel 馃憤 120鈥痬s (脳3.9) 8.7鈥疢B (梅7.3)
rpylean 馃憤 1鈥痬s (梅21) 9.7鈥疢B (梅6.6)
official-v4.28.0 馃憤 38鈥痬s (+22%) 70.8鈥疢B (+11%)
still-nanoda 馃憤 1鈥痬s (梅21) 3.3鈥疢B (梅20)
nyaya 馃憤 6鈥痬s (梅4.9) 12.0鈥疢B (梅5.3)
parse-only 馃憤 30鈥痬s (-4%) 62.5鈥疢B (-2%)