━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 証明支援システム Coq で学ぶ証明法 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
証明支援システムでは,数学的な主張やその証明を専用の言語で書くと, 証明の誤りを自動検出できる.「数理論理学」の講義で扱った証明を 証明支援システム Coq 用に記述した例を紹介する. ●自然演繹による証明 (述語論理) 証明支援システム Coq の核となる形式体系は,自然演繹に深い関連をもつため, 自然演繹の証明の学習にも Coq を使える. 簡単な例として,『はじめての数理論理学』 p.5 の自然演繹による証明を取り上げる.この証明に対応する Coq 記述の例を以下に示す. ------------------------------------------------------------ Require Import Utf8. Parameter (U : Type) (P Q : U→Prop). Theorem natural_deduction : (∃x, (P x ∧ ¬ Q x)) → ¬ (∀x, (P x → Q x)). Proof. intro H1. (* →I *) intro H2. (* →I *) elim H1; intros a H3. (* ∃E *) pose (C1 := proj1 H3). (* ∧E1 *) pose (C2 := H2 a). (* ∀E *) pose (C3 := C2 C1). (* →E *) pose (C4 := proj2 H3). (* ∧E2 *) pose (C5 := C4 C3). (* →E *) exact C5. Qed. ------------------------------------------------------------ 証明を構成するための命令を Proof. と Qed. の間に書く. 対応する自然演繹の規則名を (* *) 内の注釈に示した. 推論規則の適用により,仮定 (hypotheses) H1〜H3 を設けたり, 結論 (conclusions) C1〜C5 を導いたりしている. この記述を開発環境 CoqIDE で対話的に作成・検証する様子を次の図に示す.
画面左が命題や証明の記述,画面右上が規則適用で得られた仮定や結論の論理式である. 冒頭に示した証明図と対応させると,証明図の下から3段積み上げて仮定を三つ設けて (7〜9行目),仮定から矛盾を導いた(10〜14行目)結果が表示されていることが分かる. 使った規則だけを示して途中結果を省くことで,簡潔な証明も書ける. ------------------------------------------------------------ Theorem natural_deduction_simple {U} (P Q : U->Prop) : (exists x, (P x /\ ~ Q x)) -> ~ (forall x, (P x -> Q x)). Proof. intros H1 H2. elim H1. intros a [H3P H3Q]. elim H3Q. apply H2. exact H3P. Qed. ------------------------------------------------------------ 命題の証明が簡単なら,自動証明の機能を使って正しさを確認できる. 上記の命題の場合,Proof. と Qed. の間に firstorder. と書くと自動証明できる. ここに載せたコードや以下の資料を参考に証明支援システムを実際に動かして, 体験しながら証明について深く学んでほしい.数理論理学の確認問題を Coq 用に 記述するのもよい練習になる. ●参考資料 *Webサイト ・The ROCQ Proof Assistant (ROCQ は Coq の新名称) https://rocq-prover.org/ ・jsCoq (Coq のオンライン環境) https://coq.vercel.app/ https://coq.vercel.app/scratchpad.html ・The ROCQ Reference Manual (ROCQ は Coq の新名称) https://rocq-prover.org/refman/ *文献 ・"Interactive Theorem Proving and Program Development", Y. Bertot and P. Casteran, Springer 2004. https://www.springer.com/jp/book/9783540208549 ・『Coq/SSReflect/MathComp による定理証明』, 萩原学,アフェルト・レナルド,森北出版,2018. https://www.morikita.co.jp/books/book/3287 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 授業のホームページ 山田 俊行 https://www.cs.info.mie-u.ac.jp/~toshi/