lean4-htt/tests/lean/run/issue12404.lean
Rob23oba be442e9bb3
perf: cache results in replaceRecApps (#12420)
This PR adds caching to `replaceRecApps`, the procedure responsible for
replacing recursive applications for wellfounded recursion, improving
performance when many references to the same recursive call exist, e.g.
when recursive calls exist in proof terms.

Closes #12404

---------

Co-authored-by: Joachim Breitner <mail@joachim-breitner.de>
2026-02-11 09:47:34 +00:00

18 lines
644 B
Text

def foo (pat : ByteArray) (stackPos : Nat) (hst : stackPos < pat.size) : { n : Nat // n ≤ stackPos } :=
if h : stackPos = 0 then
⟨0, by simp⟩
else
go (stackPos - 1) (by omega)
termination_by stackPos
where
go (guess : Nat) (hg : guess < stackPos) : { n : Nat // n ≤ stackPos } :=
if pat[guess] = pat[stackPos] then
⟨guess + 1, by omega⟩
else if h : guess = 0 then
⟨0, by simp⟩
else
have : (foo pat (guess - 1) (by omega)) < guess := by
have := (foo pat (guess - 1) (by omega)).property
omega
go (foo pat (guess - 1) (by omega)) (by omega)
termination_by guess