過去記事:
「Leanタクティク」は、実際のLeanのタクティクを話題にする。
参考URL:
- https://www.ma.imperial.ac.uk/~buzzard/xena/formalising-mathematics-2022/Part_C/Part_C.html ケビン・バザードのドキュメント
ケビン・バザードのチートシート(不適切語を修正、順序変更):
Form of proposition | In the target? | Hypothesis named h? |
---|---|---|
P → Q | intro hP で分解 | apply h で利用 |
true | trivial で分解 | (can’t be used) |
false | (can’t be used) | exfalso, exact h or cases h を使用 |
¬P | intro hP で分解 | apply h (if goal is false) を使用 |
P ∧ Q | split ☓ | cases h with hP hQ ? |
P ↔ Q | split ☓ | cases h or rw h で利用 |
P ∨ Q | left or right で分解 | cases h with hP hQ で使用 |
∀ (a : X), ... | intro x で分解 | specialize h x |
∃ (a : X), ... | use x で分解 | cases h with x hx |
Lean 4で変わってしまい使えないものがある。ハッキリしているのは☓が付いている。
- P∧Q は、apply And.intro で分解
- P ↔ Q は、apply Iff.intro で分解
あるパターンの論理式がターゲットに出現したときにタクティクで分解する。分解した後の質問シーケントでは、論理記号が消えているので、導入規則の逆を実行している。
あるパターンの論理式がコンテキストに出現したときは名前を持っている。名前を特定して利用する。apply h で、h を使ったモーダスポネンスを逆行する。P → Q ... |-? Q ~(-)⇒ P → Q ... |-? P 順行なら P → Q ... |-! P ~(+)⇒ P → Q ..., P |! ~(-)⇒ P → Q ..., P |-! Q 。
intro
引数なしの intro でコンテキスト側に自動命名された宣言〈仮説〉が出現する。自動の名前は、英字+ラテンクロス+上付き番号。
simp [f]
関数 f の定義を使って展開〈フォールド〉する。定義は、項の simplification rule / unfolding rule として使える。定義の右辺式を右辺式で置き換えるだけ。simpしたら複雑になることもある。