SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
定理証明支援系 Coq について
- はじめの一歩 -
溝 口 佳 寛
九州大学マス・フォア・インダストリ研究所
2015 年 9 月 12 日 (土)
数学ソフトウェアとフリードキュメント XXI @ 京都産業大学
本スライドは http://bit.ly/coq20150912 にあります.
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 1 / 45
目次
. .
1 はじめに
. .
2 命題論理
シーケント計算
. .
3 Coq による関数プログラムの実装
関数定義と計算
証明付プログラム
. .
4 自然数上の命題
否定の証明
帰納的に定義された命題の否定
5 研究集会紹介など
TPP2014 報告
今後の研究集会予定など
6 まとめ
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 2 / 45
概要
Coq はフランス INRIA で開発された証明支援系です. 誤りがあると大き
な損害や危険が生じる実社会で利用されるプログラムの正当性を限られ
たデータに対する試験実行による確認ではなく, 論理的に完全に証明し検
証するために利用されます. この定理証明支援系は, 数学の定理証明の検
証にも利用することが出来ます. 数学定理証明の検証のために Ssreflect
と MathComp という Coq の拡張が, INRIA 研究所, マイクロソフト研究
所などを中心に開発されています. Coq を用いて構成されている計算機で
検証可能な数学定理の形式証明としては, Gonthier 氏らによる平面グラフ
の四色定理 (2004), 群論の奇数位数定理 (2012), Affeld 氏らによるシャノ
ンの定理 (2012), Mahboubi 氏らによるアペリーの定理 (2014) などの証明
があります. これらの著名な定理の形式証明だけでなく, 基本的な数学証
明のためのライブラリや支援コマンド群が, 近年充実してきています.
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 3 / 45
はじめに
今回のスライドは 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
四色定理
四色定理とは「平面グラフは 4
彩色可能である (隣接頂点を異
なる色で塗る彩色)」という定
理である.
1976 年 Appel と Haken が 1405
個の不可避集合に対してコン
ピュータによる演算を利用して
証明 (IBM-360)
1996 年 Robertson らがアルゴ
リズムとプログラムを改良し
データを公開 (不可避集合を
633 個へ)(Sun Sparc20)
2004 年 Gonthier らが定理証明
支援系 Coq と Ssreflect を用い
た機械検証可能な証明を完成
した.
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 5 / 45
ケプラー予想
ケプラー予想とは「3 次元空間に球を最も密度高く詰める配置は六
方充填配置である」という予想
1998 年, Hales により計算機を使って 5128 個の馴グラフに対応する
充填密度を Java 言語で書かれたプログラムで調べ尽くして証明され
たと言われているが, それが正しいのかは人手では検証出来なかった.
2006 年, Nipkow らが定理証明支援系 Isabell/HOL を用いて場合分け
は, 2771 個の馴グラフで十分であることを示す.
2014 年 8 月, Hales らの Flyspec プロジェクトは定理証明支援系 HOL
Light によるケプラー予想の機械検証可能なすべての証明を発表した.
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 6 / 45
数学定理の形式証明 (論文)
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
数学定理の形式証明 (リンク, 広報, プロジェクト)
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
証明支援系 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
証明支援系 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
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
CoqIDE を使う
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 12 / 45
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
命題論理
Coq による命題論理の証明
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 14 / 45
シーケント計算による証明
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
公理 (初期シーケント)
何も仮定することなく導けるシーケントと初期シーケントと呼ぶ. 初期
シーケントに関連する証明を支援するタクティクは, 以下の 2 つ.
(1)
Γ, A, ¬A False
(2)
Γ, A A
(1) contradiction.
(2) assumption.
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 16 / 45
推論規則
シーケント計算を推論規則を用いて行う. これらの推論規則を用いた証明
を作成するためのタクティクやをコマンドをいくつか列挙する.
Γ, 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
ドモルガンの法則の証明図
(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
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
証明を式で表す (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
証明を式で表す (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
証明を式で表す (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
Coq による関数プログラムの実装
Coq による関数プログラムの実装
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 23 / 45
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
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
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
自然数上の命題
自然数上の命題
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 27 / 45
自然数上の命題 (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
否定の証明 (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
否定の証明 (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
自然数上の命題 (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
自然数上の命題 (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
帰納的に定義された命題の証明
補題
.
.
.
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
帰納的に定義された命題の否定命題の証明 (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
帰納的に定義された命題の否定命題の証明 (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
帰納的に定義された命題の否定命題の証明 (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
研究集会紹介など
研究集会紹介など
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 37 / 45
研究集会 TPP2014
2015 年 12 月 3 日∼12 月 5 日
於. 九州大学西新プラザ
http://imi.kyushu-u.ac.jp/lasm/tpp2014/
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 38 / 45
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
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
研究集会案内 (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
研究集会案内 (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
まとめ
本来, 定理証明器は正しいプログラムを書くために開発されて来た.
数式や論理式で記述されたプログラムの正しさは数式や論理式の正しさ, す
なわち, 数学の命題の正しさに含まれる.
近年は検証の難しい数学の定理の証明検証にも定理証明器が利用されて
いる.
形式証明で利用しやすい命題とそうでない命題がある.
同値, あるいは, 包含関係のある利用しやすい命題が必要.
要. 数学理論の再編成. (Abstract が Nonsense でなくなった!)
証明検証しやすい作法でプログラムを書く事も大切.
基本的にプログラムは実応用のために書かれるものであり, 一般的には, そ
れそのものを楽しんだり, 鑑賞したりするものではない.
数学の証明は鑑賞したり, それそのものを楽しむことも考えられる.
数学とプログラムの中間に定理証明器がいる.
溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 43 / 45
参考文献 (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
参考文献 (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

Weitere ähnliche Inhalte

Was ist angesagt?

Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
 

Was ist angesagt? (20)

いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
ナレッジグラフ入門
ナレッジグラフ入門ナレッジグラフ入門
ナレッジグラフ入門
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
 
書くネタがCoqしかない
書くネタがCoqしかない書くネタがCoqしかない
書くネタがCoqしかない
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
SDL2の紹介
SDL2の紹介SDL2の紹介
SDL2の紹介
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 

Andere mochten auch (9)

証明プログラミング超入門
証明プログラミング超入門証明プログラミング超入門
証明プログラミング超入門
 
Gallinaによる証明駆動開発の魅力
Gallinaによる証明駆動開発の魅力Gallinaによる証明駆動開発の魅力
Gallinaによる証明駆動開発の魅力
 
Coqによる証明駆動開発
Coqによる証明駆動開発Coqによる証明駆動開発
Coqによる証明駆動開発
 
Coqの公理
Coqの公理Coqの公理
Coqの公理
 
Nagoya Matsuri 2013 ぐだぐだAgda
Nagoya Matsuri 2013 ぐだぐだAgdaNagoya Matsuri 2013 ぐだぐだAgda
Nagoya Matsuri 2013 ぐだぐだAgda
 
すごいCoq入門
すごいCoq入門すごいCoq入門
すごいCoq入門
 
Coq関係計算ライブラリの開発と写像の性質の証明
Coq関係計算ライブラリの開発と写像の性質の証明Coq関係計算ライブラリの開発と写像の性質の証明
Coq関係計算ライブラリの開発と写像の性質の証明
 
joi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingjoi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcasting
 
HTTP/2, QUIC入門
HTTP/2, QUIC入門HTTP/2, QUIC入門
HTTP/2, QUIC入門
 

Mehr von Yoshihiro Mizoguchi

Mehr von Yoshihiro Mizoguchi (20)

DockerでAlmaLinux(web, php, pukiwiki)環境構築
DockerでAlmaLinux(web, php, pukiwiki)環境構築DockerでAlmaLinux(web, php, pukiwiki)環境構築
DockerでAlmaLinux(web, php, pukiwiki)環境構築
 
DockerでCoq インストール
DockerでCoq インストールDockerでCoq インストール
DockerでCoq インストール
 
Homebrewによるソフトウェアの実装 (3)
Homebrewによるソフトウェアの実装 (3)Homebrewによるソフトウェアの実装 (3)
Homebrewによるソフトウェアの実装 (3)
 
Homebrewによるソフトウェアの実装 (2)
Homebrewによるソフトウェアの実装 (2)Homebrewによるソフトウェアの実装 (2)
Homebrewによるソフトウェアの実装 (2)
 
Homebrewによるソフトウェアの実装(1)
Homebrewによるソフトウェアの実装(1)Homebrewによるソフトウェアの実装(1)
Homebrewによるソフトウェアの実装(1)
 
Overleafを使った文書作成
Overleafを使った文書作成Overleafを使った文書作成
Overleafを使った文書作成
 
Amazon AWSの使い方
Amazon AWSの使い方Amazon AWSの使い方
Amazon AWSの使い方
 
ShareLaTeXの使い方
ShareLaTeXの使い方ShareLaTeXの使い方
ShareLaTeXの使い方
 
Symbolic Computations in Conformal Geometric Algebra for Three Dimensional O...
Symbolic Computations in Conformal Geometric Algebra for Three Dimensional  O...Symbolic Computations in Conformal Geometric Algebra for Three Dimensional  O...
Symbolic Computations in Conformal Geometric Algebra for Three Dimensional O...
 
Theory of Relational Calculus and its Formalization
Theory of Relational Calculus and its FormalizationTheory of Relational Calculus and its Formalization
Theory of Relational Calculus and its Formalization
 
数式処理ソフトMathematicaで数学の問題を解く
数式処理ソフトMathematicaで数学の問題を解く数式処理ソフトMathematicaで数学の問題を解く
数式処理ソフトMathematicaで数学の問題を解く
 
Verification of a brick wang tiling algorithm
Verification of a brick wang tiling algorithmVerification of a brick wang tiling algorithm
Verification of a brick wang tiling algorithm
 
計算機を用いて数学の問題を解くということ
計算機を用いて数学の問題を解くということ計算機を用いて数学の問題を解くということ
計算機を用いて数学の問題を解くということ
 
A Coq Library for the Theory of Relational Calculus
A Coq Library for the Theory of Relational CalculusA Coq Library for the Theory of Relational Calculus
A Coq Library for the Theory of Relational Calculus
 
Algebras for programming languages
Algebras for programming languagesAlgebras for programming languages
Algebras for programming languages
 
Mac bookでwebサーバーを起動する方法
Mac bookでwebサーバーを起動する方法Mac bookでwebサーバーを起動する方法
Mac bookでwebサーバーを起動する方法
 
有限オートマトンとスティッカー系に関するCoqによる形式証明について
有限オートマトンとスティッカー系に関するCoqによる形式証明について有限オートマトンとスティッカー系に関するCoqによる形式証明について
有限オートマトンとスティッカー系に関するCoqによる形式証明について
 
計算可能実数とは
計算可能実数とは計算可能実数とは
計算可能実数とは
 
複素数・四元数と図形の回転
複素数・四元数と図形の回転複素数・四元数と図形の回転
複素数・四元数と図形の回転
 
グラフデータ構造と5色定理
グラフデータ構造と5色定理グラフデータ構造と5色定理
グラフデータ構造と5色定理
 

Kürzlich hochgeladen

TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
YukiTerazawa
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
koheioishi1
 

Kürzlich hochgeladen (7)

TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 

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

  • 1. 定理証明支援系 Coq について - はじめの一歩 - 溝 口 佳 寛 九州大学マス・フォア・インダストリ研究所 2015 年 9 月 12 日 (土) 数学ソフトウェアとフリードキュメント XXI @ 京都産業大学 本スライドは http://bit.ly/coq20150912 にあります. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 1 / 45
  • 2. 目次 . . 1 はじめに . . 2 命題論理 シーケント計算 . . 3 Coq による関数プログラムの実装 関数定義と計算 証明付プログラム . . 4 自然数上の命題 否定の証明 帰納的に定義された命題の否定 5 研究集会紹介など TPP2014 報告 今後の研究集会予定など 6 まとめ 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 2 / 45
  • 3. 概要 Coq はフランス INRIA で開発された証明支援系です. 誤りがあると大き な損害や危険が生じる実社会で利用されるプログラムの正当性を限られ たデータに対する試験実行による確認ではなく, 論理的に完全に証明し検 証するために利用されます. この定理証明支援系は, 数学の定理証明の検 証にも利用することが出来ます. 数学定理証明の検証のために Ssreflect と MathComp という Coq の拡張が, INRIA 研究所, マイクロソフト研究 所などを中心に開発されています. Coq を用いて構成されている計算機で 検証可能な数学定理の形式証明としては, Gonthier 氏らによる平面グラフ の四色定理 (2004), 群論の奇数位数定理 (2012), Affeld 氏らによるシャノ ンの定理 (2012), Mahboubi 氏らによるアペリーの定理 (2014) などの証明 があります. これらの著名な定理の形式証明だけでなく, 基本的な数学証 明のためのライブラリや支援コマンド群が, 近年充実してきています. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 3 / 45
  • 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. 四色定理 四色定理とは「平面グラフは 4 彩色可能である (隣接頂点を異 なる色で塗る彩色)」という定 理である. 1976 年 Appel と Haken が 1405 個の不可避集合に対してコン ピュータによる演算を利用して 証明 (IBM-360) 1996 年 Robertson らがアルゴ リズムとプログラムを改良し データを公開 (不可避集合を 633 個へ)(Sun Sparc20) 2004 年 Gonthier らが定理証明 支援系 Coq と Ssreflect を用い た機械検証可能な証明を完成 した. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 5 / 45
  • 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. 数学定理の形式証明 (論文) 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. 数学定理の形式証明 (リンク, 広報, プロジェクト) 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. 証明支援系 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. 証明支援系 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. 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. CoqIDE を使う 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 12 / 45
  • 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. 命題論理 Coq による命題論理の証明 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 14 / 45
  • 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. 公理 (初期シーケント) 何も仮定することなく導けるシーケントと初期シーケントと呼ぶ. 初期 シーケントに関連する証明を支援するタクティクは, 以下の 2 つ. (1) Γ, A, ¬A False (2) Γ, A A (1) contradiction. (2) assumption. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 16 / 45
  • 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. ドモルガンの法則の証明図 (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. 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. 証明を式で表す (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. 証明を式で表す (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. 証明を式で表す (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. Coq による関数プログラムの実装 Coq による関数プログラムの実装 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 23 / 45
  • 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. 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. 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. 自然数上の命題 自然数上の命題 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 27 / 45
  • 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. 否定の証明 (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. 否定の証明 (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. 自然数上の命題 (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. 自然数上の命題 (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. 帰納的に定義された命題の証明 補題 . . . 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. 帰納的に定義された命題の否定命題の証明 (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. 帰納的に定義された命題の否定命題の証明 (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. 帰納的に定義された命題の否定命題の証明 (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. 研究集会紹介など 研究集会紹介など 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 37 / 45
  • 38. 研究集会 TPP2014 2015 年 12 月 3 日∼12 月 5 日 於. 九州大学西新プラザ http://imi.kyushu-u.ac.jp/lasm/tpp2014/ 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 38 / 45
  • 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. 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. 研究集会案内 (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. 研究集会案内 (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. まとめ 本来, 定理証明器は正しいプログラムを書くために開発されて来た. 数式や論理式で記述されたプログラムの正しさは数式や論理式の正しさ, す なわち, 数学の命題の正しさに含まれる. 近年は検証の難しい数学の定理の証明検証にも定理証明器が利用されて いる. 形式証明で利用しやすい命題とそうでない命題がある. 同値, あるいは, 包含関係のある利用しやすい命題が必要. 要. 数学理論の再編成. (Abstract が Nonsense でなくなった!) 証明検証しやすい作法でプログラムを書く事も大切. 基本的にプログラムは実応用のために書かれるものであり, 一般的には, そ れそのものを楽しんだり, 鑑賞したりするものではない. 数学の証明は鑑賞したり, それそのものを楽しむことも考えられる. 数学とプログラムの中間に定理証明器がいる. 溝口佳寛 (九大 IMI) 定理証明支援系 Coq について 2015/09/12 43 / 45
  • 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. 参考文献 (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