This PR adds support for simplifying lambda expressions in `Sym.simp`. It is much more efficient than standard simp for very large lambda expressions with many binders. The key idea is to generate a custom function extensionality theorem for the type of the lambda being simplified. This technique is compatible with the standard `simp` tactic, and will be ported in a separate PR. <img width="581" height="455" alt="image" src="https://github.com/user-attachments/assets/5911dc6c-03f0-48ed-843b-b8cb4f67ee61" /> ### `lambda` benchmark summary | Lambda size | MetaM (ms) | SymM (ms) | Speedup | |-------------|------------|-----------|---------| | 50 | 22.7 | 0.74 | ~31× | | 100 | 120.5 | 1.75 | ~69× | | 150 | 359.6 | 2.90 | ~124× | | 200 | 809.5 | 4.51 | ~180× | |
||
|---|---|---|
| .. | ||
| bin | ||
| cmake | ||
| include/lean | ||
| Init | ||
| initialize | ||
| kernel | ||
| lake | ||
| Lean | ||
| library | ||
| runtime | ||
| shell | ||
| Std | ||
| util | ||
| cadical.mk | ||
| CMakeLists.txt | ||
| config.h.in | ||
| githash.h.in | ||
| Init.lean | ||
| lakefile.toml.in | ||
| lean-toolchain | ||
| Lean.lean | ||
| lean.mk.in | ||
| Leanc.lean | ||
| out | ||
| Std.lean | ||
| stdlib.make.in | ||
| stdlib_flags.h | ||
| version.h.in | ||