SlideShare uma empresa Scribd logo
1 de 31
書くネタが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
    • 型理論の本
おわり
•

Mais conteúdo relacionado

Mais procurados

プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
 

Mais procurados (20)

Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
 
自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
IDベース暗号の概観と今後の展望(次世代セキュア情報基盤ワークショップ )
IDベース暗号の概観と今後の展望(次世代セキュア情報基盤ワークショップ )IDベース暗号の概観と今後の展望(次世代セキュア情報基盤ワークショップ )
IDベース暗号の概観と今後の展望(次世代セキュア情報基盤ワークショップ )
 
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介
 
第11回 配信講義 計算科学技術特論A(2021)
第11回 配信講義 計算科学技術特論A(2021)第11回 配信講義 計算科学技術特論A(2021)
第11回 配信講義 計算科学技術特論A(2021)
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
 

Semelhante a 書くネタがCoqしかない

Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Yoshifumi Kawai
 
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション
Shohei Hido
 

Semelhante a 書くネタがCoqしかない (16)

C++ Now 2012 report
C++ Now 2012 reportC++ Now 2012 report
C++ Now 2012 report
 
すごいCoq入門
すごいCoq入門すごいCoq入門
すごいCoq入門
 
Proof summit 2017 for slideshare
Proof summit 2017 for slideshareProof summit 2017 for slideshare
Proof summit 2017 for slideshare
 
error handling using expected
error handling using expectederror handling using expected
error handling using expected
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション
 
「宣言的プログラミング」とSDNのひとつの形態
「宣言的プログラミング」とSDNのひとつの形態「宣言的プログラミング」とSDNのひとつの形態
「宣言的プログラミング」とSDNのひとつの形態
 
CI/CDパイプラインを定着させる闘い @九州インフラ交流勉強会(Kixs) Vol.006
CI/CDパイプラインを定着させる闘い @九州インフラ交流勉強会(Kixs) Vol.006CI/CDパイプラインを定着させる闘い @九州インフラ交流勉強会(Kixs) Vol.006
CI/CDパイプラインを定着させる闘い @九州インフラ交流勉強会(Kixs) Vol.006
 
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧めCプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧め
 
CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩
 
Mk network programmability-03
Mk network programmability-03Mk network programmability-03
Mk network programmability-03
 
cbt (Cranberries Build Tool)
cbt (Cranberries Build Tool)cbt (Cranberries Build Tool)
cbt (Cranberries Build Tool)
 
Draft: Observability, Service Mesh and Microservices
Draft: Observability, Service Mesh and MicroservicesDraft: Observability, Service Mesh and Microservices
Draft: Observability, Service Mesh and Microservices
 
Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and Microservices
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
 

Mais de Masaki Hara

ご静聴ありがとうございました
ご静聴ありがとうございましたご静聴ありがとうございました
ご静聴ありがとうございました
Masaki Hara
 

Mais de Masaki Hara (13)

You won't know it's now Rust
You won't know it's now RustYou won't know it's now Rust
You won't know it's now Rust
 
How I Contribute to Rust Compiler
How I Contribute to Rust CompilerHow I Contribute to Rust Compiler
How I Contribute to Rust Compiler
 
Coqの公理
Coqの公理Coqの公理
Coqの公理
 
ご静聴ありがとうございました
ご静聴ありがとうございましたご静聴ありがとうございました
ご静聴ありがとうございました
 
いろいろな問題の解説
いろいろな問題の解説いろいろな問題の解説
いろいろな問題の解説
 
“A ::= aAa / a” in PEG
“A ::= aAa / a” in PEG“A ::= aAa / a” in PEG
“A ::= aAa / a” in PEG
 
Spaceships 解説
Spaceships 解説Spaceships 解説
Spaceships 解説
 
Proving Decidability of Intuitionistic Propositional Calculus on Coq
Proving Decidability of Intuitionistic Propositional Calculus on CoqProving Decidability of Intuitionistic Propositional Calculus on Coq
Proving Decidability of Intuitionistic Propositional Calculus on Coq
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
永続データ構造が分からない人のためのスライド
永続データ構造が分からない人のためのスライド永続データ構造が分からない人のためのスライド
永続データ構造が分からない人のためのスライド
 
Coqでsprintf
CoqでsprintfCoqでsprintf
Coqでsprintf
 
Coqでsprintf
CoqでsprintfCoqでsprintf
Coqでsprintf
 
joi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingjoi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcasting
 

書くネタがCoqしかない