書くネタがcoqしかない

Post on 21-May-2015

2.650 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

書くネタが 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• 型理論の本

おわり•

top related