定理証明リンク集
定理証明、特に定理証明支援系(Proof Assistant)はその存在こそ少しずつ浸透しつつあるような気がしないでもないけれど資料とか全然まとまってないのが不便だなと前々から思っていたのでリソースをまとめておきます。
これも追加してほしいみたいなのあったら教えてください。
Proof Assistants
始めるなら次の中から選ぶのがよいと思います。
- Coq
- Calculus of constructionsベースの型システムとリッチなコマンドを備えた言語
- このリストの中では最もコミュニティが大きい、入門書等も豊富
- 型システムと項を書くためのGallina, コンパイラへの命令を記述するためのVernacular, タクティクスの定義に使うLtacなどの言語が混ざって出てくるのが初心者には混乱必至
- 結構複雑な言語なので使いこなすのはそれなりに大変
- Agda
- Martin-Löf type theoryベースの言語
- Coqと違ってコマンド等はとても貧弱だが言語が薄いので中の仕組みが分かりやすい、依存型の勉強にはもってこい
- 実践的に使おうとするとパフォーマンスが悪いのがネック モジュール分割や証明のスキップみたいな面白くないところに時間を取られる可能性あり
- Idris
- Agdaに似た感じの言語
- この中では唯一純粋なプログラミング言語として使用可能(runtimeがあって実行可能コードを吐ける)だが実際に動かして使うにはまだまだという感じ
- Agdaよりはサポートが多く証明が書きやすいはず(未検証なので嘘かも)
- Lean
- この中では後発、CoqやAgdaに似ており、Agdaよりは書きやすくリッチでCoqよりは薄くて簡単
- 数年前にメジャーバージョンが2から3に上がりそこで多少の断絶があるらしい
- 機能網羅的なリファレンスがまだ用意されてないらしいのでCoqやAgdaの知識がないと使いこなすのは難しいかもしれない
- Isabelle
- この中では唯一Curry-Howardをベースとしない形式証明(依存型もない)
- 豊富なライブラリと強力なproverによる自動証明が魅力
- 「普通の」数学をやりたいならこれがおすすめ
- 公式のリファレンスはあるが機能は膨大、非公式ドキュメントも少ないので習得は骨が折れるかも
入門書等
出版されていてもドラフト版のpdfが無料で読めるものが多い
- Software Foundations: Coqを使用しプログラム意味論的な話題が中心。Coqの説明ばかりというわけではないので他言語ユーザーでも読めると思われる。
- Software Foundations in Idris: Software FoundationsのIdris版
- Concrete Semantics: Isabelle/HOLを使用しこちらもプログラム意味論系の証明を行う本。前半はIsabelleの説明で後半はコンピューターサイエンスという構成。
- Certified Programming with Dependent Types: Coqで依存型を学べる本。Coqに限らず定理証明で幅広く使える話が書いてあるので非Coqユーザーでもおすすめ。
- Verified Functional Programming in Agda: Agdaの本、読んでないので詳細知らず
- Coq’Art: Coqの定評のある入門書、詳細は知らない
- Coq/SSReflect/MathCompによる定理証明: 日本語(!)で書かれたCoqの入門書
入門記事等
読み物もあり
- F*(F Star)の複雑な型システムの何が嬉しいのか?: 依存型のモチベーションの話
- Coqで学ぶ証明プログラミング! テストだけでなく「証明」で安全性を保証する
- プログラミング Coq 〜 絶対にバグのないプログラムの書き方 〜: Coqの丁寧な入門記事
- Learn you an Agda
- Agda による圏論入門: 圏論と定理証明多少知ってる人向け
私が書いてる記事とか
それなりに色々書いたつもりではあるので まぁ参考になればくらいの気持ちで(話半分で読んだ方がいいやつとかもある)
- あのとき知りたかったCoqの話
- Theorem Prover Leanの紹介: Lean2と他言語との比較とか
- Theorem Prover Haskellの紹介: Haskellで定理証明する話、お遊びとして
- Isabelle入門の入門
- 一人Computer Science Advent Calendar 2017: 前半にIsabelleの解説 後半にProof Assistantを作る話を連載してます
その他リソース
- 定理証明支援の紹介
- Coq/SSReflect/MathCompの設定: Coqのインストールガイド
- Coqで独習するならどのページがいい?と聞かれたときのメモ
- 誰も書かないCoq入門以前の話
- The Agda wiki
- Handbook of Practical Logic and Automated Reasoning: MLでproof assistantを作る本
- Advanced Topics in Types and Programming Languages: TaPLの続編、依存型の話もあり
- 定理証明手習い: Schemeを使って定理証明に入門する本、最近出たやつ
- Simply Easy! An Implementation of a Dependently Typed Lambda Calculus (Andres Loh, Conor McBride, Wouter Swierstra): Haskellでdependent type入りのラムダ計算の実装を書く論文
- Homotopy Type Theory: The HoTT Bookと言われるやつ
- Write Yourself a Theorem Prover in 48 Hours (その1): Coq風のproof assistantを作る記事