lean4-htt/tests/lean/bindersAbstractingUnassignedMVars.lean

39 lines
1.4 KiB
Text

import Lean
open Lean
open Lean.Meta
def tst1 : MetaM Unit := do
withLocalDeclD `x (mkConst ``Nat) fun x =>
withLocalDeclD `y (mkConst ``Nat) fun y => do
let e ← mkForallFVars #[y, x] (← mkEq (← mkAdd x (← mkAdd x y)) x)
IO.println (← Meta.ppExpr e)
#eval tst1
def tst2 : MetaM Unit := do
let x ← mkFreshExprMVar (mkConst ``Nat) (userName := `x)
let y ← mkFreshExprMVar (mkConst ``Nat) (userName := `y)
let e ← mkForallFVars #[y, x] (← mkEq (← mkAdd x (← mkAdd x y)) x) (binderInfoForMVars := BinderInfo.default)
IO.println (← Meta.ppExpr e)
#eval tst2
def tst3 : MetaM Unit := do
let x ← mkFreshExprMVar (mkConst ``Nat) (userName := `x)
let y ← mkFreshExprMVar (mkConst ``Nat) (userName := `y)
withLocalDeclD `h (← mkEq x y) fun h => do
let e ← mkForallFVars #[y, x, h] (← mkEq (← mkAdd x (← mkAdd x y)) x)
IO.println (← Meta.ppExpr e)
#eval tst3
def tst4 : MetaM Unit := do
let x ← mkFreshExprMVar (mkConst ``Nat) (userName := `x)
let y ← mkFreshExprMVar (mkConst ``Nat) (userName := `y)
withLocalDeclD `h (← mkEq x y) fun h => do
let z ← mkFreshExprMVar (mkConst ``Nat) (userName := `z)
let e ← mkLambdaFVars #[y, x, h, z] (← mkAdd z (← mkAdd x y)) (binderInfoForMVars := BinderInfo.default)
IO.println (← Meta.ppExpr e)
set_option pp.funBinderTypes true
#eval tst4