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%) |