blob: 769abda1517826788bc95769b833d1ef6c2bc1f3 [file] [edit]
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