Coqによる証明プログラミング

8,166 views

Published on

http://www.monophile.com/tech/titech#term-2
発表用スライド(2013/04/26)

Published in: Technology
0 Comments
15 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,166
On SlideShare
0
From Embeds
0
Number of Embeds
246
Actions
Shares
0
Downloads
18
Comments
0
Likes
15
Embeds 0
No embeds

No notes for slide

Coqによる証明プログラミング

  1. 1. Coqによる証明プログラミング1. 定理証明支援系言語とは?2. Coq証明付きプログラムの実装東京工業大学情報科学科B4中村 誠希
  2. 2. 自己紹介 中村誠希 情報科学科4年 趣味◦ Web開発◦ お笑い見る とか
  3. 3. 定理証明支援系言語とは?定理証明支援系言語Coq,Agda, Isabelle/HOL,ACL2…等(自分はCoqしか使ったことがないです。)定理証明証明OK
  4. 4. 人間とコンピュータの分担①定義(プログラム)を書く②定理を書く③証明を書く④証明の正しさを確かめる人間Coq③の自動化は一部は出来るが完全な自動化は難しい
  5. 5. Coqについて・最もメジャーな定理証明支援系言語・CoqのコードをHaskell or Ocaml or Scheme or(Ruby? or …)に自動で変換出来る・もちろん数学の定理の証明に使うことも出来る・GUIエディタがある・実はjavaやhaskellより前からある
  6. 6. 実用例 証明の正当性の保証◦ 四色定理の証明(2004年)◦ ゲーデルの第一不完全性定理の証明(2005年) システムの安全性の保証◦ CompCert(Cコンパイラ)の安全性検証(2009年)◦ JavaCardの安全性検証
  7. 7. 証明付きプログラムを書く
  8. 8. 証明付きプログラムを書く①1. どんなプログラムが書きたいかイメージ◦ 自然数a,bの大きい方を返したいなー
  9. 9. 証明付きプログラムを書く②1. どんなプログラムが書きたいかイメージ◦ 自然数a,bの大きい方を返したいなー2. 仕様(満たすべき定理)を書く◦ is_max:∀x y,x<=max(x,y) ∧ y<=max(x,y)◦ max_exist:∀x y,max(x,y)=x ∨ max(x,y)=y
  10. 10. 証明付きプログラムを書く③1. どんなプログラムが書きたいかイメージ◦ 自然数a,bの大きい方を返したいなー2. 仕様(満たすべき定理)を書く◦ Is_max,max_exist3. 関数を書く
  11. 11. 証明付きプログラムを書く④1. どんなプログラムが書きたいかイメージ◦ 自然数a,bの大きい方を返したいなー2. 仕様(満たすべき定理)を書く Is_max,max_exist3. 関数を書く4. 関数が仕様を満たすことを証明
  12. 12. 証明付きプログラムを書く⑤1. どんなプログラムが書きたいかイメージ◦ 自然数a,bの大きい方を返したいなー2. 仕様(満たすべき定理)を書く Is_max,max_exist3. 関数を書く4. 関数が仕様を満たすことを証明5. 仕様が満たすコードを発行
  13. 13. もし関数が仕様を満たさないと1. どんなプログラムが書きたいかイメージ◦ 自然数a,bの大きい方を返したいなー2. 仕様(満たすべき定理)を書く Is_max,max_exist3. 関数を書く4. 関数が仕様を満たすことを証明5. 仕様が満たすコードを発行(発行されない)コンパイルエラー
  14. 14. 証明付きプログラムまとめ 証明が書ければ仕様通りのコードが確実に書けるよ。証明が書ければ。 コード変換時にCoqの型をHaskellの型に変換するので、しっかりやるならHaskellの型の仕様に合ったCoqの型を設計する必要があると思う。 現段階では、普通のプロジェクトで全て証明するのはコストが大きすぎて実用的でない?部分的になら面白いかも。 安全性が最重要視されるコードを書く場合には、Coqを使って証明すると良いよ。
  15. 15. 参考サイト Coq◦ http://coq.inria.fr/ ソフトウェアの基礎◦ http://proofcafe.org/sf/ 証明駆動開発入門◦ http://www.iij-ii.co.jp/lab/techdoc/coqt/

×