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
160
書くネタがCoqしかない
upcamp 2012のLT大会にて
Masaki Hara
August 11, 2012
Tweet
Share
More Decks by Masaki Hara
See All by Masaki Hara
バックエンドのためのアプリ内課金入門 (サブスク編)
qnighy
8
2.1k
Dockerfileの考え方
qnighy
47
18k
Arm移行タイムアタック
qnighy
1
570
Quine, Polyglot, 良いコード
qnighy
5
780
Prolog入門
qnighy
5
1.8k
Rubyのobject_id
qnighy
7
1.7k
Getting along with YAML comments with Psych
qnighy
2
2.6k
状態設計から「なんとなく」を無くそう
qnighy
86
29k
日付時刻A to Z
qnighy
1
700
Other Decks in Programming
See All in Programming
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
110
プロダクト開発でも使おう 関数のオーバーロード
yoiwamoto
0
160
Cloudflare Realtime と Workers でつくるサーバーレス WebRTC
nekoya3
0
420
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
830
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
230
Team topologies and the microservice architecture: a synergistic relationship
cer
PRO
0
860
データベースコネクションプール(DBCP)の変遷と理解
fujikawa8
1
270
2度もゼロから書き直して、やっとブラウザでぬるぬる動くAIに辿り着いた話
tomoino
0
160
Benchmark
sysong
0
210
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
530
Claude Codeの使い方
ttnyt8701
1
120
単体テストの始め方/作り方
toms74209200
0
490
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
KATA
mclloyd
29
14k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
6
700
The Invisible Side of Design
smashingmag
299
51k
Designing for Performance
lara
609
69k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Gamification - CAS2011
davidbonilla
81
5.3k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
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 •
型理論の本
おわり •