シンボリックモデルチェックは、Kripkeモデルのようなモデルを使用したCTLのような式としての状態セットと遷移関係の表現に基づく状態空間トラバーサルであることを知っています。私は理論を知っています。しかし、実際のアプリケーションを理解するのは難しいと感じています。正確にどこで使用されていますか?それは正確には何をし、どのように機能しますか?
誰かが実際の例で説明し、理論を実践に関連付けることはできますか?
シンボリックモデルチェックは、Kripkeモデルのようなモデルを使用したCTLのような式としての状態セットと遷移関係の表現に基づく状態空間トラバーサルであることを知っています。私は理論を知っています。しかし、実際のアプリケーションを理解するのは難しいと感じています。正確にどこで使用されていますか?それは正確には何をし、どのように機能しますか?
誰かが実際の例で説明し、理論を実践に関連付けることはできますか?
回答:
シンボリックモデルチェックは、シンボリック状態で機能するモデルチェックです。つまり、状態を記号表現、通常は順序付き二分決定グラフ(OBDD)にエンコードします。
問題は、彼らが何をし、どのように機能するかです。
最初に、いくつかのアプリケーションのソースコードを用意します。次に、ソースコードをクリプケ構造のような状態遷移グラフに変換します。状態は、その特定の状態で何が真実であるかを説明する原子命題で満たされています。シンボリックモデルチェックでは、アトミックな命題がOBDDとしてエンコードされ、スペースを節約してパフォーマンスを向上させます。
次に、モデルチェッカーはいくつかの初期状態から開始し、状態を調べて、状態遷移グラフでエラーを探します。エラーが見つかると、多くの場合、エラーを示すテストケースが生成されます。シンボリックOBDDを使用して、状態空間をある程度最適にナビゲートします。そこでもっと説明できたらいいのにと思っています。
しかし、それは基本的にそれだけです。プログラムを形式モデル(状態遷移グラフ)に変換し、シンボリック最適化を使用して状態空間をナビゲートして(LTL / CTL仕様と比較して)エラーを探します。そして、エラーが見つかった場合、モデルチェッカーはドキュメント化して解決するのに役立つ情報を提供します。
シンボリックモデルチェックは、通信およびセキュリティプロトコルの正確性を検証するのに非常に役立ちます。例えば:
これは、すべてのプリミティブ関数とプロトコルアルゴリズムのシンボリックな記述を記述し、ProVerifなどのシンボリックモデルチェッカーを使用して状態空間を走査し、好ましくない結果を生成する状態の組み合わせを検出しようとします。ProVerifの場合、シンボリックモデルは、適用されたPi計算をモデリング言語として使用して記述されます。これにより、機能的なMLのような構文でプロトコルを記述できます。