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
170
書くネタがCoqしかない
upcamp 2012のLT大会にて
Masaki Hara
August 11, 2012
Tweet
Share
More Decks by Masaki Hara
See All by Masaki Hara
文字コードの話
qnighy
44
17k
バックエンドのためのアプリ内課金入門 (サブスク編)
qnighy
9
2.5k
Dockerfileの考え方
qnighy
50
19k
Arm移行タイムアタック
qnighy
1
690
Quine, Polyglot, 良いコード
qnighy
5
880
Prolog入門
qnighy
5
2.6k
Rubyのobject_id
qnighy
7
1.8k
Getting along with YAML comments with Psych
qnighy
2
2.9k
状態設計から「なんとなく」を無くそう
qnighy
90
30k
Other Decks in Programming
See All in Programming
CSC307 Lecture 15
javiergs
PRO
0
250
AIコードレビューの導入・運用と AI駆動開発における「AI4QA」の取り組みについて
hagevvashi
0
500
How to stabilize UI tests using XCTest
akkeylab
0
130
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
360
DevinとClaude Code、SREの現場で使い倒してみた件
karia
1
1.1k
[SF Ruby Feb'26] The Silicon Heel
palkan
0
110
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
1
190
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
990
Understanding Apache Lucene - More than just full-text search
spinscale
0
120
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
600
Agentic AI: Evolution oder Revolution
mobilelarson
PRO
0
180
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
190
Featured
See All Featured
Discover your Explorer Soul
emna__ayadi
2
1.1k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
150
AI: The stuff that nobody shows you
jnunemaker
PRO
3
400
WENDY [Excerpt]
tessaabrams
9
36k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
A better future with KSS
kneath
240
18k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
So, you think you're a good person
axbom
PRO
2
2k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
290
The Invisible Side of Design
smashingmag
302
51k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
88
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
410
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 •
型理論の本
おわり •