import Lean open Lean Meta Tactic Grind def runGrind (x : GrindM α) : MetaM α := do GrindM.run x (← mkDefaultParams {}) @[noinline] def mkA (x : Nat) := x + 1 def tst (a b : Nat) : GrindM Unit := do IO.println a IO.println b let a ← shareCommon (mkNatLit a) let b ← shareCommon (mkNatLit b) IO.println (isSameExpr a b) /-- info: 1000000000000000000000000001 1000000000000000000000000001 true -/ #guard_msgs (info) in run_meta do let a := mkA 1000000000000000000000000000 let b := 1000000000000000000000000001 runGrind (tst a b) /-- info: 1001 1001 true -/ #guard_msgs (info) in run_meta do let a := mkA 1000 let b := 1001 runGrind (tst a b) def tst2 (a b : Nat) : IO Unit := do IO.println a IO.println b let (a, b) := ShareCommon.shareCommon' (mkNatLit a, mkNatLit b) IO.println (isSameExpr a b) /-- info: 1000000000000000000000000001 1000000000000000000000000001 true -/ #guard_msgs (info) in run_meta do let a := mkA 1000000000000000000000000000 let b := 1000000000000000000000000001 tst2 a b