書くネタがcoqしかない

31
書書書書書 Coq 書書書書 upcamp 2012 書書

Upload: masaki-hara

Post on 21-May-2015

2.650 views

Category:

Documents


1 download

DESCRIPTION

upcamp(私立・プログラミングキャンプ) 2012 東京大会 http://atnd.org/events/30833

TRANSCRIPT

Page 1: 書くネタがCoqしかない

書くネタが Coq しかない

upcamp 2012 にて

Page 2: 書くネタがCoqしかない

自己紹介• http://qnighy.github.com/ を参照• いちねんせい• 2008 プログラミング組

Page 3: 書くネタがCoqしかない

やりたいこと• 数学の証明を自然言語で書かなければい

けないのは理不尽!• →Principia Mathematica

1+1 の証明 (Wikipedia より )ここまで 80 ページ強の議論が必要

Page 4: 書くネタがCoqしかない

やりたいこと• 今だったらこれをコンピューターでやれ

るよね• ↑ 正しさの検証も自動でできる!• ↑ あわよくば、証明の一部は自動化

Page 5: 書くネタがCoqしかない

目次• Coq とは何か• Coq の根底にある理論• Coq で何ができるのか• Coq をはじめる

Page 6: 書くネタがCoqしかない

Coq とは何か• 純粋関数型プログラミング言語&定理証

明言語• 静的型付け• OCaml の影響を受ける• OCaml で実装されている• OCaml の製造元 INRIA が開発している• 名前は計算機科学者 Thierry Coqand に由来

すると思われる

Page 7: 書くネタがCoqしかない

Coq の特徴• 停止する保証のあるプログラムしか書け

ない( 再帰の記述に関する制限 )

• 証明モード( 対話的にプログラムを組み立てるモード )

Page 8: 書くネタがCoqしかない

コード例• Karatsuba 乗算のコード

• このあと停止性証明が続く

Page 9: 書くネタがCoqしかない

コード例• マージソートと停止性証明

Page 10: 書くネタがCoqしかない

Coq の特徴• 停止する保証のあるプログラムしか書け

ない• ( 再帰の記述に関する制限 )• → プログラムの正当性証明に用いられる

Page 11: 書くネタがCoqしかない

コード例• プログラムの正当性証明• (anarchy proof 30: Certified Compiler)

Page 12: 書くネタがCoqしかない

Coq の特徴• 停止する保証のあるプログラムしか書け

ない• ( 再帰の記述に関する制限 )• → プログラムの正当性証明に用いられる• → 数学の定理の証明に用いられる

Page 13: 書くネタがCoqしかない

コード例• Glivenko の定理の証明

Page 14: 書くネタがCoqしかない

コード例• √2 は無理数であることの証明• (anarchy proof 6: Sqrt 2)

Page 15: 書くネタがCoqしかない

Coq の根底にある理論• Coq における「証明」とは?• → Curry-Howard 対応

証明 : 命題

プログラム : 型

Page 16: 書くネタがCoqしかない

Coq の根底にある理論• Curry-Howard 対応の例• 含意 (A ならば B): 関数 A -> B (Haskell)• 連言 (A かつ B): ペア pair<A, B> (C++)• 選言 (A または B): Either A B (Haskell)• 矛盾 ( ): ⊥ 到達不能型 Nothing (Scala)• 否定 (A でない ): A -> ⊥

Page 17: 書くネタがCoqしかない

Coq の根底にある理論• では、こういうコードは?• Definition A : False := A.• A が定義できたら、矛盾が導けてしまう。• ↑ 無限ループの禁止

Page 18: 書くネタがCoqしかない

Coq の根底にある理論• Coq は停止するプログラムしか書けない• これをどう保証するか?

• _ 人人 人人人人人人 _> 型システムの出番 < ̄ Y^Y^Y^Y^Y^Y^Y^Y  ̄

Page 19: 書くネタがCoqしかない

Coq の根底にある理論• 停止性を保証する型システム• Simply Typed Lambda Calculus• ↓ +polymorphism ( 型に依存した値 )• ↓ +type operators ( 型に依存した型 )• ↓ +dependent types ( 値に依存した型 )• Calculus of Constructions

Page 20: 書くネタがCoqしかない

Coq の根底にある理論• Calculus of Constructions (CoC)• ↓ + 再帰等• Calculus of Inductive Constructions (CIC)

• この CIC を Coq では用いている• CIC と集合論の ZFC は互換

( CIC(i)→ZFC(i-2), ZFC(i)→CIC(i+1) )

Page 21: 書くネタがCoqしかない

Coq で何ができるの?• 数学サイド• 有名なのは– ゲーデルの不完全性定理の証明

( 公理系が多層化するので、形式的な言語で書いたほうが議論しやすいと思われる )

– 四色問題の証明( 四色問題は数学的証明部とコンピューターによる探索部に別れる。 Coq ではこれを有機的に結合できるため、証明の信頼性が高まる )

Page 22: 書くネタがCoqしかない

Coq で何ができるの?• プログラミングサイド• プログラムを証明するという試みもいく

つか行われている– Coq 自体でプログラムを書く→他の言語へ出

力– C 言語プログラムの証明: Frama-C プラグイ

ン– Java プログラムの証明 : Krakatoa– 独自の言語 Why3ML で書いたプログラムの証

明• Z とかに比べるとまだ発展途上かも

Page 23: 書くネタがCoqしかない

Coq で何ができるの?

•というより

Page 24: 書くネタがCoqしかない

Coq で何ができるの?

•証明ができると

Page 25: 書くネタがCoqしかない

Coq で何ができるの?

•幸せになります( 主に自己肯定感が得られる )

Page 26: 書くネタがCoqしかない

Coq をはじめる•

Page 27: 書くネタがCoqしかない

Coq をはじめる• 日本語資料が少ない• コミュニティーが大きくない

• 最後に、いくつかの参考資料を紹介して終わります

Page 28: 書くネタがCoqしかない

Coq の資料• http://coq.inria.fr/– Coq 公式サイト

• プログラミング Coq– 女子大生による Coq プログラミング入門

• anarchy proof– 証明ジャッジ 練習用に使える

• あとは面倒くさいのでここを見て

Page 29: 書くネタがCoqしかない

コミュニティー• 名古屋にいろいろあるらしい– Coq Party, Proof Summit …

Page 30: 書くネタがCoqしかない

本• 本 (英語 )– Coq’art• Coq の本らしい

– TAPL• 型理論の本

Page 31: 書くネタがCoqしかない

おわり•