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