Add an example Lean file that includes an unusually large definition that takes a long time to elaborate. It may be that it's difficult to process it more efficiently, but perhaps someone will discover a way to improve it if it's in the benchmark suite. Improved performance on this benchmark will likely make some program analysis and verification tasks within Lean more feasible. --------- Co-authored-by: Sebastian Ullrich <sebasti@nullri.ch>
459 lines
15 KiB
Text
459 lines
15 KiB
Text
/-!
|
|
This benchmark exercises
|
|
* general elaboration, likely from many nested lambdas
|
|
* code generation, ditto
|
|
-/
|
|
|
|
set_option maxRecDepth 10000
|
|
|
|
def addALot (x: Nat) : StateM Nat Nat := do
|
|
set x
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
modifyGet (λ y => ((), y + x))
|
|
let y <- get
|
|
pure y
|
|
|
|
#eval StateT.run' (addALot 2) 0
|