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