lean4-htt/tests/lean/run/sym_liftLower.lean
Leonardo de Moura 19d16ff9b7
feat: add replaceS, liftLooseBVarsS, and lowerBVarsS (#11800)
This PR adds the function `Sym.replaceS`, which is similar to
`replace_fn` available in the kernel but assumes the input is maximally
shared and ensures the output is also maximally shared. The PR also
generalizes the `AlphaShareBuilder` API.
2025-12-25 20:16:45 +00:00

23 lines
563 B
Text

import Lean.Meta.Sym
open Lean Meta Grind Sym
def tst1 : SymM Unit := do
let x1 ← mkBVarS 0
let x2 ← mkBVarS 1
let t1 ← mkAppS (← mkAppS (← mkConstS `f) x1) x2
let t2 ← mkForallS `x BinderInfo.default (← mkConstS `Nat) t1
IO.println (← liftLooseBVarsS t1 0 1)
IO.println (← liftLooseBVarsS t2 0 1)
let t3 ← lowerLooseBVarsS (← liftLooseBVarsS t2 0 1) 1 1
IO.println t3
assert! t2 == t3
assert! isSameExpr t2 t3
/--
info: f #1 #2
forall (x : Nat), f x #1
forall (x : Nat), f x #0
-/
#guard_msgs in
#eval SymM.run' tst1