SlideShare una empresa de 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
    • 型理論の本
おわり
•

Más contenido relacionado

La actualidad más candente

暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -MITSUNARI Shigeo
 
楕円曲線入門 トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門 トーラスと楕円曲線のつながりMITSUNARI Shigeo
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについてmametter
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
ホモトピー型理論入門
ホモトピー型理論入門ホモトピー型理論入門
ホモトピー型理論入門k h
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~Takuya Akiba
 
Rust、何もわからない...#7 VecDeque再訪
Rust、何もわからない...#7 VecDeque再訪Rust、何もわからない...#7 VecDeque再訪
Rust、何もわからない...#7 VecDeque再訪Yusuke Mori
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門joisino
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介Masahiro Sakai
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCamlHaruka Oikawa
 
Coq Tutorial
Coq TutorialCoq Tutorial
Coq Tutorialtmiya
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
圏論は、随伴が全て
圏論は、随伴が全て圏論は、随伴が全て
圏論は、随伴が全てohmori
 
Constexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzzConstexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzz京大 マイコンクラブ
 

La actualidad más candente (20)

暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
楕円曲線入門 トーラスと楕円曲線のつながり
楕円曲線入門トーラスと楕円曲線のつながり楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門 トーラスと楕円曲線のつながり
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについて
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
ホモトピー型理論入門
ホモトピー型理論入門ホモトピー型理論入門
ホモトピー型理論入門
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
Rust、何もわからない...#7 VecDeque再訪
Rust、何もわからない...#7 VecDeque再訪Rust、何もわからない...#7 VecDeque再訪
Rust、何もわからない...#7 VecDeque再訪
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 
Coq Tutorial
Coq TutorialCoq Tutorial
Coq Tutorial
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
圏論は、随伴が全て
圏論は、随伴が全て圏論は、随伴が全て
圏論は、随伴が全て
 
Constexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzzConstexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzz
 

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

Proof summit 2017 for slideshare
Proof summit 2017 for slideshareProof summit 2017 for slideshare
Proof summit 2017 for slideshareKeisuke Yahata
 
error handling using expected
error handling using expectederror handling using expected
error handling using expectedAkira Takahashi
 
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
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)Yoshifumi Yamaguchi
 
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッションShohei Hido
 
「宣言的プログラミング」とSDNのひとつの形態
「宣言的プログラミング」とSDNのひとつの形態「宣言的プログラミング」とSDNのひとつの形態
「宣言的プログラミング」とSDNのひとつの形態npsg
 
CI/CDパイプラインを定着させる闘い @九州インフラ交流勉強会(Kixs) Vol.006
CI/CDパイプラインを定着させる闘い @九州インフラ交流勉強会(Kixs) Vol.006CI/CDパイプラインを定着させる闘い @九州インフラ交流勉強会(Kixs) Vol.006
CI/CDパイプラインを定着させる闘い @九州インフラ交流勉強会(Kixs) Vol.006Kazuhiro Uchimura
 
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧めCプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧めMITSUNARI Shigeo
 
CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩CodeBuildを身近にするためのはじめの一歩
CodeBuildを身近にするためのはじめの一歩淳 千葉
 
Mk network programmability-03
Mk network programmability-03Mk network programmability-03
Mk network programmability-03Miya Kohno
 
cbt (Cranberries Build Tool)
cbt (Cranberries Build Tool)cbt (Cranberries Build Tool)
cbt (Cranberries Build Tool)Wada Yuki
 
Draft: Observability, Service Mesh and Microservices
Draft: Observability, Service Mesh and MicroservicesDraft: Observability, Service Mesh and Microservices
Draft: Observability, Service Mesh and MicroservicesTaiki
 
Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesTaiki
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜Masaya Aoyama
 

Similar 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 の最大公倍数〜
 

Más de Masaki Hara

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 RustMasaki Hara
 
How I Contribute to Rust Compiler
How I Contribute to Rust CompilerHow I Contribute to Rust Compiler
How I Contribute to Rust CompilerMasaki Hara
 
ご静聴ありがとうございました
ご静聴ありがとうございましたご静聴ありがとうございました
ご静聴ありがとうございましたMasaki Hara
 
いろいろな問題の解説
いろいろな問題の解説いろいろな問題の解説
いろいろな問題の解説Masaki Hara
 
“A ::= aAa / a” in PEG
“A ::= aAa / a” in PEG“A ::= aAa / a” in PEG
“A ::= aAa / a” in PEGMasaki Hara
 
Spaceships 解説
Spaceships 解説Spaceships 解説
Spaceships 解説Masaki Hara
 
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 CoqMasaki Hara
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドMasaki Hara
 
永続データ構造が分からない人のためのスライド
永続データ構造が分からない人のためのスライド永続データ構造が分からない人のためのスライド
永続データ構造が分からない人のためのスライドMasaki Hara
 
joi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingjoi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingMasaki Hara
 

Más 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しかない