Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
書くネタがCoqしかない upcamp 2012 にて
Slide 2
Slide 2 text
自己紹介 • http://qnighy.github.com/ を参照 • いちねんせい • 2008プログラミング組
Slide 3
Slide 3 text
やりたいこと • 数学の証明を自然言語で書かなければいけ ないのは理不尽! • →Principia Mathematica 1+1の証明 (Wikipediaより) ここまで80ページ強の議論が必要
Slide 4
Slide 4 text
やりたいこと • 今だったらこれをコンピューターでやれるよね • ↑正しさの検証も自動でできる! • ↑あわよくば、証明の一部は自動化
Slide 5
Slide 5 text
目次 • Coqとは何か • Coqの根底にある理論 • Coqで何ができるのか • Coqをはじめる
Slide 6
Slide 6 text
Coqとは何か • 純粋関数型プログラミング言語&定理証明 言語 • 静的型付け • OCamlの影響を受ける • OCamlで実装されている • OCamlの製造元 INRIA が開発している • 名前は計算機科学者 Thierry Coqandに由来 すると思われる
Slide 7
Slide 7 text
Coqの特徴 • 停止する保証のあるプログラムしか書けない (再帰の記述に関する制限) • 証明モード (対話的にプログラムを組み立てるモード)
Slide 8
Slide 8 text
コード例 • Karatsuba 乗算のコード • このあと停止性証明が続く
Slide 9
Slide 9 text
コード例 • マージソートと停止性証明
Slide 10
Slide 10 text
Coqの特徴 • 停止する保証のあるプログラムしか書けない • (再帰の記述に関する制限) • →プログラムの正当性証明に用いられる
Slide 11
Slide 11 text
コード例 • プログラムの正当性証明 • (anarchy proof 30: Certified Compiler)
Slide 12
Slide 12 text
Coqの特徴 • 停止する保証のあるプログラムしか書けない • (再帰の記述に関する制限) • →プログラムの正当性証明に用いられる • →数学の定理の証明に用いられる
Slide 13
Slide 13 text
コード例 • Glivenkoの定理の証明
Slide 14
Slide 14 text
コード例 • √2は無理数であることの証明 • (anarchy proof 6: Sqrt 2)
Slide 15
Slide 15 text
Coqの根底にある理論 • Coqにおける「証明」とは? • → Curry-Howard 対応 証明 : 命題 プログラム : 型
Slide 16
Slide 16 text
Coqの根底にある理論 • Curry-Howard対応の例 • 含意(AならばB): 関数 A -> B (Haskell) • 連言(AかつB): ペア pair
(C++) • 選言(AまたはB): Either A B (Haskell) • 矛盾(⊥): 到達不能型 Nothing (Scala) • 否定(Aでない): A -> ⊥
Slide 17
Slide 17 text
Coqの根底にある理論 • では、こういうコードは? • Definition A : False := A. • Aが定義できたら、矛盾が導けてしまう。 • ↑ 無限ループの禁止
Slide 18
Slide 18 text
Coqの根底にある理論 • Coqは停止するプログラムしか書けない • これをどう保証するか? • _人人 人人人人人人_ > 型システムの出番 <  ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
Slide 19
Slide 19 text
Coqの根底にある理論 • 停止性を保証する型システム • Simply Typed Lambda Calculus • ↓ +polymorphism (型に依存した値) • ↓ +type operators (型に依存した型) • ↓ +dependent types (値に依存した型) • Calculus of Constructions
Slide 20
Slide 20 text
Coqの根底にある理論 • Calculus of Constructions (CoC) • ↓ + 再帰等 • Calculus of Inductive Constructions (CIC) • このCICをCoqでは用いている • CICと集合論のZFCは互換 ( CIC(i)→ZFC(i-2), ZFC(i)→CIC(i+1) )
Slide 21
Slide 21 text
Coqで何ができるの? • 数学サイド • 有名なのは – ゲーデルの不完全性定理の証明 (公理系が多層化するので、形式的な言語で書い たほうが議論しやすいと思われる) – 四色問題の証明 (四色問題は数学的証明部とコンピューターによ る探索部に別れる。Coqではこれを有機的に結合 できるため、証明の信頼性が高まる)
Slide 22
Slide 22 text
Coqで何ができるの? • プログラミングサイド • プログラムを証明するという試みもいくつか行 われている – Coq自体でプログラムを書く→他の言語へ出力 – C言語プログラムの証明:Frama-Cプラグイン – Javaプログラムの証明: Krakatoa – 独自の言語Why3MLで書いたプログラムの証明 • Zとかに比べるとまだ発展途上かも
Slide 23
Slide 23 text
Coqで何ができるの? •というより
Slide 24
Slide 24 text
Coqで何ができるの? •証明ができると
Slide 25
Slide 25 text
Coqで何ができるの? •幸せになります (主に自己肯定感が得られる)
Slide 26
Slide 26 text
Coqをはじめる •
Slide 27
Slide 27 text
Coqをはじめる • 日本語資料が少ない • コミュニティーが大きくない • 最後に、いくつかの参考資料を紹介して終わ ります
Slide 28
Slide 28 text
Coqの資料 • http://coq.inria.fr/ – Coq公式サイト • プログラミング Coq – 女子大生によるCoqプログラミング入門 • anarchy proof – 証明ジャッジ 練習用に使える • あとは面倒くさいのでここを見て
Slide 29
Slide 29 text
コミュニティー • 名古屋にいろいろあるらしい – Coq Party, Proof Summit …
Slide 30
Slide 30 text
本 • 本(英語) – Coq’art • Coqの本らしい – TAPL • 型理論の本
Slide 31
Slide 31 text
おわり •