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つの式が definitionally equal かどうかのチェック:
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?