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 路 Timeout: 50.0鈥痵 路 馃搫 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 (梅22) 44.4鈥疢B (-32%)
sokonanoda 馃憤 2鈥痬s (梅22) 42.5鈥疢B (-35%)
nanoclo 馃憤 3鈥痬s (梅13) 50.4鈥疢B (-23%)
con-ron 馃憤 28鈥痬s (-22%) 68.0鈥疢B (+4%)
lazylean 馃憤 6鈥痬s (梅6.3) 24.5鈥疢B (梅2.7)
nanoda 馃憤 4鈥痬s (梅8.4) 3.8鈥疢B (梅17)
nanobruijn 馃憤 5鈥痬s (梅7.5) 11.0鈥疢B (梅6.0)
con-leche 馃憤 14鈥痬s (梅2.5) 29.3鈥疢B (梅2.2)
eink0rn 馃憤 4鈥痬s (梅8.0) 15.9鈥疢B (梅4.1)
ind-models 馃憤 70鈥痬s (+96%) 109.6鈥疢B (+67%)
official 馃憤 36鈥痬s (0%) 65.7鈥疢B (0%)
lean4lean 馃憤 43鈥痬s (+19%) 99.8鈥疢B (+52%)
tenet 馃憤 146鈥痬s (脳4.1) 48.3鈥疢B (-27%)
nanoclo-fortran 馃憤 6鈥痬s (梅5.6) 7.4鈥疢B (梅8.8)
lean4cobol 馃憤 118鈥痬s (脳3.3) 20.7鈥疢B (梅3.2)
evmlean 馃毇 1.6鈥痵 137.9鈥疢B
mini 馃挜 50.5鈥痵 90.1鈥疢B
overfull 馃挜 1.7鈥痬 48.9鈥疢B
kiota 馃憤 6鈥痬s (梅5.7) 16.4鈥疢B (梅4.0)
canonical-min 馃毇 390鈥痬s 1.1鈥疓B
rpylean 馃憤 5鈥痬s (梅6.9) 13.1鈥疢B (梅5.0)
vow-lean-kernel 馃憤 147鈥痬s (脳4.1) 10.8鈥疢B (梅6.1)
official-v4.28.0 馃憤 44鈥痬s (+22%) 76.0鈥疢B (+16%)
still-nanoda 馃憤 4鈥痬s (梅8.3) 4.1鈥疢B (梅16)
nyaya 馃憤 20鈥痬s (-44%) 13.2鈥疢B (梅5.0)
parse-only 馃憤 30鈥痬s (-17%) 65.9鈥疢B (0%)