/-! Another “tricky” example from “Finding Lexicographic Orders for Termination Proofs in Isabelle/HOL” by Lukas Bulwahn, Alexander Krauss, and Tobias Nipkow, 10.1007/978-3-540-74591-4_5. Works out of the box! -/ set_option showInferredTerminationBy true mutual def pedal : Nat → Nat → Nat → Nat | 0, _m, c => c | _n, 0, c => c | n+1, m+1, c => if n < m then coast n m (c + m + 1) else pedal n (m + 1) (c + m + 1) def coast : Nat → Nat → Nat → Nat | n, m , c => if n < m then coast n (m - 1) (c + n) else pedal n m (c + n) end