Lean4 チートシート
情報の抽出
-
ゴールの抽出:
Lean.Elab.Tactic.getMainGoal
これは
let goal ← Lean.Elab.Tactic.getMainGoal
のように使います。 -
メタ変数からの宣言の抽出:
mvarId.getDecl
、ここでmvarId : Lean.MVarId
がコンテキストにあるとします。例えば、ゴールのmvarId
はgetMainGoal
を使用して抽出することができます。 -
メタ変数の型の抽出:
mvarId.getType
、ここでmvarId : Lean.MVarId
がコンテキストにあるとします。 -
メインのゴールの型の抽出:
Lean.Elab.Tactic.getMainTarget
これは
let goal_type ← Lean.Elab.Tactic.getMainTarget
のように使います。これは下記と同じ結果になります。
let goal ← Lean.Elab.Tactic.getMainGoal
let goal_type ← goal.getType
-
ローカルコンテキストの抽出:
Lean.MonadLCtx.getLCtx
これは
let lctx ← Lean.MonadLCtx.getLCtx
のように使います。 -
宣言の名前の抽出:
Lean.LocalDecl.userName ldecl
、ここでldecl : Lean.LocalDecl
がコンテキストにあるとします。 -
式の型の抽出:
Lean.Meta.inferType expr
、ここでexpr : Lean.Expr
がコンテキストにあるとします。これは
let expr_type ← Lean.Meta.inferType expr
のように使います。
式で遊ぶ
-
宣言を式に変換する:
Lean.LocalDecl.toExpr
これは
ldecl : Lean.LocalDecl
がコンテキストにある場合にldecl.toExpr
のように使います。この
ldecl
は例えば、let ldecl ← Lean.MonadLCtx.getLCtx
などで取得されます。 -
2つの式が定義上等しいかどうかのチェック:
Lean.Meta.isDefEq ex1 ex2
、ここでex1 ex2 : Lean.Expr
がコンテキストにあるとします。これはLean.MetaM Bool
を返します。 -
ゴールを閉じる:
Lean.Elab.Tactic.closeMainGoal expr
、ここでexpr : Lean.Expr
がコンテキストにあるとします。
さらなるコマンド
- メタ-sorry:
Lean.Elab.admitGoal goal
、ここでgoal : Lean.MVarId
がコンテキストにあるとします。
表示とエラー
-
通常の用途での「永久な」メッセージの表示:
Lean.logInfo f!"Hi, I will print\n{Syntax}"
-
デバッグ中のメッセージの表示:
dbg_trace f!"1) goal: {Syntax_that_will_be_interpreted}"
. -
例外を投げる:
Lean.Meta.throwTacticEx name mvar message_data
、ここでname : Lean.Name
はタクティクの名前でmvar
はエラーのデータを保持しているとします。これは
Lean.Meta.throwTacticEx `tac goal (m!"unable to find matching hypothesis of type ({goal_type})")
のように用い、ここでフォーマッタm!
は項をより見やすく表示するMessageData
を構築します。
TODO: Add?
- Lean.LocalContext.forM
- Lean.LocalContext.findDeclM?