Postscript: あとがき
Congratulations: We've made it to the end!
ここまで様々なことを学んできました。
「論理の基礎」から始まった軌跡を振り返ってみましょう。
- 関数プログラミング
- 「宣言的」プログラミング(変更可能な配列やポインタなどによるループではなく、不変データ構造上の再帰)
- 高階関数
- 多相性
- 論理、ソフトウェア工学の数学的基盤:
論理 微積分 -------------------- ~ ---------------------------- ソフトウェア工学 機械/土木工学
- 帰納的に定義された集合と関係
- 帰納的証明
- 証明オブジェクト
- Coq、産業用途に耐え得る証明支援器
- 関数型のコア言語
- 基礎となるタクティック
- 自動化
- プログラミング言語の基礎
- 以下を精密に定めるための記法と定義法
- 抽象構文
- 操作的意味
- 大ステップ形式
- 小ステップ形式
- 型システム
- プログラム同値性
- ホーア論理
- 型システムの基本的メタ理論
- 進行と保存
- 進行と保存
- サブタイプ理論
- 以下を精密に定めるための記法と定義法
Looking Around
CompCert
- The striking thing about our CompCert results is that the middle-end bugs we found in all other compilers are absent. As of early 2011, the under-development version of CompCert is the only compiler we have tested for which Csmith cannot find wrong-code errors. This is not for lack of trying: we have devoted about six CPU-years to the task. The apparent unbreakability of CompCert supports a strong argument that developing compiler optimizations within a proof framework, where safety checks are explicit and machine-checked, has tangible benefits for compiler users.
seL4
CertiKOS
Ironclad
Verdi
DeepSpec
- Website: http://deepspec.org/
- Overview presentations:
- http://deepspec.org/about/
- https://www.youtube.com/watch?v=IPNdsnRWBkk
REMS
Others
- Vellvm (formal specification and verification of LLVM optimization passes)
- Zach Tatlock's formally certified browser
- Tobias Nipkow's formalization of most of Java
- The CakeML verified ML compiler
- Greg Morrisett's formal specification of the x86 instruction set and the RockSalt Software Fault Isolation tool (a better, faster, more secure version of Google's Native Client)
- Ur/Web, a programming language for verified web applications embedded in Coq
- the Princeton Verified Software Toolchain
先に進む資料としてよいものをいくつか...
- この本のオプションの章。
目次と依存関係のページを眺めてみてください。
- ホーア論理とプログラム検証について:
- The Formal Semantics of Programming Languages: An Introduction, by Glynn Winskel Winskel 1993 (Bib.v内)
- 実践的な形式検証ツール、例えばMicrosoftのBoogie system、Java Extended Static Checking、など
- プログラミング言語の基礎について:
- Concrete Semantics with Isabelle/HOL, by Tobias Nipkow and Gerwin Klein Nipkow 2014 (Bib.v内)
- Types and Programming Languages, by Benjamin C. Pierce Pierce 2002 (Bib.v内) (和訳:型システム入門 -プログラミング言語と型の理論-)
- Practical Foundations for Programming Languages, by Robert Harper Harper 2016 (Bib.v内)
- Foundations for Programming Languages, by John C. Mitchell Mitchell 1996 (Bib.v内)
- Iron Lambda (http://iron.ouroborus.net/) は、段階的に複雑さが変わる複数の関数型言語のCoqによる定式化です。
ソフトウェアの基礎と、最近の研究論文で起こっていることのギャップを埋めてくれます。
定式化の中では、STLCや多相ラムダ計算(System F)の複数の亜種について、少なくとも進行性定理や型保存定理が示されています。
- 最後に、プログラミング言語と形式検証について最先端を行く学会:
- Principles of Programming Langauges (POPL)
- Programming Language Design and Implementation (PLDI)
- International Conference on Functional Programming (ICFP)
- Computer Aided Verification (CAV)
- Interactive Theorem Proving (ITP)
- Certified Programs and Proofs (CPP)
- SPLASH/OOPSLA
- Principles in Practice workshop (PiP)
- CoqPL workshop