Mercurial > hg > Document > Growi
view user/ryokka/poster-slide.md @ 121:6138bdc8f9dc
backup 2023-05-11
author | autobackup |
---|---|
date | Thu, 11 May 2023 00:10:04 +0900 |
parents | b6c284fd5ae4 |
children |
line wrap: on
line source
Continuation Based C の Hoare Logic を用いた仕様記述と検証 ===== 琉球大学大学院 : 並列信頼研究室\ 外間 政尊 --- ## OS の検証技術としての Hoare Logic の問題点 - OS やアプリケーションの信頼性は重要な課題 - 信頼性を上げるために仕様の検証が必要 - 検証にはモデル検査や**定理証明**などが存在する - 定理証明では証明の手法と型システムの対応を用いて検証 - また、仕様検証の手法として **Hoare Logic** がある - Hoare Logic ではコマンドを実行する上で事前の条件があり、実行が停止したとき成立する条件がある - コマンドが細かいため大きなプログラムを記述するのが大変 --- ## Hoare Logic をベースにした Gears 単位での検証 - 当研究室では 処理の単位を **CodeGear**、データの単位を **DataGear** としてプログラムを記述する手法を提案している - CodeGear は Input DataGear を受け取り、処理を行って Output DataGear に書き込む - CodeGear は継続を用いて次の CodeGear に接続される - **定理証明支援機**である **Agda** 上で CodeGear DataGear の単位を用いた検証を行う - 本研究では Gears 単位を用いた Hoare Logic ベースの検証手法を提案する --- ## Hoare Logic Hoare Logic はプログラム検証の手法 事前条件( P )が成り立つとき、コマンド( C )を実行すると事後条件( Q )が成り立つ これは **{ P } C { Q }** の形で表され、Hoare Triple と呼ばれる 以下のような while program を検証した n = 10 となっているが検証では n は任意の自然数 ```C n = 10; i = 0; while (n>0) { i++; n--; } ``` --- ## Hoare Logic と while program **Seq** はコマンドを2つ受け取って順に実行する **PComm** は代入 **while** は変数の状態が(0<n)の間、コマンドを繰り返し実行 実際に while program を表すために、コマンドでの構文木を記述している ``` Seq / \ PComm Seq (n=10) / \ PComm While (i=0) | Cond (0<n) | Seq / \ PComm PComm (i++) (n--) ``` 更にこの後、プログラムの仕様を記述して証明する --- ## CbC での Hoare Logic 概略 CodeGear は処理の単位、更にメタレベルの処理を Meta CodeGear という単位で分けてる メタレベルの処理は今見えるところだと CodeGear 間を接続する処理とか ![](./hoare-cg-dg.svg) ![](/attachment/5e469a577b378d004670d3d6) Meta CodeGear で信頼性の検証を行う ## 詳しい話、質問等はポスターで! よろしくお願いします ご静聴ありがとうございました ## CbC での Hoare Logic 記述 「代入」、「ループ」の2つの CodeGear に分けた 代入では「事前条件なし」 から 「n=10 かつ i=0」 ループでは少し条件を緩めて 「n + i = 10」 ループ終了後は 「i=0」が成り立ってるはず というのを Gears 単位上で Hoare Logic っぽく検証しましたというお話になる予定 ---