Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

定理証明支援系Coqについて

3,913 views

Published on

数学ソフトウェアとフリードキュメントXXI 講演資料 (2015/9/12)

Published in: Education
  • Be the first to comment

定理証明支援系Coqについて

  1. 1. 定理証明支援系 Coq について - はじめの一歩 - 溝 口 佳 寛 九州大学マス・フォア・インダストリ研究所 2015 年 9 月 12 日 (土) 数学ソフトウェアとフリードキュメント XXI @ 京都産業大学 本スライドは http://bit.ly/coq20150912 にあります. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 1 / 45
  2. 2. 目次 . . 1 はじめに . . 2 命題論理 シーケント計算 . . 3 Coq による関数プログラムの実装 関数定義と計算 証明付プログラム . . 4 自然数上の命題 否定の証明 帰納的に定義された命題の否定 5 研究集会紹介など TPP2014 報告 今後の研究集会予定など 6 まとめ 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 2 / 45
  3. 3. 概要 Coq はフランス INRIA で開発された証明支援系です. 誤りがあると大き な損害や危険が生じる実社会で利用されるプログラムの正当性を限られ たデータに対する試験実行による確認ではなく, 論理的に完全に証明し検 証するために利用されます. この定理証明支援系は, 数学の定理証明の検 証にも利用することが出来ます. 数学定理証明の検証のために Ssreflect と MathComp という Coq の拡張が, INRIA 研究所, マイクロソフト研究 所などを中心に開発されています. Coq を用いて構成されている計算機で 検証可能な数学定理の形式証明としては, Gonthier 氏らによる平面グラフ の四色定理 (2004), 群論の奇数位数定理 (2012), Affeld 氏らによるシャノ ンの定理 (2012), Mahboubi 氏らによるアペリーの定理 (2014) などの証明 があります. これらの著名な定理の形式証明だけでなく, 基本的な数学証 明のためのライブラリや支援コマンド群が, 近年充実してきています. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 3 / 45
  4. 4. はじめに 今回のスライドは http://bit.ly/coq20150912 にあります. 2015 年 2 月に行った Coq チュートリアルのスライドが, http://bit.ly/CoqTutorial20150218 にあります. また, サンプル ファイルが, http://bit.ly/CoqTutorial20150218s にあります. 関連ノート「Coq 練習帳」が github レポジトリ http://bit.ly/CoqExcercise にあります. .pdf ファイルが coqdoc により整形した文書ファイルです. .v ファイルがソースファ イルで, そのまま, Coq で実行可能です. 既存のライブラリから必要な補題を探す Search コマンドについて 紹介出来ていません. 証明を短く書く, 高度なタクティク等の使い方や記法について紹介出 来ていません. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 4 / 45
  5. 5. 四色定理 四色定理とは「平面グラフは 4 彩色可能である (隣接頂点を異 なる色で塗る彩色)」という定 理である. 1976 年 Appel と Haken が 1405 個の不可避集合に対してコン ピュータによる演算を利用して 証明 (IBM-360) 1996 年 Robertson らがアルゴ リズムとプログラムを改良し データを公開 (不可避集合を 633 個へ)(Sun Sparc20) 2004 年 Gonthier らが定理証明 支援系 Coq と Ssreflect を用い た機械検証可能な証明を完成 した. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 5 / 45
  6. 6. ケプラー予想 ケプラー予想とは「3 次元空間に球を最も密度高く詰める配置は六 方充填配置である」という予想 1998 年, Hales により計算機を使って 5128 個の馴グラフに対応する 充填密度を Java 言語で書かれたプログラムで調べ尽くして証明され たと言われているが, それが正しいのかは人手では検証出来なかった. 2006 年, Nipkow らが定理証明支援系 Isabell/HOL を用いて場合分け は, 2771 個の馴グラフで十分であることを示す. 2014 年 8 月, Hales らの Flyspec プロジェクトは定理証明支援系 HOL Light によるケプラー予想の機械検証可能なすべての証明を発表した. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 6 / 45
  7. 7. 数学定理の形式証明 (論文) G. Gonthier, Formal Proof―The Four-Color Theorem. Notices of the American Mathematical Society, 55(11), 1382―1393, 2008. http://www.ams.org/notices/200811/tx081101382p.pdf R. Affeldt and M. Hagiwara, Formalization of Shannon’s Therems in SSReflect-Coq, Proc. 3rd Conference on Interactive Theorem Proving, LNCS 7406, 233―249, 2012. G. Gonthier, et al., A Machine-Checked Proof of the Odd Order Theorem, Proc. 4th Conference on Interactive Theorem Proving, LNCS 7998, 163―179, 2013. https://hal.inria.fr/hal-00816699/file/main.pdf F. Chyzak, A. Mahboubi et.al, A Computer-Algebra-Based Formal Proof of the Irrationality of ζ (3), Proc. 5th International Conference on Interactive Theorem Proving, LNCS 8558, 2014, https://hal.inria.fr/hal-00984057. T. Hales, Dense Sphere Packings : A blueprint for formal proofs, Cambridge University Press, 2012. (The Kepler Conjecture) J.Avigad and J.Harrison, Formally Verified Mathematics, Communications of the ACM, Vol.57(4), 2014. (解説) 溝口佳寛, 田上真, ケプラー予想の計算機による証明と検証について, 数学セミナー, 2014 年 12 月号. (解説) 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 7 / 45
  8. 8. 数学定理の形式証明 (リンク, 広報, プロジェクト) SSreflect in the world, http://coqfinitgroup.gforge.inria.fr/ssreflect world.html Coq Proof of the Four Color Theorem, 2006/04/26, http://bit.ly/FourColorTheorem Feit thompson proved in Coq, 2012/09/20, http://bit.ly/FeitThompson The announcement of the completion of the Flyspec project, 2014/8/10. http://bit.ly/Flyspeck (The Kepler Conjecture) Univalent Foundations of Mathematics, 2012,2013. http://bit.ly/UnivalentFoundations (Homotopy Type Theory) Computing close approximations of Pi, http://www-sop.inria.fr/members/Yves.Bertot/proofs.html 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 8 / 45
  9. 9. 証明支援系 Coq のインストール 本スライドの例題は Coq8.4pl6, ssreflect-1.5rc1, mathcomp-1.5rc1 で確認されて います. http://bit.ly/CoqTutorial20150218s 現在, Coq8.5beta2, ssreflect-1.5.coq85beta2, mathcomp-1.5.coq85beta2 が公表 されています. https://coq.inria.fr/coq-85, http://ssr.msr-inria.inria.fr/FTP/ 最近は, opam によ るライブラリ管理が進んできています. http://coq.io/opam/ Mathlibre (Linux) ライブ DVD に, coq8.4pl3, ssreflect1.5, mathcomp1.5 が入っています. http://mirror.math.kyushu-u.ac.jp/mathlibre/mathlibre-debian-amd64-20150303-ja.iso Windows Coq8.5beta2,ssr-mathcomp-1.5 のインストーラがあります. https://coq.inria.fr/distrib/V8.5beta2/files/coq-installer-8.5beta2.exe http://ssr.msr-inria.inria.fr/FTP/ssr-mathcomp-installer-1.5coq8.5beta2.exe MacOSX CoqIDE8.5beta1 のパッケージには ssr-mathcomp-1.5 が入っています. https://coq.inria.fr/distrib/V8.5beta1/files/coqide-8.5beta1 MathComp-1.5.dmg 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 9 / 45
  10. 10. 証明支援系 Coq を使うには Coq は基本的に入出力型のインタプリタで使います. 証明された命題や定 義された関数はコンパイルして, 随時読み込んで参照することもできます. ソースファイルの属性は .v, ライブラリの属性は .vo です. まずはコマンドライン版の coqtop でバージョンを確認出来ます. coqtop -v で coq のバージョンを確認出来ます. Compute 1+1. を実行して動作確認します. 入力行の最後はピリオド (.) で終わります. Require Import Ssreflect.ssreflect. 読み込み時のメッセージ で ssreflect のバージョンを確認出来ます. Require Import MathComp.div. が出来ないときは, MathComp がイ ンストールされていません. GUI インターフェースは CoqIDE や Emacs 上で動く ProofGeneral などが あります. 操作 coqtop CoqIDE ProofGeneral 入力 改行キー ↓アイコン Ctrl+c n 戻る undo 1. ↑アイコン Ctrl+c u 指定場所まで評価 入力を続ける →アイコン Ctrl+c 改行 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 10 / 45
  11. 11. coqtop を使う ym$ coqtop Welcome to Coq 8.4pl6 (September 2015) Coq < Compute 1+1. = 2 : nat Coq < Require Import Ssreflect.ssreflect. Small Scale Reflection version 1.5 loaded. Copyright 2005-2012 Microsoft Corporation and INRIA. Distributed under the terms of the CeCILL-B license. [Loading ML file ssreflect.cmxs ... done] Coq < Require Import MathComp.div. [Loading ML file z_syntax_plugin.cmxs ... done] [Loading ML file quote_plugin.cmxs ... done] [Loading ML file newring_plugin.cmxs ... done] Coq < Compute (5 %% 2) + (5 %/ 2). = 3 : nat Coq < [Ctrl + D] 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 11 / 45
  12. 12. CoqIDE を使う 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 12 / 45
  13. 13. ProofGeneral を使う メニュー ProofGenelal → Options → Display → Use Three Panes と して, 3 画面分割を使ってます. 将軍の顔が怖い人は画像を差し替えます. /opt/local/share/ProofGeneral/images/ProofGenelal.jpg https://github.com/yoshihiro503/generaltan 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 13 / 45
  14. 14. 命題論理 Coq による命題論理の証明 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 14 / 45
  15. 15. シーケント計算による証明 Pi (i = 1, 2, · · · , n), Q を論理式とするとき, P1, P2, · · · , Pn Q をシーケントと呼ぶ. ここで, Pi を仮定, Q を結論 (goal) と呼ぶことにす る. シーケントに推論規則を適用して証明を行う. 具体的には公理に対応 するシーケントから推論規則を有限回適用して導かれるシーケントを証 明可能 (provable) と言う. シーケントの例 言葉で書いた意味 P1 P1 ∨ P2 P1 を仮定して, Q = P1 ∨ P2 は正しいか? P2 P1 ∧ P2 P1 を仮定して, Q = P1 ∧ P2 は正しいか? P1, P2 P1 ∧ P2 P1 と P2 を仮定して, Q = P1 ∧ P2 は正しいか? ※ (注意) 「正しい」と「証明可能」の意味. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 15 / 45
  16. 16. 公理 (初期シーケント) 何も仮定することなく導けるシーケントと初期シーケントと呼ぶ. 初期 シーケントに関連する証明を支援するタクティクは, 以下の 2 つ. (1) Γ, A, ¬A False (2) Γ, A A (1) contradiction. (2) assumption. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 16 / 45
  17. 17. 推論規則 シーケント計算を推論規則を用いて行う. これらの推論規則を用いた証明 を作成するためのタクティクやをコマンドをいくつか列挙する. Γ, A ∆ (1) Γ A → ∆ Γ A → False (2) Γ ¬A Γ A Γ B (3) Γ A ∧ B Γ A (4) Γ A ∨ B Γ B (5) Γ A ∨ B Γ A → B → ∆ (6) Γ (A ∧ B) → ∆ Γ A → ∆ Γ B → ∆ (7) Γ (A ∨ B) → ∆ Γ (¬A ∨ B) → ∆ (8) Γ (A → B) → ∆ (1) move => a. (2) rewrite not. (3) apply conj. (4) left. (5) right. (6) elim. (7) elim. (8) move/imply_to_or (8) のみ, 古典論理 (Logic.Classical_Prop) ライブラリが必要. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 17 / 45
  18. 18. ドモルガンの法則の証明図 (1) ¬P, P, Q False (2) ¬P P → Q → False (3) ¬P ¬(P ∧ Q) (4) ¬P → ¬(P ∧ Q) (1) ¬Q, P, Q False (2) ¬Q P → Q → False (3) ¬Q ¬(P ∧ Q) (4) ¬Q → ¬(P ∧ Q) (5) (¬P ∨ ¬Q) → ¬(P ∧ Q) (1) contradiction. (2) move => p q. (3) elim. (4) move => np. (5) elim. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 18 / 45
  19. 19. Coq による証明の例 (ドモルガンの法則) Variables P Q:Prop. Goal (˜ P / ˜Q) -> ˜ (P / Q). Proof. elim. (* (5) ここで 2 つのゴールに別れる *) move => np. (* (4) 左側の証明始め *) elim. (* (3) *) move => p q. (* (2) *) contradiction. (* (1) ここで左側の証明が終わり *) move => nq. (* (4) 右側の証明始め *) elim. (* (3) *) move => p q. (* (2) *) contradiction. (* (1) ここで右側の証明が終わる *) Restart. (* 実は, intuition タクティクだけで証明出来る. *) intuition. Qed. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 19 / 45
  20. 20. 証明を式で表す (1) 命題 P の証明が p であることを p : P と書くことにする. シーケント P1, P2, · · · , Pn Q に対しても証明付で, p1 : P1, p2 : P2, · · · , pn : Pn Q と書く, 証明を式で構成するとは結論 Q の証明を pi らの式で記述するこ とである. 例題 . 証明付のシーケント p : P, H : P → Q Q に対して, (H p) : Q と考える. すなわち, (H p) が命題 Q の証明である. (H p) を関数適用 H(p) と考えると, 型 P の元 p と型 P → Q の関数 H か ら型 Q の元 H(p) を得ることに対応している. この証明と関数の対応が Curry-Howard の同型対応. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 20 / 45
  21. 21. 証明を式で表す (2) 例題 . . 証明付のシーケント nq : Q → False, H : P → Q, p : P False に対して, False の証明 (nq (H p)) : False が得られる. Coq では apply (nq (H p)). で証明出来る. (apply (nq (H p))) nq : Q → False, H : P → Q, p : P False (move ⇒ p) nq : Q → False, H : P → Q P → False (move ⇒ H) nq : Q → False (P → Q) → (P → False) (move ⇒ nq) (Q → False) → (P → Q) → (P → False) (rewrite /not) (¬Q) → (P → Q) → (¬P) 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 21 / 45
  22. 22. 証明を式で表す (3) proj1 : P ∧ Q → P, proj1 : P ∧ Q → Q を知っているとすると, 例題 . . 1 np : P → False, pq : P ∧ Q False に対して, (np (proj1 pq)) : False である. 2 nq : Q → False, pq : P ∧ Q False に対して, (nq (proj2 pq)) : False である. さらに, 論理和に関する証明 or_intro : ((¬P) → ¬(P∧Q)) → ((¬Q) → ¬(P∧Q)) → ((¬P∨¬Q) → ¬(P∧Q)) を使って, (or_intro (np (proj1 pq)) (nq (proj2 pq))) : (¬P ∨ ¬Q) → ¬(P ∧ Q) がドモルガンの法則の証明に対応する式である. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 22 / 45
  23. 23. Coq による関数プログラムの実装 Coq による関数プログラムの実装 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 23 / 45
  24. 24. Coq による関数定義 2 つの関数 f, g を以下のように定義します. Fixpoint f (n:nat) := match n with | O = 0 | p.+1 = (p.+1) + (f p) end. Definition g (n:nat) := ((n * (n.+1)) %/ 2). 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 24 / 45
  25. 25. Coq による関数計算 関数の値等は, Compute コマンドで計算可能です. Compute (g 3). = 6 : nat Compute (mkseq f 5). = [:: 0; 1; 3; 6; 10] : seq nat 有限個の n に対する性質は直接計算して証明します. Lemma lemma0: forall n:nat, n 4 - (f n) 10. Proof. case = [ |[ |[ |[ | ]]]] //. Qed. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 25 / 45
  26. 26. Coq による関数の証明 全ての自然数 n に対する性質を数学的帰納法で証明できます. 定理 . . sigma: forall n:nat, (f n) = (g n). Proof. elim = [|n H]//. simpl; rewrite H /g. replace (n.+1 * (n.+2)) with ((n.+1) * 2 + (n * (n.+1))) by ring. by rewrite (divnDl (n*n.+1) (lemma3 n)) lemma2. Qed. Lemma lemma2: forall n:nat, (n.+1 * 2) %/ 2 = n.+1. Lemma lemma3: forall n:nat, 2 %| (n.+1 * 2). Lemma lemma4: forall n:nat, n.+1 + (n * n.+1) %/ 2 = (n.+1 * n.+2) %/ 2. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 26 / 45
  27. 27. 自然数上の命題 自然数上の命題 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 27 / 45
  28. 28. 自然数上の命題 (1) 与えられた自然数 x に対して, 真 (True) か偽 (False) を返す関数の例として eqone を考える. Definition eqone (x:nat):Prop := match x with | 0 = False | n.+1 = match n with | 0 = True | _.+1 = False end end. Compute [:: (eqone 0); (eqone 1); (eqone 2); (eqone 3)]. = [:: False; True; False; False] 真偽を返す関数は自然数上の命題でもあり, 命題 (eqone x) は, x = 1 のときだけ真で x 1 のときは偽である. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 28 / 45
  29. 29. 否定の証明 (1) Coq では否定は False を導く命題として定義される. ¬P は P → False と考える. False は何でも証明出来る命題として定義されている. 何でも証明できるという証明の名前は False_rect である. (False_rect P) は False → P の証明である. Lemma not_eqone_zero: (eqone 0) - False. Proof. compute. apply (False_rect False). Qed. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 29 / 45
  30. 30. 否定の証明 (2) 命題 1 0 は, (1 = 0) → False である. (eqone 1) は計算で証明出来る. 仮定の 1 = 0 から, (eqone 1) → (eqone 0) が証明出来る. (eqone 0) → False を not_eqone_zero で証明した. 従って, (1 = 0) → False が証明出来る. Lemma one_is_not_zero: (1 = 0) - False. Proof. have: (eqone 1). compute. apply I. move = H1 H2; move: H1. rewrite H2. apply not_eqone_zero. Qed. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 30 / 45
  31. 31. 自然数上の命題 (2) 関数 notone を以下のようにする. Definition notone (x:nat):Prop := match x with | 0 = True | n.+1 = match n with | 0 = False | _.+1 = True end end. このとき, 補題 ∀x, ¬(eqone x) ↔ (notone x) は殆ど計算だけで証明出来る. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 31 / 45
  32. 32. 自然数上の命題 (3) 自然数上の命題は真偽を計算する関数で与えるだけでなく 帰納的な定義も出来る. Inductive even: nat - Prop := |even_0: even 0 |even_SS: forall n, (even n) - (even (n.+2)). 言葉で書けば, 1. 0 は偶数である. 2. n が偶数ならば, n + 2 は偶数である. で, 命題「x は偶数である」を定義出来る. 1. の証明の名前が even_0, そして, 2. の証明の名前が even_SS である. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 32 / 45
  33. 33. 帰納的に定義された命題の証明 補題 . . . 2 は偶数である を証明する. (even_SS n): (even n) - (even (n.+2)) なのと, 0. + 2 = 2 の計算が出来るので, (even_SS 0) は (even 0) - (even 2) の証明である. (even 0) は even_0 で証明されているので, ((even_SS 0) even_0) が, (even 2) の証明になる. Lemma two_is_even: (even 2). Proof. apply (even_SS 0 even_0). Qed. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 33 / 45
  34. 34. 帰納的に定義された命題の否定命題の証明 (1) 補題 . .1 は偶数でない の証明を考える. ¬(even 1) は, (even 1) → False である. (even n) を帰納的に証明する証明 even_0, even_SS のように, ¬(even n) を帰納 的に構成する odd_1, odd_SS のような証明を準備して計算で証明する方 針も考えられる. 偶数の集合の場合は補集合である奇数の集合を帰納的に 定義出来るが, 一般には任意の帰納的可算集合の補集合を帰納的可算集合 として定義することは出来ない. 任意の帰納的可算集合が帰納的集合であるわけではない. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 34 / 45
  35. 35. 帰納的に定義された命題の否定命題の証明 (2) 帰納的に定義された命題 even を関数で定義された命題 NE1 と関係付ける ことにより, 計算による性質の証明が可能になる. Lemma even_is_notone: forall n, (even n) - (notone n). Proof. move = n. case. (* even の構成の帰納法で証明 *) compute. (* (even 0) のときは計算で明らか *) apply I. move = n0 H. compute. (* (even (n.+2)) のときも計算で明らか *) apply I. Qed. (even n) を仮定した命題は, even の構成の帰納法によって証明する. こ のとき, (notone n.+2)=True は計算で証明出来ることに注意する. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 35 / 45
  36. 36. 帰納的に定義された命題の否定命題の証明 (3) (notone 1) → False は計算で証明出来るので先の補題 even_is_notone で n = 1 と置いた場合を考えて, (even 1) → False が 証明出来る. Lemma one_is_not_even: (even 1) - False. Proof. apply (even_is_notone 1). Qed. 実は, inversion という Tactic は, notone のような関数を自動生成して くれる. Lemma one_is_not_even_with_inversion: (even 1) - False. Proof. move = H. inversion H. Qed. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 36 / 45
  37. 37. 研究集会紹介など 研究集会紹介など 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 37 / 45
  38. 38. 研究集会 TPP2014 2015 年 12 月 3 日∼12 月 5 日 於. 九州大学西新プラザ http://imi.kyushu-u.ac.jp/lasm/tpp2014/ 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 38 / 45
  39. 39. TPPmark2014 (1) Tppmark:さまざまな証明支援系で形式証明を書いて比べるという大会 Let N = {0, 1, 2, 3, · · · } be the set of natural numbers, p ∈ N and q ∈ N. We denote (pmod q) = r if and only if there exist k ∈ N and r ∈ N such that p = kq + r and 0 r q. Further, we denote (q | p) if and only if (pmod q) = 0. Prove the following questions: (i) For any a ∈ N, (a2 mod 3) = 0 or (a2 mod 3) = 1. (ii) Let a ∈ N, b ∈ N and c ∈ N. If a2 + b2 = 3c2 then (3 | a), (3 | b) and (3 | c). (iii) Let a ∈ N, b ∈ N and c ∈ N. If a2 + b2 = 3c2 then a = b = c = 0. 高校数学の論証問題 (九大入試問題) を出題したところ, 16 件 (Coq/Ssreflect 11 件, HOL 2 件, Isabelle 1 件, Mizar 1 件, Agda 1 件) の応 募がありました. https://github.com/KyushuUniversityMathematics/TPP2014/wiki 参考: http://kaisoku.kawai-juku.ac.jp/nyushi/honshi/14/ky1.html 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 39 / 45
  40. 40. TPPmark2014 (2) 本問題の Coq/Ssreflect による解答例を紹介しながら, 実際に定理証明支 援系を動かしてみたいと思います. 補題 three (場合分けの証明を見る) 補題 asqa0 (数学的帰納法の簡単な場合 (case)) 補題 absqab0m (場合分けを力技で解く) 補題 induct0 (数学的帰納法の復習) 補題 defPc0 (既証明の補題たちを使って証明) 以下の github レポジトリにある「Coq 練習帳」第 4 章に解説しました. https://github.com/KyushuUniversityMathematics/CoqExamples/tree/master/CoqExercise .pdf ファイルが coqdoc により整形した文書ファイルです. .v ファイルがソースファイルで, そのまま, Coq で実行可能です. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 40 / 45
  41. 41. 研究集会案内 (1) TPP2015 (Theorem Proving and Provers meetting) 2015 年 9 月 16 日 (水) 15:00 ∼ 9 月 17 日 (木) 15:45. 神奈川大学湘南ひらつかキャンパス 11 号館サーカムホール https://sites.google.com/a/progsci.info.kanagawa-u.ac. jp/tpp2015/ 多くのみなさまのご参加をお待ちしています. FMI2015 (Forum Mathematics for Industry) 2015 年 10 月 26 日 (月)∼10 月 30 日 (金) 九州大学伊都キャンパス 理学系総合研究棟 4 階オーディトリアム http://fmi2015.imi.kyushu-u.ac.jp/program.html 10 月 29 日 (木) 午前に注目! Algebraic Foundations for Program Logics (Marcel Jacson) Basic Research for the Patient-Specific Surgery Support System (Kazushi Ahara) Using Process Algebra to Design Better Protocols (Peter H¨ofner) 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 41 / 45
  42. 42. 研究集会案内 (2) Workshop on Formalization of Applied Mathematical Systems (A joint project of Chiba University and the University of Hawai‘i) University of Hawai‘i, 2015/9/25 - 2015/10/2. http://math.hawaii.edu/∼jb/workshop2/ SCSS2016 (Symbolic Computation in Software Science) Ochanomizu University, 2016/3/28 - 2016/3/31. (Submission deadline 2015/11/13) http://www.i-eos.org/conferences/SCSS2016/ 九大山の家ソフトウェア合宿 大分県九大久重研修所, 2015/10/10 - 2015/10/12. http://bit.ly/QdaiSoftware2015 問合せ先: ym@imi.kyushu-u.ac.jp 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 42 / 45
  43. 43. まとめ 本来, 定理証明器は正しいプログラムを書くために開発されて来た. 数式や論理式で記述されたプログラムの正しさは数式や論理式の正しさ, す なわち, 数学の命題の正しさに含まれる. 近年は検証の難しい数学の定理の証明検証にも定理証明器が利用されて いる. 形式証明で利用しやすい命題とそうでない命題がある. 同値, あるいは, 包含関係のある利用しやすい命題が必要. 要. 数学理論の再編成. (Abstract が Nonsense でなくなった!) 証明検証しやすい作法でプログラムを書く事も大切. 基本的にプログラムは実応用のために書かれるものであり, 一般的には, そ れそのものを楽しんだり, 鑑賞したりするものではない. 数学の証明は鑑賞したり, それそのものを楽しむことも考えられる. 数学とプログラムの中間に定理証明器がいる. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 43 / 45
  44. 44. 参考文献 (1) お薦め! Reynald Affeldt, 定理証明支援系 Coq 入門, 日本ソフトウェア科学会 チュートリアル, 2014. https://staff.aist.go.jp/reynald.affeldt/ssrcoq/ Adam Chlipala, Certified Programming with Dependent Types, MIT Press, 2013. http://adam.chlipala.net/cpdt/ G.Gonthier et.al., A Small Scale Reflection Extension for the Coq system, Inria Research Report, 2014. https://hal.inria.fr/inria-00258384/en G.Gonthier, R. St´ephane Le, An Ssreflect Tutorial, 2009. https://hal.inria.fr/inria-00407778/file/RT-367.pdf The Coq Development Team, The Coq Proof Assistant Reference Manual, Ver.8.4pl5, 2014. https://coq.inria.fr/distrib/V8.4pl5/files/Reference-Manual.pdf 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 44 / 45
  45. 45. 参考文献 (2) TPP2014, 高信頼な理論と実装のための定理証明および定理証明器, 九州大学, 2014. http://imi.kyushu-u.ac.jp/lasm/tpp2014/index ja.html (報告書 PDF あり) Y. Bertot, Interactive Theorem Proving and Program Development, Springer, 2004. (Coq’Art) The Univelent Foundations Program, Homotopy Type Theory: Univalent Foundations of Mathematics, http://homotopytypetheory.org/book, Institute for Advanced Study, 2013. 溝口佳寛, 田上真, ケプラー予想の計算機による証明と検証について, 数学セミナー 12 月号, 48–54, 2014. http://bit.ly/KeplerConjecture (関連文献等のまとめ) 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 45 / 45

×