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
バックエンドのためのアプリ内課金入門 (サブスク編)
qnighy
8
1.8k
Dockerfileの考え方
qnighy
45
17k
Arm移行タイムアタック
qnighy
1
520
Quine, Polyglot, 良いコード
qnighy
5
740
Prolog入門
qnighy
5
1.5k
Rubyのobject_id
qnighy
6
1.6k
Getting along with YAML comments with Psych
qnighy
2
2.3k
状態設計から「なんとなく」を無くそう
qnighy
85
28k
日付時刻A to Z
qnighy
1
640
Other Decks in Programming
See All in Programming
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
400
.NET Frameworkでも汎用ホストが使いたい!
tomokusaba
0
110
Lottieアニメーションをカスタマイズしてみた
tahia910
0
130
Amazon ECS とマイクロサービスから考えるシステム構成
hiyanger
2
570
Djangoアプリケーション 運用のリアル 〜問題発生から可視化、最適化への道〜 #pyconshizu
kashewnuts
1
250
Honoとフロントエンドの 型安全性について
yodaka
7
1.3k
CI改善もDatadogとともに
taumu
0
120
GoとPHPのインターフェイスの違い
shimabox
2
190
AIの力でお手軽Chrome拡張機能作り
taiseiue
0
180
『品質』という言葉が嫌いな理由
korimu
0
160
Multi Step Form, Decentralized Autonomous Organization
pumpkiinbell
1
770
2024年のWebフロントエンドのふりかえりと2025年
sakito
3
260
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
Mobile First: as difficult as doing things right
swwweet
223
9.3k
Building Your Own Lightsaber
phodgson
104
6.2k
Scaling GitHub
holman
459
140k
Site-Speed That Sticks
csswizardry
4
390
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
133
33k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
Six Lessons from altMBA
skipperchong
27
3.6k
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 •
型理論の本
おわり •