Submit Search
Upload
ProofSummit2014 : VSTでCの検証
•
3 likes
•
1,480 views
Sosuke MORIGUCHI
Follow
VST(Verifiable C)でCのプログラムを検証する・・・ための入り口 これ以降
Read less
Read more
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 49
Download now
Download to read offline
Recommended
APDC 勉強会 #4 動的解析 - NASA から学ぶ超高信頼ソフトウェア技術
APDC 勉強会 #4 動的解析 - NASA から学ぶ超高信頼ソフトウェア技術
Yutaka Kato
形式手法 (フォーマルメソッド) について簡単に紹介し、Java プログラムを対象としたモデル検査ツール Java PathFinder のデモを行った資料です。 紹介している技術: Java PathFinder (JPF), Spin, Design by Contract, Coq, Agda, CafeOBJ, VDM, VDM++ 発表日: 2016/02/22 ※この発表は個人の見解であり、所属する組織の公式見解ではありません。 ※公開にあたり、一部内容を省略していることがあります。
見ててつらぽよなスライド
見ててつらぽよなスライド
From Atom
見ていて失神しかけるスライドをまとめてみました。ちまちまバージョンアップできたら良いなぁ。
見ててつらぽよなスライドVer1.2
見ててつらぽよなスライドVer1.2
From Atom
バージョンが1.2になりました。 ・箇条書きのつらい例を追加した ・マージンのつらい例を追加した
Git hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうか
Kakigi Katuyuki
ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)
UEHARA, Tetsutaro
第30回まっちゃ139LT
Summerseminar2019
Summerseminar2019
Sosuke MORIGUCHI
DungのAFの超簡単な紹介
PEGの回文っぽいExpression
PEGの回文っぽいExpression
Sosuke MORIGUCHI
PEGで書いた、傍目には回文のように見える式が、なぜ回文を受理しないのかの説明。PEGの入門に・・・どうでしょうかね?
Linear logic (and Linear Lisp)
Linear logic (and Linear Lisp)
Sosuke MORIGUCHI
線形論理のちょっとだけ説明。 若干広く使われている演算子と違う演算子で書かれている。
Recommended
APDC 勉強会 #4 動的解析 - NASA から学ぶ超高信頼ソフトウェア技術
APDC 勉強会 #4 動的解析 - NASA から学ぶ超高信頼ソフトウェア技術
Yutaka Kato
形式手法 (フォーマルメソッド) について簡単に紹介し、Java プログラムを対象としたモデル検査ツール Java PathFinder のデモを行った資料です。 紹介している技術: Java PathFinder (JPF), Spin, Design by Contract, Coq, Agda, CafeOBJ, VDM, VDM++ 発表日: 2016/02/22 ※この発表は個人の見解であり、所属する組織の公式見解ではありません。 ※公開にあたり、一部内容を省略していることがあります。
見ててつらぽよなスライド
見ててつらぽよなスライド
From Atom
見ていて失神しかけるスライドをまとめてみました。ちまちまバージョンアップできたら良いなぁ。
見ててつらぽよなスライドVer1.2
見ててつらぽよなスライドVer1.2
From Atom
バージョンが1.2になりました。 ・箇条書きのつらい例を追加した ・マージンのつらい例を追加した
Git hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうか
Kakigi Katuyuki
ハードディスクの正しい消去(2015.7)
ハードディスクの正しい消去(2015.7)
UEHARA, Tetsutaro
第30回まっちゃ139LT
Summerseminar2019
Summerseminar2019
Sosuke MORIGUCHI
DungのAFの超簡単な紹介
PEGの回文っぽいExpression
PEGの回文っぽいExpression
Sosuke MORIGUCHI
PEGで書いた、傍目には回文のように見える式が、なぜ回文を受理しないのかの説明。PEGの入門に・・・どうでしょうかね?
Linear logic (and Linear Lisp)
Linear logic (and Linear Lisp)
Sosuke MORIGUCHI
線形論理のちょっとだけ説明。 若干広く使われている演算子と違う演算子で書かれている。
fibsを読む
fibsを読む
Sosuke MORIGUCHI
Haskellにおいて、よく遅延評価の説明代わりに使われるフィボナッチ数列の定義について説明。 意図と意味は別物。
Nagoya Matsuri 2013 ぐだぐだAgda
Nagoya Matsuri 2013 ぐだぐだAgda
Sosuke MORIGUCHI
Slide used in Nagoya (Chi-)Matsuri
ProofSummit2013 べらべらAbella
ProofSummit2013 べらべらAbella
Sosuke MORIGUCHI
Explanation of (a small portion of) Abella proof assistant in Japanese.
A/F/C-orientation
A/F/C-orientation
Sosuke MORIGUCHI
Aspect/Feature/Context-orientationの大まかな差について。 英語スライドですが、かなりアバウトな説明なので別に難しくないと思います。 かなり自分の知識だけに基づいているので、偏見なども混じっていると思います。 もし技術的な誤りがある場合、意図的に簡略化したものでなければ修正しますが、もし意図的なものの場合は、申し訳ないですが(修正を検討しますが)直さないこともあります。
Proof Summit 2012
Proof Summit 2012
Sosuke MORIGUCHI
Proof Summit 2012のスライド。
Curry-Howard同型から単純型付ラムダ計算の項を作る
Curry-Howard同型から単純型付ラムダ計算の項を作る
Sosuke MORIGUCHI
例を使って、どうやって作るのかを軽く説明しているだけの資料。
Cartesian Closed Category
Cartesian Closed Category
Sosuke MORIGUCHI
Cartesian Closed Categoryを詳細を飛ばして説明してみたスライド。 参考にした本はB.C.PierceのBasic Category Theory for Computer Scientists。 ただし、CCCに関わる部分以外全て飛ばしている。
More Related Content
More from Sosuke MORIGUCHI
fibsを読む
fibsを読む
Sosuke MORIGUCHI
Haskellにおいて、よく遅延評価の説明代わりに使われるフィボナッチ数列の定義について説明。 意図と意味は別物。
Nagoya Matsuri 2013 ぐだぐだAgda
Nagoya Matsuri 2013 ぐだぐだAgda
Sosuke MORIGUCHI
Slide used in Nagoya (Chi-)Matsuri
ProofSummit2013 べらべらAbella
ProofSummit2013 べらべらAbella
Sosuke MORIGUCHI
Explanation of (a small portion of) Abella proof assistant in Japanese.
A/F/C-orientation
A/F/C-orientation
Sosuke MORIGUCHI
Aspect/Feature/Context-orientationの大まかな差について。 英語スライドですが、かなりアバウトな説明なので別に難しくないと思います。 かなり自分の知識だけに基づいているので、偏見なども混じっていると思います。 もし技術的な誤りがある場合、意図的に簡略化したものでなければ修正しますが、もし意図的なものの場合は、申し訳ないですが(修正を検討しますが)直さないこともあります。
Proof Summit 2012
Proof Summit 2012
Sosuke MORIGUCHI
Proof Summit 2012のスライド。
Curry-Howard同型から単純型付ラムダ計算の項を作る
Curry-Howard同型から単純型付ラムダ計算の項を作る
Sosuke MORIGUCHI
例を使って、どうやって作るのかを軽く説明しているだけの資料。
Cartesian Closed Category
Cartesian Closed Category
Sosuke MORIGUCHI
Cartesian Closed Categoryを詳細を飛ばして説明してみたスライド。 参考にした本はB.C.PierceのBasic Category Theory for Computer Scientists。 ただし、CCCに関わる部分以外全て飛ばしている。
More from Sosuke MORIGUCHI
(7)
fibsを読む
fibsを読む
Nagoya Matsuri 2013 ぐだぐだAgda
Nagoya Matsuri 2013 ぐだぐだAgda
ProofSummit2013 べらべらAbella
ProofSummit2013 べらべらAbella
A/F/C-orientation
A/F/C-orientation
Proof Summit 2012
Proof Summit 2012
Curry-Howard同型から単純型付ラムダ計算の項を作る
Curry-Howard同型から単純型付ラムダ計算の項を作る
Cartesian Closed Category
Cartesian Closed Category
ProofSummit2014 : VSTでCの検証
1.
VSTでCの検証 を始められる入り口まで @chiguri
森口草介 ProofSummit2014 御清聴誠に感謝しております!
2.
お前誰だよ •パンダ –雄鶏付き
•Coq •通称chiguri •今:関西学院大学 –来年はどこだろう •未定 ProofSummit2014 御清聴誠に感謝しております!
3.
ソフトウェア科学会大会で •普通(?)の研究発表をします。 ProofSummit2014
御清聴誠に感謝しております!
4.
7月某日 •:「Proof Summitの
ページ作った」 •chiguri:「あ、参加できそう」 ProofSummit2014 御清聴誠に感謝しております!
5.
つぶやきの数分後 •:「ProofSummitで話せ?」 •「Yes,
Sir!」 3割くらい フィクションです ProofSummit2014 御清聴誠に感謝しております!
6.
気づいたら •3年目 –一昨年:Coqの中身
–去年:Abella •今度のネタは・・・? ProofSummit2014 御清聴誠に感謝しております!
7.
今日の話 VST ProofSummit2014
御清聴誠に感謝しております!
8.
今日の話の流れ •VSTってなに? •VSTっておいしいの?
•VSTってどう使うの? •結局どうなの? 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 御清聴誠に感謝しております!
11.
Verifiable Cってなに? •分離論理を用いたCプログラム
の検証システム –分離論理ではなくプログラム論理 と呼んでいるが、細かい差がよく わからないのでパス –厳密にはC light ProofSummit2014 御清聴誠に感謝しております!
12.
本 •Program Logics
forCertified Compilers ProofSummit2014 御清聴誠に感謝しております!
13.
つまりVSTとは •C用(限らないけど)のツール –ただし正しさの検証済み
ProofSummit2014 御清聴誠に感謝しております!
14.
おいしそうなの? •他にも似たようなのありそう だけど、なんか違うの?
ProofSummit2014 御清聴誠に感謝しております!
15.
CoqにCといえば •CompCert! ProofSummit2014
御清聴誠に感謝しております!
16.
VSTでは •Cから内部表現への変換に CompCertコンパイラを使用
–出力だけじゃない!入力もだ! ProofSummit2014 御清聴誠に感謝しております!
17.
VSTでは •分離論理の正当性の証明に CompCertでの意味論を使用
–中身もだ! ProofSummit2014 御清聴誠に感謝しております!
18.
VSTは •CompCertにべったり! ProofSummit2014
御清聴誠に感謝しております!
19.
VSTは •なんかおいしそう? •CompCertのおかげで信頼?
–特に論理部分の信頼性があるのは 大きい ProofSummit2014 御清聴誠に感謝しております!
20.
どう使うのか •まずCompCertコンパイラと VSTのコードをダウンロード
–VST公式Webからどうぞ •CompCertもリンクあり –現時点でVSTの最新1.4 ProofSummit2014 御清聴誠に感謝しております!
21.
次に •OCamlとCoqを準備 –OCamlは4以降
–Coqは8.4以降 •Windows?VMを入れろ くださいめんどくさい。 ProofSummit2014 御清聴誠に感謝しております!
22.
ビルド •VSTのBUILDなんちゃらとい うファイルにありますので
指示に従ってビルド ProofSummit2014 御清聴誠に感謝しております!
23.
まずCompCert... •時間かかる –clightgenもお忘れなく
•C lightのコードをCoqのデータに落 とすプログラム ProofSummit2014 御清聴誠に感謝しております!
24.
次にVST... •時間かかる –めっさかかる
–Coqの速度向上キボンヌ! ProofSummit2014 御清聴誠に感謝しております!
25.
やっと使える •まず、Cのコードを準備する ProofSummit2014
御清聴誠に感謝しております!
26.
clightgenでCoqのデータ •clightgenhoge.c –includeディレクティブを入れると
大体エラーで死ぬ •処理はできているらしい •ヘッダーは普通のgccを読みに行った ようだ –CompCert用のどこかにある? ProofSummit2014 御清聴誠に感謝しております!
27.
VSTで読み込み •hoge.vをVSTフォルダにおいて 開く
•coqide`cat .loadpath` hoge.v –.loadpathに「必要なモジュール類の ある場所」と「CompCertコンパイラ のモジュール」が指定されてる •開けましたね読めましたね ProofSummit2014 御清聴誠に感謝しております!
28.
新しいファイルを 読むときは •そのCoqIDEから開く方が楽で
しょう ProofSummit2014 御清聴誠に感謝しております!
29.
けんしょう •できたファイルは CプログラムのCoq上での表現
に過ぎない •正しさもなにもない ProofSummit2014 御清聴誠に感謝しております!
30.
とりあえず動かす •0を返すだけの関数を定義 –intzero(void)
{ return 0; } –intmain(void) { return zero(); } •仕様は特にないので、返し値 が0であることを確かめるだけ ProofSummit2014 御清聴誠に感謝しております!
31.
検証の流れ •仕様の定義 •各関数の本体の検証
•全体の検証 –ただの組み合わせ ProofSummit2014 御清聴誠に感謝しております!
32.
仕様の定義 •関数の事前・事後条件 •大域変数の条件
•ループ不変条件は検証時 ProofSummit2014 御清聴誠に感謝しております!
33.
仕様の書き方 •Definition hoge_spec:=
DECLARE _hogeWITH Coqで使う変数 PRE [ 引数] 事前条件 POST [ rettype] 事後条件 ProofSummit2014 御清聴誠に感謝しております!
34.
intzero(void)に対して •Definition zero_spec:=
DECLARE_zeroWITH u : unitPRE [ ] PROP () LOCAL () SEP () POST [ tint ] local (`(eq(VintInt.zero)) retval). 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 御清聴誠に感謝しております!
42.
え、例題他には? •提供されてるものはそれなりに 読んだ(vst/prog内にいろいろ
存在)が、自分で作るのはまだ 辛い –Verifiable CのPDFは存在するが、 文法・論理の説明ばっかりで肝心の 「どう仕様を書くか」がさっぱり だったりする ProofSummit2014 御清聴誠に感謝しております!
43.
肝心の仕様の書き方は? •まだ分からない範囲が広い –eqという述語すら例題から拾って
きた •もっとドキュメント書いて ほしい –作るしかないのか ProofSummit2014 御清聴誠に感謝しております!
44.
構造体は? •listの例がいくつか (progs/reverse.vや
progs/queue.v)あるので参照 –progs/list_dt.vに様々な定理が 記述されている –簡単な例はprogs/nest2.vなどを 参照 ProofSummit2014 御清聴誠に感謝しております!
45.
malloc/freeは? •外部関数として仕様を書きま しょう
–progs/queue.cなどを参照 ProofSummit2014 御清聴誠に感謝しております!
46.
結局どうなの? •VSTいいんじゃない? –基盤も割としっかりしてる
–ツールの導入もそこそこ楽 •時間かかるけど •ただし改善の余地がある –チュートリアルとドキュメント ProofSummit2014 御清聴誠に感謝しております!
47.
要望は? •ライブラリのページがほしい –coqdocで作ればいいんだけど
•チュートリアルほしいなあ –書くための情報がPDFのいろんな節に またがっていて、自分ではかけない •個人的にはcoqtopのラッパーか 何かを作って、より検証に専念 できるようにしてほしいところ ProofSummit2014 御清聴誠に感謝しております!
48.
最後に一言 •Coqのタグジャンプほしい –どこで定義されてるかさっぱり
分からない •知ってる人いたら情報 ください –Coqdoc使えという指摘! ProofSummit2014 御清聴誠に感謝しております!
49.
御清聴誠に感謝しました! 日本語がおかしい?いや知りませんよ。
Download now