7. タクティクによる証明(Tactic Proofs)
タクティク言語は証明を構築するための特別な目的のプログラミング言語です。Lean では、 命題 は型によって表現され、証明はこれらの型に住んでいる項です。 命題については 命題の節 で詳しく説明しています 項が型の特定の住人を示すのに便利なように設計されているのに対して、タクティクは型に住人がいることを示すのに便利なように設計されています。この区別が存在するのは、定義では関心のある対象を正確に選び出してプログラムが意図した結果を返すことが重要ですが、証明の irrelevance によってある証明を別の証明の中から選りすぐる 技術的な 理由は無いからです。例えば、ある型の2つの仮定が与えられた時、プログラムは正しい方を使うように注意深く書かなければならない一方で、証明はどちらを使っても構いません。
タクティクは 証明状態 (proof state)を修正する命令型プログラムです。証明状態は ゴール (goal)の順序付けられた列から構成されます。これは住人がいるべき型と一緒になった局所的な仮定のコンテキストです;タクティクはさらなるゴール( サブゴール 、subgoal と呼ばれます)の空である可能性のある列によって 成功 するか、処理が進まない場合は 失敗 します。タクティクがサブゴールが無い状態で成功すれば証明は完了です。1つ以上のサブゴールで成功した場合、それらのサブゴールが証明された時にそのゴールが証明されます。証明状態における最初のゴールを メインゴール (main goal)と呼びます。 ほとんどのタクティクはメインゴールだけに影響しますが、 <;>
や all_goals
などの演算子は、タクティクを多くのゴールに適用するために使用することができ、ブレット・ next
・ case
などの演算子は後続のタクティクの焦点を証明状態の単一のゴールだけに絞ることができます。
裏では、タクティクは 証明項 を構築します。証明項とは、Lean の型理論で書かれた定理の真理について独立にチェック可能な根拠です。各証明は カーネル でチェックされ、独立に実装された外部チェッカで検証できるため、タクティクのバグによる最悪の結果は間違った照明ではなく混乱したエラーメッセージです。タクティク証明の各ゴールは証明項の不完全な部分に対応します。
- 7.1. タクティクの実行(Running Tactics)
- 7.2. 証明状態の読み方(Reading Proof States)
- 7.3. タクティク言語(The Tactic Language)
- 7.4. オプション
-
7.5. タクティクリファレンス(Tactic Reference)
- 7.5.1. 仮定(Assumptions)
- 7.5.2. 量化子(Quantifiers)
- 7.5.3. 関係(Relations)
- 7.5.4. 補題(Lemmas)
- 7.5.5. 偽(Falsehood)
- 7.5.6. ゴールの管理(Goal Management)
- 7.5.7. キャストの管理(Cast Management)
- 7.5.8. 外延性(Extensionality)
- 7.5.9. 単純化(Simplification)
- 7.5.10. 書き換え(Rewriting)
- 7.5.11. 帰納型(Inductive Types)
- 7.5.12. ライブラリ検索(Library Search)
- 7.5.13. ケース分析(Case Analysis)
- 7.5.14. 決定手続き(Decision Procedures)
- 7.5.15. フロー制御(Control Flow)
- 7.5.16. 項エラボレーションのバックエンド(Term Elaboration Backends)
- 7.5.17. デバッグ用ユーティリティ(Debugging Utilities)
- 7.5.18. その他(Other)
-
7.6.
conv
によるターゲットの書き換え(Targeted Rewriting withconv
) - 7.7. カスタムタクティク(Custom Tactics)