39 lines
1.4 KiB
Text
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
|