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
140
書くネタがCoqしかない
upcamp 2012のLT大会にて
Masaki Hara
August 11, 2012
Tweet
Share
More Decks by Masaki Hara
See All by Masaki Hara
状態設計から「なんとなく」を無くそう
qnighy
84
26k
日付時刻A to Z
qnighy
1
490
Hands-on Native ESM @ JSConf JP 2022
qnighy
0
5.4k
computed_modelの紹介 / Introducing computed_model (2)
qnighy
0
550
computed_modelの紹介 / Introducing computed_model
qnighy
0
330
Rust: imperative language 2.0
qnighy
10
2.3k
Making an opinionated Web framework
qnighy
2
4.3k
BigQueryでprotobufをパースした話 / parsing protobuf in BigQuery
qnighy
1
2.2k
セミコロン完全マスター
qnighy
6
3.3k
Other Decks in Programming
See All in Programming
Documentation for users with AsciiDoc and Antora
ahus1
0
370
ServerAction で Progressive Enhancement はどこまで頑張れるか? / progressive-enhancement-with-server-action
takefumiyoshii
6
420
スクラムガイドのスプリントレトロスペクティブを改めて読みかえしてみた / Re-reading the Sprint Retrospective Section in the Scrum Guide
mackey0225
3
480
Netty Chicago Java User Group 2024-04-17
sullis
0
200
Milestoner
bkuhlmann
1
410
FigmaとPHPで作る1ミリたりとも表示崩れしない最強の帳票印刷ソリューション
ttskch
43
19k
『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか
free_world21
1
360
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
500
Hanami and htmx
bkuhlmann
0
220
冗長なエラーログを削減し、スタックトレースを手に入れる / Reducing Verbose Error Logs and Obtaining Stack Traces
upamune
0
1k
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
120
障害対応を起点としたもっといい開発と運用のサイクル作りのためにできること / Hatena Enginner Seminar #29
polamjag
0
380
Featured
See All Featured
Adopting Sorbet at Scale
ufuk
69
8.6k
Build your cross-platform service in a week with App Engine
jlugia
226
17k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
104
6.6k
A better future with KSS
kneath
231
16k
Design by the Numbers
sachag
274
18k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
79
43k
Building a Modern Day E-commerce SEO Strategy
aleyda
21
6.4k
How to train your dragon (web standard)
notwaldorf
75
5.2k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
11
1k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
The Power of CSS Pseudo Elements
geoffreycrofte
62
5k
Designing the Hi-DPI Web
ddemaree
276
33k
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 •
型理論の本
おわり •