import Lean.Meta.Tactic.Simp.Simproc import Lean.Meta.Offset def foo (x : Nat) : Nat := x + 10 simproc reduce_foo (foo _) := fun e => open Lean Meta in do let some n ← evalNat e.appArg! |>.run | return .continue return .done { expr := mkNatLit (n+10) } set_option tactic.simp.trace true example : x + foo 2 = 12 + x := by simp rw [Nat.add_comm]