49 lines
971 B
Text
49 lines
971 B
Text
import Lean.Meta.Tactic.Simp.BuiltinSimprocs
|
|
|
|
def foo (x : Nat) : Nat :=
|
|
x + 10
|
|
|
|
open Lean Meta
|
|
|
|
/-- doc-comment for reduceFoo -/
|
|
simproc reduceFoo (foo _) := fun e => do
|
|
unless e.isAppOfArity ``foo 1 do return .continue
|
|
let some n ← Nat.fromExpr? e.appArg! | return .continue
|
|
return .done { expr := mkNatLit (n+10) }
|
|
|
|
example : x + foo 2 = 12 + x := by
|
|
simp
|
|
rw [Nat.add_comm]
|
|
|
|
attribute [-simp] reduceFoo
|
|
|
|
example : x + foo 2 = 12 + x := by
|
|
fail_if_success simp
|
|
simp [foo]
|
|
rw [Nat.add_comm]
|
|
|
|
attribute [simp] reduceFoo
|
|
|
|
example : x + foo 2 = 12 + x := by
|
|
simp
|
|
rw [Nat.add_comm]
|
|
|
|
example (h : 12 = x) : 10 + 2 = x := by
|
|
simp
|
|
guard_target =ₛ 12 = x
|
|
assumption
|
|
|
|
attribute [-simp] Nat.reduceAdd
|
|
|
|
example (h : 12 = x) : 10 + 2 = x := by
|
|
fail_if_success simp
|
|
simp [Nat.reduceAdd]
|
|
guard_target =ₛ 12 = x
|
|
assumption
|
|
|
|
attribute [simp] Nat.reduceAdd
|
|
|
|
example (h : 12 = x) : 10 + 2 = x := by
|
|
simp
|
|
guard_target =ₛ 12 = x
|
|
assumption
|