コンテンツにスキップ

証明図の読み方

証明図では,横線の上に前提,横線の下に結論を書きます. 右側の \((\to I)\)\((\land E)\) は,使っている推論規則の名前です. ここでの証明図は自然演繹の規則を表示しています. シーケント計算では,\(\Gamma \vdash P\) のようなシーケントそのものを左規則・右規則で変形しますが,この章では論理結合子を導入する規則と,すでにある証明から情報を取り出す除去規則を中心に見ます. たとえば

\[ \frac{\Gamma \vdash P \to Q \quad \Gamma \vdash P}{\Gamma \vdash Q}\;(\to E) \]

は,「同じ仮定の集まり \(\Gamma\) のもとで \(P \to Q\)\(P\) が証明できるなら,\(Q\) が証明できる」と読みます.

ここで \(\Gamma\) は「現在使ってよい仮定や変数の集まり」です. Lean のコードでは,通常 \(\Gamma\) という記号は直接書きません. かわりに,exampletheorem の引数,intro で導入した仮定,cases で場合分けして得た仮定が,Lean のローカルコンテキストとして管理されます. VS Code の Infoview では,ゴールの上に並ぶ変数や仮定が,証明図の \(\Gamma\) に対応します.

たとえば

example (P : Prop) (hP : P) : P := by
  exact hP
では,Lean のローカルコンテキストにはおおよそ P : ProphP : P があります. このうち hP : P は「\(P\) の証明を仮定として使ってよい」という意味で,証明図の \(P \in \Gamma\) に対応します. 述語論理では,x : α のような対象変数もコンテキストに入ります. 証明図では,命題の仮定と対象変数をまとめて \(\Gamma\) と省略している,と考えるとよいです.

intro hP は,含意を示す途中で一時的に hP : P をコンテキストに追加する操作です. 証明図では,これは横線の上側に出てくる \(\Gamma, P \vdash Q\)\(P\) に対応します. 証明が終わると,その仮定は「もし \(P\) ならば」という含意の中に閉じ込められ,結論は \(\Gamma \vdash P \to Q\) になります.