lean4-htt/tests/lean/run/fvarSubset.lean
Leonardo de Moura 9e30ac3265
feat: add Expr.fvarsSubset (#6430)
This PR adds the predicate `Expr.fvarsSet a b`, which returns `true` if
and only if the free variables in `a` are a subset of the free variables
in `b`.
2024-12-20 22:29:47 +00:00

29 lines
905 B
Text

import Lean
open Lean Meta
run_meta do
let nat := mkConst ``Nat
withLocalDeclD `x nat fun x =>
withLocalDeclD `y nat fun y =>
withLocalDeclD `z nat fun z =>
withLocalDeclD `w nat fun w => do
let o := mkNatLit 0
let e1 ← mkAdd x x -- x + x
let e2 ← mkAdd x y -- x + y
let e3 ← mkAdd e2 z -- (x + y) + z
let e4 ← mkAdd e2 e2 -- (x + y) + (x + y)
let e5 ← mkAdd e4 w -- ((x + y) + (x + y)) + w
let e6 ← mkAdd e5 z -- (((x + y) + (x + y)) + w) + z
assert! o.fvarsSubset e6
assert! !e6.fvarsSubset o
assert! o.fvarsSubset e1
assert! !e1.fvarsSubset o
assert! e1.fvarsSubset e1
assert! e1.fvarsSubset e2
assert! e6.fvarsSubset e6
assert! !e2.fvarsSubset e1
assert! e1.fvarsSubset e6
assert! e4.fvarsSubset e6
assert! !e3.fvarsSubset e5
assert! !e5.fvarsSubset e3
assert! e4.fvarsSubset e6