title: Verification of programs using Code Segments and Data Segments author: Yasutaka Higa profile: lang: Japanese # 研究目的 * コードセグメントとデータセグメントという単位を用いてプログラムを記述する手法を提案する * プログラムはコードセグメントという処理の集合として表され、相互に接続される * 個々のコードセグメントを検証し、検証されたコードセグメントどうしの組み合わせによりプログラム全体を検証する # 研究内容 * コードセグメントとデータセグメントを用いたプログラムに対し、自動で検証する機構を提案する * 検証機構には可能な状態を列挙できるモデルチェッカーや、型システムを用いた証明を用いる * 検証をメタ計算として定義し、通常のプログラムから検証を含んだプログラムを導出する * メタ計算の形式化には Monad を用い、通常の計算とメタ計算間の一対一対応を保証する # 近況報告 * Spin 触ってます * チュートリアルとかちょろっと # Spin * Promela によって記述されたコードを実行するもの * Promela は以下のような特徴を持つ * proc という処理単位を並列に実行する * boolean condition の assertion によって性質をチェックする * proc の実行順を列挙することにより、反例などを見付ける # Statements * Promela の構文には2種類の状態がある(executable/blockng) * 代入は always executable * expression は non-zero の時のみ executable * flag == 1 と書くと flag が 1 になるまで blocking # control flow * if によって実行を分岐できる ``` if :: condition -> expression :: condition -> expression ... fi ``` * condition が executable なものから non-deterministic に実行される # repeat * do 構文で if を repeat できる ``` do :: condition -> expression :: condition -> expression ... od ``` # assertion * assert 構文で boolean の assertion ができます * assert 構文は always executable # channel * proc 間の messaging * ほとんど synchironized queue * FIFO * block when take from empty queue * block when put to full queue * golang の channel っぽい。 # 実装周りの話 * 状態は vector にしてるっぽいです * 同じ vector は hash に入れてる # bibliographies * [Spin Online References](http://spinroot.com/spin/Man/) * [Tutorial](http://spinroot.com/spin/Doc/SpinTutorial.pdf) * [Basic Spin Manual](http://spinroot.com/spin/Man/Manual.html)