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

おわり •