# HG changeset patch # User atton # Date 1486975286 -32400 # Node ID 26563097333ce9c032b8d5846ed6b8c6a9234745 # Parent 05068a4d0b524452b070d358629c9ddb858703ea Update slide diff -r 05068a4d0b52 -r 26563097333c presentation/slide.html --- a/presentation/slide.html Mon Feb 13 17:39:10 2017 +0900 +++ b/presentation/slide.html Mon Feb 13 17:41:26 2017 +0900 @@ -86,7 +86,7 @@ @@ -111,7 +111,7 @@ @@ -349,7 +349,7 @@

チェックする仕様

-
void verifySpecification(struct Context* context, struct Tree* tree) {
-    assert(!(maxHeight(tree->root, 1) > 2*minHeight(tree->root, 1)));
-        goto meta(context, EnumerateInputs);
+
__code verifySpecificationFinish(struct Context* context) {
+    if (context->data[AkashaInfo]->akashaInfo.maxHeight >
+        2*context->data[AkashaInfo]->akashaInfo.minHeight)
+    {
+        context->next = Exit;
+        goto meta(context, ShowTrace);
     }
+    goto meta(context, DuplicateIterator);
+}
 
diff -r 05068a4d0b52 -r 26563097333c presentation/slide.md --- a/presentation/slide.md Mon Feb 13 17:39:10 2017 +0900 +++ b/presentation/slide.md Mon Feb 13 17:41:26 2017 +0900 @@ -13,7 +13,7 @@ # 二つのアプローチを用いたソフトウェア検証 * モデル検査的アプローチ - * メタ計算ライブラリ akasha による網羅的な実行 + * メタ計算ライブラリ akasha による CbC の網羅的な実行 * 非破壊赤黒木の仕様定義と検証 * 定理証明的なアプローチ * 依存型を持つ証明支援系言語 Agda による CbC の証明 @@ -108,7 +108,7 @@ * 並列に動作するプログラムの仕様を検証可能 * 検証した promela から実行可能な C ソースを生成可能 * 仕様は bool になる式を用いた assert - * promela は C とは記述が異なる + * デメリット: promela は C とは記述が異なる # 既存のモデル検査器 CBMC * CBMC @@ -127,16 +127,21 @@ ![akashaPut](./images/akashaPut.svg){:width="51%"} # チェックする仕様 -* 赤黒木のの高さに関する仕様に以下のものがある +* 赤黒木の高さに関する仕様に以下のものがある * 木をルートから辿った際に最も長い経路は最も短い経路の高々2倍に収まる * 以下のように assert を用いて CbC で定義できる * この仕様が満たされるかをチェックする ``` -void verifySpecification(struct Context* context, struct Tree* tree) { - assert(!(maxHeight(tree->root, 1) > 2*minHeight(tree->root, 1))); - goto meta(context, EnumerateInputs); +__code verifySpecificationFinish(struct Context* context) { + if (context->data[AkashaInfo]->akashaInfo.maxHeight > + 2*context->data[AkashaInfo]->akashaInfo.minHeight) + { + context->next = Exit; + goto meta(context, ShowTrace); } + goto meta(context, DuplicateIterator); +} ``` # akasha と CBMC の比較 diff -r 05068a4d0b52 -r 26563097333c presentation/slide.pdf.html --- a/presentation/slide.pdf.html Mon Feb 13 17:39:10 2017 +0900 +++ b/presentation/slide.pdf.html Mon Feb 13 17:41:26 2017 +0900 @@ -70,7 +70,7 @@ @@ -95,7 +95,7 @@
  • モデル検査的アプローチ
      -
    • メタ計算ライブラリ akasha による網羅的な実行
    • +
    • メタ計算ライブラリ akasha による CbC の網羅的な実行
    • 非破壊赤黒木の仕様定義と検証
  • @@ -285,7 +285,7 @@
  • 並列に動作するプログラムの仕様を検証可能
  • 検証した promela から実行可能な C ソースを生成可能
  • 仕様は bool になる式を用いた assert
  • -
  • promela は C とは記述が異なる
  • +
  • デメリット: promela は C とは記述が異なる
@@ -333,7 +333,7 @@

チェックする仕様

    -
  • 赤黒木のの高さに関する仕様に以下のものがある +
  • 赤黒木の高さに関する仕様に以下のものがある
    • 木をルートから辿った際に最も長い経路は最も短い経路の高々2倍に収まる
    @@ -342,10 +342,15 @@
  • この仕様が満たされるかをチェックする
-
void verifySpecification(struct Context* context, struct Tree* tree) {
-    assert(!(maxHeight(tree->root, 1) > 2*minHeight(tree->root, 1)));
-        goto meta(context, EnumerateInputs);
+
__code verifySpecificationFinish(struct Context* context) {
+    if (context->data[AkashaInfo]->akashaInfo.maxHeight >
+        2*context->data[AkashaInfo]->akashaInfo.minHeight)
+    {
+        context->next = Exit;
+        goto meta(context, ShowTrace);
     }
+    goto meta(context, DuplicateIterator);
+}