SlideShare a Scribd company logo
1 of 45
Download to read offline
定理証明支援系 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

More Related Content

What's hot

最適化超入門
最適化超入門最適化超入門
最適化超入門Takami Sato
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
文字列検索のいろいろ
文字列検索のいろいろ文字列検索のいろいろ
文字列検索のいろいろKazuma Mikami
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
強化学習その2
強化学習その2強化学習その2
強化学習その2nishio
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
証明プログラミング超入門
証明プログラミング超入門証明プログラミング超入門
証明プログラミング超入門Kyoko Kadowaki
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
劣モジュラ最適化と機械学習1章
劣モジュラ最適化と機械学習1章劣モジュラ最適化と機械学習1章
劣モジュラ最適化と機械学習1章Hakky St
 
Transformer メタサーベイ
Transformer メタサーベイTransformer メタサーベイ
Transformer メタサーベイcvpaper. challenge
 
遺伝的アルゴリズム (Genetic Algorithm)を始めよう!
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
遺伝的アルゴリズム (Genetic Algorithm)を始めよう!Kazuhide Okamura
 
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端Takuya Akiba
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 

What's hot (20)

最適化超入門
最適化超入門最適化超入門
最適化超入門
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
文字列検索のいろいろ
文字列検索のいろいろ文字列検索のいろいろ
文字列検索のいろいろ
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
Coqチュートリアル
CoqチュートリアルCoqチュートリアル
Coqチュートリアル
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
強化学習その2
強化学習その2強化学習その2
強化学習その2
 
ドロネー三角形分割
ドロネー三角形分割ドロネー三角形分割
ドロネー三角形分割
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
証明プログラミング超入門
証明プログラミング超入門証明プログラミング超入門
証明プログラミング超入門
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
劣モジュラ最適化と機械学習1章
劣モジュラ最適化と機械学習1章劣モジュラ最適化と機械学習1章
劣モジュラ最適化と機械学習1章
 
Transformer メタサーベイ
Transformer メタサーベイTransformer メタサーベイ
Transformer メタサーベイ
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
遺伝的アルゴリズム (Genetic Algorithm)を始めよう!
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
遺伝的アルゴリズム (Genetic Algorithm)を始めよう!
 
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 

Viewers also liked

Gallinaによる証明駆動開発の魅力
Gallinaによる証明駆動開発の魅力Gallinaによる証明駆動開発の魅力
Gallinaによる証明駆動開発の魅力Hiroki Mizuno
 
Coqによる証明駆動開発
Coqによる証明駆動開発Coqによる証明駆動開発
Coqによる証明駆動開発Hiroki Mizuno
 
よくわかるCoqプログラミング
よくわかるCoqプログラミングよくわかるCoqプログラミング
よくわかるCoqプログラミングReal_analysis
 
Nagoya Matsuri 2013 ぐだぐだAgda
Nagoya Matsuri 2013 ぐだぐだAgdaNagoya Matsuri 2013 ぐだぐだAgda
Nagoya Matsuri 2013 ぐだぐだAgdaSosuke MORIGUCHI
 
Coq関係計算ライブラリの開発と写像の性質の証明
Coq関係計算ライブラリの開発と写像の性質の証明Coq関係計算ライブラリの開発と写像の性質の証明
Coq関係計算ライブラリの開発と写像の性質の証明Yoshihiro Mizoguchi
 
書くネタがCoqしかない
書くネタがCoqしかない書くネタがCoqしかない
書くネタがCoqしかないMasaki Hara
 
joi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingjoi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingMasaki Hara
 

Viewers also liked (10)

Gallinaによる証明駆動開発の魅力
Gallinaによる証明駆動開発の魅力Gallinaによる証明駆動開発の魅力
Gallinaによる証明駆動開発の魅力
 
Coqによる証明駆動開発
Coqによる証明駆動開発Coqによる証明駆動開発
Coqによる証明駆動開発
 
よくわかる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関係計算ライブラリの開発と写像の性質の証明
 
書くネタが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入門
 

More from Yoshihiro Mizoguchi

DockerでAlmaLinux(web, php, pukiwiki)環境構築
DockerでAlmaLinux(web, php, pukiwiki)環境構築DockerでAlmaLinux(web, php, pukiwiki)環境構築
DockerでAlmaLinux(web, php, pukiwiki)環境構築Yoshihiro Mizoguchi
 
DockerでCoq インストール
DockerでCoq インストールDockerでCoq インストール
DockerでCoq インストールYoshihiro Mizoguchi
 
Homebrewによるソフトウェアの実装 (3)
Homebrewによるソフトウェアの実装 (3)Homebrewによるソフトウェアの実装 (3)
Homebrewによるソフトウェアの実装 (3)Yoshihiro Mizoguchi
 
Homebrewによるソフトウェアの実装 (2)
Homebrewによるソフトウェアの実装 (2)Homebrewによるソフトウェアの実装 (2)
Homebrewによるソフトウェアの実装 (2)Yoshihiro Mizoguchi
 
Homebrewによるソフトウェアの実装(1)
Homebrewによるソフトウェアの実装(1)Homebrewによるソフトウェアの実装(1)
Homebrewによるソフトウェアの実装(1)Yoshihiro Mizoguchi
 
Overleafを使った文書作成
Overleafを使った文書作成Overleafを使った文書作成
Overleafを使った文書作成Yoshihiro Mizoguchi
 
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...Yoshihiro Mizoguchi
 
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 FormalizationYoshihiro Mizoguchi
 
数式処理ソフトMathematicaで数学の問題を解く
数式処理ソフトMathematicaで数学の問題を解く数式処理ソフトMathematicaで数学の問題を解く
数式処理ソフトMathematicaで数学の問題を解くYoshihiro Mizoguchi
 
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 algorithmYoshihiro Mizoguchi
 
計算機を用いて数学の問題を解くということ
計算機を用いて数学の問題を解くということ計算機を用いて数学の問題を解くということ
計算機を用いて数学の問題を解くということYoshihiro Mizoguchi
 
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 CalculusYoshihiro Mizoguchi
 
Algebras for programming languages
Algebras for programming languagesAlgebras for programming languages
Algebras for programming languagesYoshihiro Mizoguchi
 
Mac bookでwebサーバーを起動する方法
Mac bookでwebサーバーを起動する方法Mac bookでwebサーバーを起動する方法
Mac bookでwebサーバーを起動する方法Yoshihiro Mizoguchi
 
有限オートマトンとスティッカー系に関するCoqによる形式証明について
有限オートマトンとスティッカー系に関するCoqによる形式証明について有限オートマトンとスティッカー系に関するCoqによる形式証明について
有限オートマトンとスティッカー系に関するCoqによる形式証明についてYoshihiro Mizoguchi
 
複素数・四元数と図形の回転
複素数・四元数と図形の回転複素数・四元数と図形の回転
複素数・四元数と図形の回転Yoshihiro Mizoguchi
 
グラフデータ構造と5色定理
グラフデータ構造と5色定理グラフデータ構造と5色定理
グラフデータ構造と5色定理Yoshihiro Mizoguchi
 

More from 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色定理
 

Recently uploaded

リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドKen Fukui
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」inspirehighstaff03
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slidessusere0a682
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドKen Fukui
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」inspirehighstaff03
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドKen Fukui
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドKen Fukui
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドKen Fukui
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」inspirehighstaff03
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」inspirehighstaff03
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfyukisuga3
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」inspirehighstaff03
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」inspirehighstaff03
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」inspirehighstaff03
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfinspirehighstaff03
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」inspirehighstaff03
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」inspirehighstaff03
 

Recently uploaded (20)

リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdf
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
 
My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」My Inspire High Award 2024      「家族とは何か」
My Inspire High Award 2024      「家族とは何か」
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
 

定理証明支援系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