コンテンツにスキップ

Chapter 03: tactic を用いた証明

この章では,Lean で証明を書くための基本的な道具を整理します. 前章までに,命題,型,定義,関数型・依存関数型,structure,inductive 型,class などを見ました. ここでは,それらの型の項として証明を構成する方法に焦点を当てます.

Lean では命題は型であり,証明はその型の項です. したがって,「証明する」とは,まずは fun,constructor,関数適用,Eq.refl などを使って証明項を構成することです. by ... による tactic モードは,その証明項をゴールの変化を見ながら組み立てるための書き方です.

特に次の内容を扱います.

  • 証明項としての証明
  • fun,constructor,関数適用,Eq.refl
  • sorry と未完成の証明項
  • by と tactic モードの読み方
  • tactic と証明項の対応
  • exact,assumption,rfl,show,change,dsimp
  • apply,intro,specialize
  • have,suffices
  • rw,simp,simpa
  • calc モード
  • constructor,obtain,rintro,left,right,match,cases,rcases
  • induction
  • congr,ext,funext
  • by_cases,Classical.byContradiction,exfalso,contradiction
  • decide,grind
  • #check,exact?,rw? などの検索支援
  • conv モード
  • Lean における等号の証明パターン
  • 命題外延性,選択,商,Lean の追加原理

ring,nlinarith,linarith などの代数・不等式向け tactic は,次章の Mathlib を使う証明で扱います.

namespace Chapter03