Lean Kernel Arena / perf/args-before-unfold

Test "perf/args-before-unfold"

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

The declaration to check compares

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

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

N.add #(n-1) #1 reduces to #n in n steps, so the two arguments agree for 螛(n), and the applications agree with them without count ever being unfolded. Evaluating both applications costs 螛(n虏). The test asks whether a checker tries the arguments of a shared head constant before unfolding it.

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

Checker Result 鈴憋笍 馃
mathgraph 馃憤 2鈥痬s (梅21) 44.3鈥疢B (-30%)
ind-models 馃憤 70鈥痬s (+92%) 109.3鈥疢B (+72%)
official-nightly 馃憤 36鈥痬s (0%) 63.8鈥疢B (0%)
evmlean 馃毇 1.6鈥痵 137.8鈥疢B
nanoda 馃憤 4鈥痬s (梅8.6) 3.8鈥疢B (梅17)
mini 馃挜 45.0鈥痵 90.8鈥疢B
lean4lean 馃憤 43鈥痬s (+17%) 95.8鈥疢B (+50%)
sokonanoda 馃憤 2鈥痬s (梅21) 44.5鈥疢B (-30%)
zignodamus 馃憤 2鈥痬s (梅16) 7.1鈥疢B (梅8.9)
nanoclo 馃憤 3鈥痬s (梅13) 54.3鈥疢B (-15%)
nanobruijn 馃憤 5鈥痬s (梅7.9) 11.4鈥疢B (梅5.6)
kiota 馃憤 5鈥痬s (梅7.0) 13.9鈥疢B (梅4.6)
official 馃憤 36鈥痬s (0%) 63.7鈥疢B (0%)
vow-lean-kernel 馃憤 147鈥痬s (脳4.0) 10.7鈥疢B (梅6.0)
rpylean 馃憤 6鈥痬s (梅6.4) 16.8鈥疢B (梅3.8)
official-v4.28.0 馃憤 44鈥痬s (+20%) 74.7鈥疢B (+17%)
still-nanoda 馃憤 4鈥痬s (梅8.5) 4.1鈥疢B (梅16)
nyaya 馃憤 20鈥痬s (-45%) 13.7鈥疢B (梅4.7)
parse-only 馃憤 30鈥痬s (-18%) 62.5鈥疢B (-2%)