Contenu connexe
Plus de Sosuke MORIGUCHI (7)
ProofSummit2014 : VSTでCの検証
- 2. お前誰だよ
•パンダ
–雄鶏付き
•Coq
•通称chiguri
•今:関西学院大学
–来年はどこだろう
•未定
ProofSummit2014
御清聴誠に感謝しております!
- 9. VSTって?
•音楽のアレじゃなくて
–それはVirtual Studio Technology
•Cプログラムのツール群
–Verified Software Toolchainの略
–http://vst.cs.princeton.edu/
•Coqを使う
ProofSummit2014
御清聴誠に感謝しております!
- 10. VSTの中身
•Verifiable C
–今回はこの話
•VeriStar
•Verismall
–Shape analysis用
•右図はVST公式ページより引用
ProofSummit2014
御清聴誠に感謝しております!
- 27. VSTで読み込み
•hoge.vをVSTフォルダにおいて 開く
•coqide`cat .loadpath` hoge.v
–.loadpathに「必要なモジュール類の ある場所」と「CompCertコンパイラ のモジュール」が指定されてる
•開けましたね読めましたね
ProofSummit2014
御清聴誠に感謝しております!
- 35. 事前条件
•PROP (P1; P2; …) LOCAL (Q1; Q2; …) SEP (R1; R2; …)
–順に、 Coqの命題のリスト(WITHで書いたCoqの変数に 関する命題)、 Cにおける局所変数(引数)の関係を表す述語の リスト、 分離論理用の仮定
•変数の範囲などの条件をPROPに書き、LOCALに引数 とCoq上の変数との関係を書く
•SEPはメモリ関係を記述
•今回はどれも特にないので、全部空
ProofSummit2014
御清聴誠に感謝しております!
- 36. main関数の仕様
•事前事後条件のテンプレート がある
•Definition main_spec:= DECLARE _mainWITH u : unitPRE [] main_preproguPOST [ tint ] main_postprogu.
ProofSummit2014
御清聴誠に感謝しております!
- 37. 本体の検証
•body_hoge: semax_body Vprog Gprogf_hogehoge_spec.
–Vprogは大域変数の条件
•型以外書いているケースがほとんどない ため詳細がまだよくわからない
–Gprogは「各関数の仕様」
•Vprog/Gprogはあらかじめリストとし て定義する
ProofSummit2014
御清聴誠に感謝しております!
- 38. 今回の場合
•Definition Vprog: varspecs:= nil.
•Definition Gprog: funspecs:= zero_spec::main_spec::nil.
•Lemma body_zero : semax_body Vprog Gprog f_zero zero_spec.
ProofSummit2014
御清聴誠に感謝しております!
- 39. 証明に使うtactic
•forward
–先頭の文について分離論理の規則に基づいて解釈する
–代入文など、多くの文で実行できる
•一部特化したtacticもある(以下)
•entailer
–証明するものが分離論理の式の場合、自動証明を試みる
–一部残る場合もある
•整数の式などがあると残る
•forward_call
–関数呼び出しに対して使用
–引数を明示的に与える
•配列などの場合対応するヒープなどを渡す必要がある
•とりあえず型が分かりづらい
ProofSummit2014
御清聴誠に感謝しております!
- 40. 他
•forward_while
–次がwhile文の場合に使用
–パラメータとして不変条件が必要
•不変条件の書き方は事前条件と同じ
•entailer!
–entailerに比べて自動証明が強化され ているようだが、残念ながら詳細不明
–とりあえずentailerより先に使ってい る
ProofSummit2014
御清聴誠に感謝しております!
- 41. 全体の検証
•全ての関数について正しさが検証され ているか
–組み込み関数が多数あるが、 semax_func_skipn で解決
–それぞれ検証したものは semax_func_consbody_hoge でつなげ、 semax_func_nil で終了
•全部tactic
ProofSummit2014
御清聴誠に感謝しております!