Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
書くネタがCoqしかない
Search
Masaki Hara
August 11, 2012
Programming
1
150
書くネタがCoqしかない
upcamp 2012のLT大会にて
Masaki Hara
August 11, 2012
Tweet
Share
More Decks by Masaki Hara
See All by Masaki Hara
Arm移行タイムアタック
qnighy
0
370
Quine, Polyglot, 良いコード
qnighy
4
650
Prolog入門
qnighy
5
1.3k
Rubyのobject_id
qnighy
6
1.5k
Getting along with YAML comments with Psych
qnighy
2
2.1k
状態設計から「なんとなく」を無くそう
qnighy
84
27k
日付時刻A to Z
qnighy
1
590
Hands-on Native ESM @ JSConf JP 2022
qnighy
0
5.7k
computed_modelの紹介 / Introducing computed_model (2)
qnighy
0
590
Other Decks in Programming
See All in Programming
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
6
1.9k
シェーダーで魅せるMapLibreの動的ラスタータイル
satoshi7190
1
490
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
110
Swift Testing - iPlayground
chiaoteni
0
110
DevTools extensions で 独自の DevTool を開発する | FlutterKaigi 2024
kokiyoshida
0
170
React への依存を最小にするフロントエンド設計
takonda
20
7.4k
EMになってからチームの成果を最大化するために取り組んだこと/ Maximize team performance as EM
nashiusagi
0
110
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
140
3rd party scriptでもReactを使いたい! Preact + Reactのハイブリッド開発
righttouch
PRO
1
610
Develop iOS apps with Neovim / vimconf_2024
uhooi
1
110
[Do iOS '24] Ship your app on a Friday...and enjoy your weekend!
polpielladev
0
150
Laravel や Symfony で手っ取り早く OpenAPI のドキュメントを作成する
azuki
2
130
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Fireside Chat
paigeccino
34
3k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
740
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Building an army of robots
kneath
302
43k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.1k
Navigating Team Friction
lara
183
14k
Writing Fast Ruby
sferik
627
61k
Code Review Best Practice
trishagee
64
17k
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 •
型理論の本
おわり •