すごいCoq入門
2014/06/07
#LT駆動
@minamiyama1994
今日の流れ
● 自己紹介
● Coqとは何か
● Coqで何ができるのか
● Coqデモ
● まとめ
● 質疑応答
自己紹介
● みんな僕のこと知ってるよね!
● 省略
Coqとは何か
● プログラミング言語
● 定理証明系
● Curry-Howard対応というのを利用し、型を使っ
て形式的に定理を証明する
Coqで何ができるのか
● プログラムが必ず停止することを保証できる
● バッファオーバーランなどの基礎的なバグをコ
ンパイル時に弾ける
● ある種の性質を証明できる
○ 正しく動作することがCoqで証明されたCコンパイラなど
が存在する
● OCamlやHaskellなどのコードに変換できる
Coqデモその1~簡単な証明~
● 「ある命題Aが成り立ち、Aが成り立てばBが成
り立つとき、Bが成り立つ」を証明する
● intros
● apply
● などのタクティス(証明に使える道具)が存在す
る
Coqデモその1~ちょっと複雑な証明~
● n + m = m + nを証明する
● Lemmaなどで証明に使うための補題を証明し
ておいて、他の証明に流用できる
● inductionで帰納法が使える
● simpl,f_equal,rewriteなどのタクティスがある
Coqデモその1~ちょっと複雑な証明~
● ( l1 ++ l2 ) ++ l3 = l1 ++ ( l2 ++ l3 )を証明する
○ l1,l2,l3はリスト
● 整数だけでなくリストにもinductionでの帰納法
は適用できる
Coqデモその1~実用的な証明のお話~
● Fixpointなどで実際に動く関数が定義できる
● 関数に対して何らかの性質を証明したい!
○ ex.ソート関数に対して「ちゃんとソートできているのかど
うか」を証明したい!
● ここでは「2n-1までの奇数の和とn^2は等しい」
ことを証明する
デモまとめ
● デモのコードはGistにあります
○ https://gist.github.
com/minamiyama1994/db5cc050799b36a
2e13e
● Githubにもあります
○ https://github.
com/minamiyama1994/LTDD/tree/04
まとめ
● Coqを使うと形式的な証明が行える
● 関数に対して何らかの性質を証明できる
● と言うか証明しないとコンパイルが通らない(事
がある)
○ バグのないプログラム!
● Coqカッコイイ
時間があれば質疑応答に入ります
ご清聴
ありがとうございました

すごいCoq入門