(57)【特許請求の範囲】
【請求項１】
イベントに応じて変化する状態の遷移条件を表形式であらわした状態遷移表に対応する状態遷移情報を取得する取得部と、
前記状態遷移表がとりうる前記状態を各ノードとする木構造の階層ごとに、前記遷移条件を一階論理式化した論理式を前記状態遷移情報から生成する論理式生成部と、
前記論理式生成部によって生成された前記論理式に基づいて充足性モジュロ理論による検査を実行する検査実行部と
を備えることを特徴とするモデル検査装置。
【請求項２】
前記論理式生成部は、
最初の前記階層からあらかじめ指定された前記階層までの前記階層ごとに１つの前記論理式をそれぞれ生成することを特徴とする請求項１に記載のモデル検査装置。
【請求項３】
前記状態遷移情報は、
１つの前記状態遷移表から他の前記状態遷移表へ発行される外部イベントに関する情報を含んでおり、
前記論理式生成部は、
前記外部イベントに関する情報を含んだ前記遷移条件を前記階層ごとに一階論理式化した前記論理式を生成することを特徴とする請求項１または２に記載のモデル検査装置。
【請求項４】
前記検査実行部は、
前記論理式が満たすべき性質を示す検査条件に基づいて前記検査を実行することを特徴とする請求項１、２または３に記載のモデル検査装置。
【請求項５】
イベントに応じて変化する状態の遷移条件を表形式であらわした状態遷移表に対応する状態遷移情報を取得する取得工程と、
前記状態遷移表がとりうる前記状態を各ノードとする木構造の階層ごとに、前記遷移条件を一階論理式化した論理式を前記状態遷移情報から生成する論理式生成工程と、
前記論理式生成工程によって生成された前記論理式に基づいて充足性モジュロ理論による検査を実行する検査実行工程と
を含むことを特徴とするモデル検査方法。
【請求項６】
イベントに応じて変化する状態の遷移条件を表形式であらわした状態遷移表に対応する状態遷移情報を取得する取得手順と、
前記状態遷移表がとりうる前記状態を各ノードとする木構造の階層ごとに、前記遷移条件を一階論理式化した論理式を前記状態遷移情報から生成する論理式生成手順と、
前記論理式生成手順によって生成された前記論理式に基づいて充足性モジュロ理論による検査を実行する検査実行手順と
をコンピュータに実行させることを特徴とするモデル検査プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モデル検査装置、モデル検査方法およびモデル検査プログラムに関する。
【背景技術】
【０００２】
従来、ハードウェアやソフトウェアから導出されたモデルが、設計仕様を満たすか否かを検査するモデル検査手法が知られている。かかるモデル検査手法では、検査対象となるモデルがとりうる状態ごとに、各状態が設計仕様を満たすか否かを網羅的に検査する。
【０００３】
なお、特許文献１には、コンピュータプログラムに対して上記したモデル検査手法を適用する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１２３２０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のモデル検査手法には、検査対象となるモデルの状態数や遷移条件項目数が増加すると、モデル検査で使用するメモリ量が爆発的に増加してしまうという問題、すなわち、「状態爆発の問題」があった。
【０００６】
また、特許文献１の技術には、モデル検査の検査対象が、コンピュータプログラムに限定されてしまうという問題もあった。すなわち、特許文献１の技術は、独立した人や物をそれぞれモデル化した場合のように、非同期な振る舞いモデルについては、モデル検査の検査対象とすることができなかった。
【０００７】
開示の技術は、上記に鑑みてなされたものであって、状態爆発の問題を回避しつつ、モデル検査の検査対象を拡大することができるモデル検査装置、モデル検査方法およびモデル検査プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本願の開示するモデル検査装置は、イベントに応じて変化する状態の遷移条件を表形式であらわした状態遷移表に対応する状態遷移情報を取得する取得部と、前記状態遷移表がとりうる前記状態を各ノードとする木構造の階層ごとに、前記遷移条件を一階論理式化した論理式を前記状態遷移情報から生成する論理式生成部と、前記論理式生成部によって生成された前記論理式に基づいて充足性モジュロ理論による検査を実行する検査実行部とを備える。
【発明の効果】
【０００９】
本願の開示するモデル検査装置によれば、状態爆発の問題を回避しつつ、モデル検査の検査対象を拡大することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本実施例に係るモデル検査手法の説明図である。
【図２】図２は、一階論理式化の説明図である。
【図３】図３は、モデル検査装置の構成を示すブロック図である。
【図４】図４は、状態遷移表の例を示す図である。
【図５】図５は、状態遷移の例を示す図である。
【図６】図６は、モデル検査装置を用いたモデル検査手順の例を示す図である。
【図７】図７は、モデル検査装置が実行する処理手順を示すフローチャートである。
【図８】図８は、モデル検査処理の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照して、本願の開示するモデル検査装置、モデル検査方法およびモデル検査プログラムの実施例を詳細に説明する。なお、以下に示す実施例における例示で本発明が限定されるものではない。
【００１２】
また、以下に示す実施例では、複数の状態遷移表をモデル検査の対象とする場合について説明するが、当然ながら、１つの状態遷移表のみをモデル検査の対象とすることもできる。
【実施例】
【００１３】
まず、本実施例に係るモデル検査手法について、図１および図２を用いて説明する。図１は、本実施例に係るモデル検査手法の説明図であり、図２は、一階論理式化の説明図である。
【００１４】
図１に示すように、本実施例に係るモデル検査手法は、複数の状態遷移表からなる状態遷移表群を入力として受け取り、各状態遷移表がとりうるすべての「状態」について、あらかじめ定められた検査条件を満たすか否かを網羅的に検査する。なお、「状態」とは、１または複数の状態遷移表に含まれる変数群の各変数値の組み合わせを指す。
【００１５】
ここで、本実施例に係るモデル検査手法は、状態の遷移を木構造で表現した場合における、状態階層（以下、単に「階層」と記載する場合もある）ごとに、遷移条件を一階論理式化した論理式を生成する。そして、各階層に対応する論理式ごとに、上記した検査条件を満たすか否かを検査する。
【００１６】
かかる一階論理式化について図２を用いて説明しておく。図２の（Ａ）に示したのは、状態の遷移をあらわす木構造である。たとえば、この木構造としては、いわゆるクリプキ構造を用いることができる。
【００１７】
図２の（Ａ）には、各「状態」および状態間の「遷移」の例を示しており、各状態を「楕円」、状態から状態への遷移を「矢印」であらわしている。ここで、「状態Ｓ０」は、初期状態であり、「状態Ｓ１」または「状態Ｓ２」へ遷移する。また、「状態Ｓ１」は、「状態Ｓ３」または「状態Ｓ４」へ遷移する。
【００１８】
一般的に、モデル検査では、各「状態」が、それぞれ検査条件を満たすか否かを検査するが、各「状態」に対応するデータをメモリへ記憶させる必要がある。このため、検査すべき状態に含まれる要素数や、状態自体の個数が増えると、メモリへ記憶させるべきデータ量は急激に増加する。たとえば、図２の（Ａ）および（Ｂ）では、「状態Ｓ０」〜「状態Ｓ９」の１０個の状態を例示しているが、実際の状態の数は、非常に大きいことが通常である。
【００１９】
しかしながら、物理的なメモリ量を超えたモデル検査は不可能であるため、検査すべき状態に対応するメモリ量を確保できない場合には、モデル検査自体を行うことができない。また、仮にメモリ量を確保できた場合であっても、モデル検査に要する物理的なコストはかさんでしまう。そして、このような問題は、「状態空間爆発問題」、あるいは、単に「状態爆発の問題」と呼ばれる。
【００２０】
そこで、図２の（Ｂ）に示すように、本実施例に係るモデル検査手法では、図２の（Ａ）に示した木構造の階層ごとに、１つの階層に含まれるすべての状態に関する遷移条件を一階論理式化することで、１つの論理式としてあらわすこととした。なお、かかる論理式の詳細な内容については後述することとする。
【００２１】
また、図２の（Ｂ）に示すように、本実施例に係るモデル検査手法では、階層ｋについて、「ｋ＝０」から「ｋ＝ｂｄ」までの範囲で、それぞれ論理式を生成することとした。ここで、「ｂｄ」は、「探索深度」と呼ばれ、この探索深度には任意の深度（階層）を指定することができる。
【００２２】
このように、本実施例に係るモデル検査手法によれば、検査すべき状態の個数が非常に多い場合であっても、有限個数の論理式を検査すれば足りるので、上記した「状態爆発の問題」を回避することができる。すなわち、状態空間を縮減することによって、「状態爆発の問題」を回避することができる。また、状態空間の縮減によって検査の高速化を図ることができる。
【００２３】
すなわち、図１に示すように、本実施例に係るモデル検査手法は、状態遷移表群の状態階層ごとに遷移条件を一階論理式化し（図１の（Ａ）参照）、論理式（ｋ＝０）から論理式（ｋ＝ｂｄ）までの「ｂｄ＋１」個の論理式群を生成する。
【００２４】
そして、本実施例に係るモデル検査手法は、生成した論理式群と、論理式群が満たすべき性質を示す検査条件とをＳＭＴ（Satisfiability  Modulo  Theories：充足性モジュロ理論）ソルバへ入力する（図１の（Ｂ−１）および（Ｂ−２）参照）。なお、ＳＭＴソルバとしては、一般的に流通している各種ＳＭＴソルバを用いることができる。
【００２５】
さらに、本実施例に係るモデル検査手法は、ＳＭＴソルバの出力に基づいて反例情報を生成し、生成した反例情報を出力する（図１の（Ｃ）参照）。ここで、反例とは、検査条件に反する状態およびかかる状態に至る状態の履歴を指す。
【００２６】
このように、本実施例に係るモデル検査手法は、状態遷移表をモデル検査の対象としているので、コンピュータプログラムに限らず、非同期な振る舞いモデルをもモデル検査することができる。すなわち、本実施例に係るモデル検査手法は、モデル検査の対象を拡大することができる。
【００２７】
また、本実施例に係るモデル検査手法は、状態階層ごとに生成した論理式を用いて有限界モデル検査（ＢＭＣ：Bounded  Model  Checked）を行うので、状態爆発の問題を回避するとともに、検査の高速化を図ることができる。
【００２８】
次に、図１および図２を用いて説明したモデル検査手法を適用したモデル検査装置の構成について図３を用いて説明する。図３は、モデル検査装置１０の構成を示すブロック図である。
【００２９】
図３に示すように、モデル検査装置１０は、入力部１１と、表示部１２と、出力部１３と、制御部１４と、記憶部１５とを備える。また、制御部１４は、取得部１４ａと、変換部１４ｂと、論理式生成部１４ｃと、検査部１４ｄとをさらに備えており、記憶部１５は、検査条件情報１５ａと、状態遷移情報１５ｂと、論理式情報１５ｃとを記憶する。
【００３０】
入力部１１は、キーボードやマウスといった入力デバイス、可搬型記憶媒体のリーダ、他装置との通信を行う通信ボードなどで構成される。また、この入力部１１は、受け取ったデータを制御部１４へ渡す処理を行う。
【００３１】
表示部１２は、ディスプレイ装置などの表示デバイスである。この表示部１２は、制御部１４の検査部１４ｄから渡された検査結果や、検査に用いる条件などを表示する。また、出力部１３は、可搬型記憶媒体のライタ、他装置との通信を行う通信ボードなどで構成される。そして、この出力部１３は、制御部１４の検査部１４ｄから渡された検査結果を可搬型記憶媒体や他装置などに対して出力する処理を行う。
【００３２】
制御部１４は、モデル検査装置１０の全体制御を行う制御部である。取得部１４ａは、入力部１１から受け取ったデータを、記憶部１５へ記憶させる処理を行う。具体的には、この取得部１４ａは、モデル検査において検査対象が満たすべき性質を示す検査条件を、入力部１１から受け取った場合には、受け取った検査条件を検査条件情報１５ａとして記憶部１５へ記憶させる。
【００３３】
また、取得部１４ａは、状態遷移表に対応する情報を、入力部１１から受け取った場合には、受け取った情報を状態遷移情報１５ｂとして記憶部１５へ記憶させる。ここで、この状態遷移情報１５ｂの具体例を説明するために、状態遷移表の例および状態遷移の例について図４および図５を用いて説明しておく。
【００３４】
図４は、状態遷移表の例を示す図である。なお、図４の（Ａ）には、状態遷移表ＳＴＭ１を、同じく（Ｂ）には、状態遷移表ＳＴＭ２を、それぞれ例示しているが、状態遷移表の個数には、特に、制限はない。
【００３５】
図４の（Ａ）および（Ｂ）に示すように、状態遷移表は、「イベント」を受け取った場合に、現在の「状態」がどの「状態」へ遷移するか、各種変数がどのように変化するか、どのような「イベント」が発行されるか、を示す「アクション」を定義した情報である。
【００３６】
図４の（Ａ）に示す状態遷移表ＳＴＭ１がとりうる「状態」は、「ＳＴＳ１１」および「ＳＴＳ１２」である。また、状態遷移表ＳＴＭ１が受け取る「イベント」は、「ｅｖｔ１１」および「ｅｖｔ１２」である。そして、所定の「状態」と、所定の「イベント」とで特定される要素は、「セル」と呼ばれる。
【００３７】
たとえば、状態遷移表ＳＴＭ１における現在の状態が「ＳＴＳ１１」である場合に、「ｅｖｔ１１」を受け取ると、状態は、「ＳＴＳ１２」へ遷移する。また、変数ａａは、「０」へ変化する。そして、現在の状態が「ＳＴＳ１２」である場合に、「ｅｖｔ１２」を受け取ると、状態は、「ＳＴＳ１１」へ遷移する。
【００３８】
また、変数ｂｂには「１００」が加算され、変数ｃｃから変数ｂｂを差し引いた値があらたな変数ｃｃの値となる。さらに、状態遷移表ＳＴＭ２に対して「ｅｖｔ２１」が発行される。
【００３９】
なお、このように、他の状態遷移表へ向けて発行されるイベントは、「外部イベント」と呼ばれる。また、図４の（Ａ）において「／」が記載されたセルは、「状態」と「イベント」との組み合わせはありえるものの、処理を行わない「無視セル」をあらわしている。
【００４０】
そして、「×」が記載されたセルは、「状態」と「イベント」との組み合わせがありえない「不可セル」をあらわしている。なお、上記した「アクション」が定義されたセルは、「通常セル」と呼ばれる。
【００４１】
次に、状態遷移表ＳＴＭ２について説明する。図４の（Ｂ）に示す状態遷移表ＳＴＭ２がとりうる「状態」は、「ＳＴＳ２１」および「ＳＴＳ２２」である。また、状態遷移表ＳＴＭ２が受け取る「イベント」は、「ｅｖｔ２１」および「ｅｖｔ２２」である。なお、「ｅｖｔ２１」は、図４の（Ａ）に示した状態遷移表ＳＴＭ１から発行される外部イベントである。
【００４２】
たとえば、状態遷移表ＳＴＭ２における現在の状態が「ＳＴＳ２１」である場合に、「ｅｖｔ２１」を受け取ると、状態は、「ＳＴＳ２２」へ遷移する。また、変数ｃｃには「２００」が加算される。そして、現在の状態が「ＳＴＳ２２」である場合に、「ｅｖｔ２２」を受け取ると、状態は、「ＳＴＳ２１」へ遷移する。また、変数ｃｃは「０」へ変化する。
【００４３】
このように、各状態遷移表は、「状態」と「イベント」との組み合わせで特定される「セル」において、遷移先となる「状態」や、各種変数の変化、イベントの発行といったアクション（遷移条件）が定義された情報である。
【００４４】
そして、上記した取得部１４ａは、このような状態遷移表に対応する情報を、あらかじめ定められた所定の形式へ変更することによって状態遷移情報１５ｂを生成し、生成した状態遷移情報１５ｂを記憶部１５へ記憶させる。
【００４５】
なお、図４の（Ａ）および（Ｂ）には、それぞれ独立した状態遷移表を例示したが、状態遷移表におけるセルに、他の状態遷移表を挿入した「入れ子形式」の状態遷移表を用いることとしてもよい。
【００４６】
また、図４の（Ａ）および（Ｂ）では、「状態」および「イベント」の個数がそれぞれ２個の状態遷移表を例示したが、「状態」の個数、あるいは、「イベント」の個数には、特に、制限はない。
【００４７】
次に、状態遷移の例について図５を用いて説明する。図５は、状態遷移の例を示す図である。なお、図５の（Ａ）には、状態遷移の説明に用いる状態遷移表群を、図５の（Ｂ）には、状態遷移表における各種変数の初期値を、図５の（Ｃ）には、状態遷移の例を、それぞれ示している。
【００４８】
以下、図５の（Ａ）に示す３つの状態遷移表（状態遷移表ＳＴＭ１、状態遷移表ＳＴＭ２および状態遷移表ＳＴＭ３）を用いて状態遷移の説明を行う。なお、図５の（Ａ）に示す各状態遷移表では、外部変数ａおよび外部変数ｂを、「イベント」として取り扱う。また、図５の（Ａ）に示すように、各状態遷移表のセルに括弧付きで示した「ｔ１」〜「ｔ９」は、状態間の「遷移」をあらわす。
【００４９】
たとえば、状態遷移表ＳＴＭ１における現在の状態（ｓｔａｔｕｓ１）が「ｓ１」である場合に、外部変数ａが１と等しければ、状態は「ｓ２」へ、外部変数ｂは「１」へ、それぞれ更新される。そして、このような遷移は、「ｔ１」とあらわされる。なお、図５の（Ａ）に示す３つの状態遷移表（状態遷移表ＳＴＭ１、状態遷移表ＳＴＭ２および状態遷移表ＳＴＭ３）は、それぞれ、非同期かつ並列に状態遷移を行う独立した状態遷移表である。
【００５０】
また、図５の（Ａ）に示した各状態遷移表の各種変数は、図５の（Ｂ）に示す初期値へ初期化される。具体的には、外部変数ａは「１」へ、外部変数ｂは「０」へ、状態遷移表ＳＴＭ１の状態（ｓｔａｔｕｓ１）は「ｓ１」へ、それぞれ初期化される。また、状態遷移表ＳＴＭ２の状態（ｓｔａｔｕｓ２）は「ｓ３」へ、状態遷移表ＳＴＭ３の状態（ｓｔａｔｕｓ３）は「ｓ５」へ、それぞれ初期化される。
【００５１】
そして、図５の（Ａ）および（Ｂ）に示した条件を前提とすると、状態遷移は、図５の（Ｃ）のようにあらわされる。
【００５２】
すなわち、図５の（Ｃ）に示すように、初期状態に相当する「状態Ｓ０」では、外部変数ａ、外部変数ｂ、状態遷移表ＳＴＭ１の状態（ｓｔａｔｕｓ１）、状態遷移表ＳＴＭ２の状態（ｓｔａｔｕｓ２）および状態遷移表ＳＴＭ３の状態（ｓｔａｔｕｓ３）は、それぞれ図５の（Ｂ）に示した初期値をとる。
【００５３】
ここで、「状態Ｓ０」における外部変数ｂの値は「０」であるが、図５の（Ａ）に示した各状態遷移表の「イベント」には、「ｂ＝＝０」が存在しない。一方、「状態Ｓ０」における外部変数ａの値は「１」であり、状態遷移表ＳＴＭ１および状態遷移表ＳＴＭ２の「イベント」には、「ａ＝＝１」が存在する。
【００５４】
そして、状態遷移表ＳＴＭ１の状態（ｓｔａｔｕｓ１）は「ｓ１」であるので、「ｓ１」と「ａ＝＝１」との組み合わせに対応するセルにおける遷移（ｔ１）は可能である。また、状態遷移表ＳＴＭ２の状態（ｓｔａｔｕｓ２）は「ｓ３」であるので、「ｓ３」と「ａ＝＝１」との組み合わせに対応するセルにおける遷移（ｔ４）も可能である。なお、その他の遷移は不可能であるので、「状態Ｓ０」においては、「状態Ｓ１」への遷移（ｔ１）と、「状態Ｓ２」への遷移（ｔ４）とが発生しうる。
【００５５】
そして、「状態Ｓ０」から「状態Ｓ１」への遷移（ｔ１）に伴い、外部変数ｂは「１」へ、状態遷移表ＳＴＭ１の状態（ｓｔａｔｕｓ１）は「ｓ２」へ、それぞれ更新される（状態Ｓ１における破線の閉領域参照）。また、「状態Ｓ０」から「状態Ｓ２」への遷移（ｔ４）に伴い、外部変数ｂは「２」へ、状態遷移表ＳＴＭ２の状態（ｓｔａｔｕｓ２）は「ｓ４」へ、それぞれ更新される（状態Ｓ２における破線の閉領域参照）。
【００５６】
このように、各状態遷移表がとりうる各「状態」は、各状態遷移表が更新する各種変数の組み合わせとして表現される。また、現在の「状態」は、少なくとも１つの変数が変更されれば、他の「状態」へと「遷移」する。
【００５７】
なお、図５の（Ｃ）に示すように、「状態Ｓ１」においては、遷移（ｔ３）、遷移（ｔ４）および遷移（ｔ８）が発生しうる。また「状態Ｓ２」においては、遷移（ｔ１）および遷移（ｔ６）が発生しうる。なお、以下、同様に状態遷移が行われていくことになる。
【００５８】
そして、後述する変換部１４ｂは、モデル検査の対象となる状態遷移表（非同期かつ並列に状態遷移を行う状態遷移表群に属する状態遷移表）に対応する状態遷移情報１５ｂを、記憶部１５から抽出することになる。なお、図５の（Ａ）には、３個の状態遷移表を例示したが、状態遷移表の個数には、特に、制限はない。
【００５９】
図３の説明に戻り、制御部１４の説明をつづける。変換部１４ｂは、モデル検査の対象となる状態遷移表に対応する状態遷移情報１５ｂを、記憶部１５から抽出するとともに、抽出した状態遷移情報１５ｂを論理式生成部１４ｃへ渡す処理を行う。なお、この変換部１４ｂは、上記した入れ子形式の複数の状態遷移表を、１つの状態遷移表へ展開する処理を併せて行う。
【００６０】
ここで、並列に存在する状態遷移表の各単位を「タスク」と呼ぶこととすると、変換部１４ｂは、並列に存在するすべてのタスクにそれぞれ対応する状態遷移情報１５ｂを、記憶部から抽出する。なお、「並列に存在するすべてのタスク」は、「挙動単位」とも呼ばれる。
【００６１】
論理式生成部１４ｃは、変換部１４ｂから受け取った状態遷移情報１５ｂを、状態階層ごとに一階論理式化することによって、各階層に対応する論理式をそれぞれ生成する処理を行う。ここで、この論理式生成部１４ｃが、状態遷移情報１５ｂから論理式を生成する生成処理について具体的に説明する。
【００６２】
なお、以下に示す論理式においては、「∧」はＡＮＤ（論理積）を、「∨」はＯＲ（論理和）を示す。また、「∧」を数列としてあらわす場合には「Λ」を、「∨」を数列としてあらわす場合には「Ｖ」を、それぞれ用いることとする。なお、「¬」は否定をあらわしている。
【００６３】
各状態遷移表を「Ｈｉ」（ただし、ｉは１以上ｎ以下の整数）、ｋ番目の階層（図２の（Ｂ）参照）における各状態遷移表の状態を「ｓｔａｔｕｓＨｉ［ｋ］」、ｋ番目の階層における全ての変数を「Ｖａｒ（Ｄ）［ｋ］」、変数の値を「ｖａｌｕｅ（Ｖａｒ（Ｄ）［ｋ］）」、ｋ番目の階層に対応する論理式をｓｔｅｐ［ｋ］とすると、０番目の階層、すなわち、ルート階層の論理式「ｓｔｅｐ［０］」は、
【数１】
0005396406.tif 000002
であらわされる。なお、「Ｄ」は、状態遷移表Ｈ１〜Ｈｎを含んだ状態遷移表デザインを指す。
【００６４】
ここで、式（１）は、０番目の階層では、変数群の各変数値に初期値が設定され、すべての状態遷移表Ｈｉにおける状態ｓｔａｔｕｓＨｉが０へ初期化されることを示している。
【００６５】
次に、通常セルを「ｃ」、ｋ番目の階層における通常セルｃの遷移条件を「ｇｕａｒｄｓ（ｃ）［ｋ］」、ｋ番目の階層における通常セルｃから発生するイベントを「ｅｖｅｎｔ（ｃ）［ｋ］」、通常セルｃにおける状態の遷移前の値を「ｓｏｕｒｃｅ（ｃ）」とすると、ｋ番目の階層における通常セルｃの活性条件「ｅｎａｂｌｅｄ（ｃ）［ｋ］」は、
【数２】
0005396406.tif 000003
であらわされる。なお、ｋは、１以上ｂｄ以下の整数である。
【００６６】
ここで、式（２）は、ｋ番目の階層の通常セルｃでアクションの実行が可能となる条件が、ｋ−１番目の階層で３つの条件をすべて満たすことである旨を示している。つまり、ｋ−１番目の階層で、遷移条件を満たし、かつ、イベントがディスパッチされ、かつ、状態遷移表の状態が更新された場合に、ｋ番目の階層の通常セルｃにおいてアクションの実行が可能となる。
【００６７】
次に、ｋ番目の階層の通常セルｃにおいてアクションが実行された結果について説明する。ｋ番目の階層における通常セルｃのアクション群を「ａｃｔｉｏｎｓ（ｃ）［ｋ］」、通常セルｃにおける状態の遷移後の値を「ｔａｒｇｅｔ（ｃ）」とすると、アクションの実行結果「ｅｆｆｅｃｔｓ（ｃ）［ｋ］」は、
【数３】
0005396406.tif 000004
であらわされる。
【００６８】
ここで、式（３）は、アクション群が実行され、かつ、状態遷移表の状態が遷移後の値へ更新されることが、アクションの実行結果である旨を示している。
【００６９】
次に、式（３）に示した「ａｃｔｉｏｎｓ（ｃ）［ｋ］」についてさらに詳細に説明する。ｋ番目の階層について、アクション群を構成するｍ個のステートメントをｓｔｌ［ｋ］、変数を「ｘ」、変数ｘの母集合を「Ｘ」とすると、「ａｃｔｉｏｎｓ（ｃ）［ｋ］」は、
【数４】
0005396406.tif 000005
であらわされる。
【００７０】
ここで、式（４）は、ｍ個のステートメントｓｔｌ［ｋ］による操作によって変数ｘが変更され、かつ、ｓｔｌ［ｋ］によって操作されなかった変数ｘについてはｋ−１番目の階層とｋ番目の階層とで変化がないことが、「ａｃｔｉｏｎｓ（ｃ）［ｋ］」として定義される旨を示している。
【００７１】
そして、上記した式（２）、式（３）および式（４）から、ｋ番目の階層における通常セルｃ［ｋ］は、
【数５】
0005396406.tif 000006
であらわされる。なお、「ａｌｌＶａｒ（Ｄ）」は、状態遷移表デザインＤに含まれる全ての変数であり、変数ｘは、「ａｌｌＶａｒ（Ｄ）」に属している。
【００７２】
ここで、式（５）は、ｋ番目の階層における通常セルｃ［ｋ］が、アクションの実行が可能なセル、または、アクションの実行が不可能なセルからなることをあらわしている。
【００７３】
また、式（５）は、アクションの実行が可能なセルについては、アクションの実行結果が反映され、アクションの実行が不可能なセルについては、ｋ−１番目の階層とｋ番目の階層とで変数ｘに変化がない旨を併せてあらわしている。
【００７４】
次に、外部イベントに関する論理式について説明する。外部変数を「ｅ」とすると、ｋ番目の階層において外部変数「ｅ」を操作する外部イベントによる影響「ｅｘｔ（ｅ）［ｋ］」は、
【数６】
0005396406.tif 000007
であらわされる。なお、「＼｛ｅ｝」は、外部変数「ｅ」を除く旨をあらわしている。
【００７５】
ここで、式（６）は、ｋ−１番目の階層と、ｋ番目の階層とで外部変数ｅが変化した場合には、外部変数ｅ以外のすべての変数ｘが不変であり、ｋ−１番目の階層と、ｋ番目の階層とで外部変数ｅが変化しない場合には、外部変数ｅを含むすべての変数ｘが不変である旨をあらわしている。
【００７６】
なお、式（６）では、外部変数ｅが２値変数（Ｂｏｏｌｅａｎ）である場合を例示しているが、外部変数は２値変数には限られない。
【００７７】
そして、式（５）におけるｃ［ｋ］と、式（６）におけるｅｘｔ（ｅ）［ｋ］とを用いると、ｋ番目の階層における論理式「ｓｔｅｐ［ｋ］」は、
【数７】
0005396406.tif 000008
であらわされる。
【００７８】
なお、「ｃ∈Ｈｉ．Ｃｎｏｒｍａｌ」は、式（７）におけるｃ［ｋ］が、状態遷移表Ｈｉにおけるすべての通常セルである旨を、「ｅ∈Ｈｉ．Ｅｅｘｔｅｒｎａｌ」は、同じくｅｘｔ（ｅ）［ｋ］が、状態遷移表Ｈｉにおけるすべての外部変数である旨を、それぞれあらわしている。
【００７９】
ここで、式（７）は、ｋ番目の階層における論理式「ｓｔｅｐ［ｋ］」が、ｎ個の状態遷移表Ｈｉそれぞれにおける、通常セルｃ［ｋ］の内部的な遷移と、外部変数ｅによる外部的な遷移とで定義される旨をあらわしている。
【００８０】
論理式生成部１４ｃは、このようにして、変換部１４ｂから受け取った状態遷移情報１５ｂを、状態階層ごとに一階論理式化する。そして、論理式生成部１４ｃは、生成した論理式を、論理式情報１５ｃとして記憶部１５へ記憶させる。
【００８１】
検査部１４ｄは、各階層に対応する論理式を含む論理式情報１５ｃが、検査条件情報１５ａに含まれる検査条件に合致するか否かを検査する処理を行う。なお、この検査部１４ｄとしては、一般的に流通している各種ＳＭＴソルバを用いることができる。
【００８２】
また、検査部１４ｄは、各階層に対応する論理式が、検査条件に反することを検出した場合には、検査条件に反する状態およびかかる状態に至る状態の履歴を反例情報として生成する。そして、検査部１４ｄは、生成した反例情報を、表示部１２や出力部１３へ出力する。
【００８３】
具体的には、検査部１４ｄは、状態遷移表Ｈ１〜Ｈｎを含んだ状態遷移表デザインＤ、状態遷移表デザインＤが満たすべき検査条件ρ、探索深度ｂｄを用いた有限界モデル検査（ＢＭＣ検査）を行う。そして、かかるＢＭＣ検査は、上記した式（７）に示した「ｓｔｅｐ［ｋ］」を用いると、
【数８】
0005396406.tif 000009
であらわされる。
【００８４】
ここで、式（８）は、０番目からｂｄ番目までの各階層ｋにそれぞれ対応する論理式「ｓｔｅｐ［ｋ］」が、各階層ｋに対応するいずれかの反例（検査条件ρ［ｋ］の否定）に該当することを検査する旨をあらわしている。なお、検査部１４ｄは、式（８）を用いて検出した反例についての反例情報、すなわち、検査条件ρ［ｋ］に反する状態およびかかる状態に至る状態の履歴を生成する。
【００８５】
記憶部１５は、ハードディスクドライブや不揮発性メモリといった記憶デバイスである。検査条件情報１５ａは、取得部１４ａによって取得される検査条件である。なお、かかる検査条件は、たとえば、操作者の操作に基づき、入力部１１を介してモデル検査装置１０へ入力される。
【００８６】
状態遷移情報１５ｂは、取得部１４ａによって取得される、１または複数の状態遷移表（たとえば、図４参照）に対応する情報であり、たとえば、操作者の操作に基づき、入力部１１を介してモデル検査装置１０へ入力される。
【００８７】
論理式情報１５ｃは、論理式生成部１４ｃによって生成される論理式群である。具体的には、この論理式情報１５ｃは、並列に動作する状態遷移表群における各状態階層ｋ（０≦ｋ≦ｂｄ）にそれぞれ対応する論理式群である（式（７）のｓｔｅｐ［ｋ］参照）。
【００８８】
次に、モデル検査装置１０を用いたモデル検査手順の例について図６を用いて説明する。図６は、モデル検査装置１０を用いたモデル検査手順の例を示す図である。なお、図６には、状態遷移表（たとえば、図４参照）を生成する装置である状態遷移表生成装置２０を例示しているが、この状態遷移表生成装置２０の機能を含んだモデル検査装置１０を構成することとしてもよい。
【００８９】
図６に示すように、状態遷移表生成装置２０は、操作者の設計入力を受け付けると（図６の（１）参照）、状態遷移情報を生成する。そして、状態遷移表生成装置２０は、生成した状態遷移情報をモデル検査装置１０へ出力する。
【００９０】
かかる状態遷移情報を受け取ったモデル検査装置１０は、操作者の性質（検査条件）入力を受け付けると（図６の（２）参照）、最終的に、生成した反例情報、すなわち、設計の不具合を、操作者へ報知する（図６（３）参照）。
【００９１】
以下、設計の不具合を修正した設計入力（図６の（１）参照）、性質（検査条件）入力（図６の（２）参照）、設計の不具合の報知（図６の（３）参照）が繰り返されることで、最終的に、不具合のない設計を得ることが可能となる。
【００９２】
次に、モデル検査装置１０が実行する処理手順について図７を用いて説明する。図７は、モデル検査装置１０が実行する処理手順を示すフローチャートである。図７に示すように、取得部１４ａが、すべての状態遷移情報１５ｂを取得すると（ステップＳ１０１）、変換部１４ｂは、挙動単位、すなわち、並列して存在するすべてのタスクの状態遷移情報を、状態遷移情報１５ｂから抽出する（ステップＳ１０２）。
【００９３】
つづいて、論理式生成部１４ｃは、全変数の初期値を設定し（ステップＳ１０３）、状態階層ごとに論理式を生成する（ステップＳ１０４）。そして、検査部１４ｄは、論理式生成部１４ｃによって生成された論理式および取得部１４ａによって取得された検査条件に基づいてモデル検査を実行する（ステップＳ１０５）。
【００９４】
つづいて、検査部１４ｄは、反例解析情報を、表示部１２や出力部１３へ出力し（ステップＳ１０６）、処理を終了する。なお、図７では、１つの挙動単位に含まれる状態遷移表群についてモデル検査を実行する手順について示したが、複数の挙動単位についてモデル検査を行う場合には、図７に示した処理手順を、挙動単位ごとに繰り返せばよい。
【００９５】
次に、図７のステップＳ１０５に示したモデル検査処理の処理手順について、図８を用いて説明する。図８は、モデル検査処理の処理手順を示すフローチャートである。図８に示すように、検査部１４ｄが、論理式および検査条件の入力を受け付けると（ステップＳ２０１）、検査部１４ｄは、各論理式の遷移探索において検査条件に反する状態があるか否かを検査する（ステップＳ２０２）。
【００９６】
そして、検査条件に反する状態がある場合には（ステップＳ２０２，Ｙｅｓ）、検出した状態および検出した状態に至る状態履歴を反例として記録し（ステップＳ２０３）、ステップＳ２０２以降の処理を繰り返す。なお、かかる記録は、たとえば、記憶部１５に対して行えばよい。
【００９７】
ここで、検査条件に反する状態がない場合には（ステップＳ２０２，Ｎｏ）、処理を終了する。なお、図８では、すべての反例の検出が完了するまでモデル検査処理を繰り返す場合を例示したが、１つの反例を検出し、検出した反例を記録した時点で、モデル検査処理を終了することとしてもよい。
【００９８】
上述したように、本実施例では、イベントに応じて変化する状態の遷移条件を表形式であらわした状態遷移表に対応する状態遷移情報を取得する取得部と、とりうる状態を各ノードとする木構造の階層ごとに遷移条件を一階論理式化した論理式を状態遷移情報から生成する論理式生成部とを備えるようにモデル検査装置を構成した。また、本実施例では、論理式生成部によって生成された論理式に基づいて充足性モジュロ理論による検査を実行する検査実行部を備えるようにモデル検査装置を構成した。
【００９９】
このように、本実施例に係るモデル検査装置は、状態階層の階層ごとに遷移条件を一階論理式化するので、状態ごとにメモリ領域を用意する必要がない。したがって、本実施例に係るモデル検査装置によれば、メモリ状態爆発の問題を回避することができる。
【０１００】
また、本実施例に係るモデル検査装置は、状態遷移表をモデル検査対象とすることとしたので、コンピュータプログラムに限らず、非同期な振る舞いモデルをもモデル検査することが可能となる。したがって、本実施例に係るモデル検査装置によれば、モデル検査の検査対象を拡大することができる。
【０１０１】
なお、上述した実施例では、１つの状態階層ごとに、１つの論理式を生成する場合について説明したが、生成した論理式を複数の論理式へ分割したうえで、モデル検査を実行することとしてもよい。また、１つの状態階層ごとに、複数の論理式を生成することとしてもよい。
【０１０２】
また、上記したモデル検査装置などの各装置は、たとえば、コンピュータで構成することができる。この場合、制御部は、ＣＰＵ（Central  Processing  Unit）であり、記憶部は、メモリである。また、制御部の各機能は、あらかじめ作成されたプログラムを制御部へロードして実行させることによって実現することができる。
【０１０３】
さらなる効果や変形例は、当業者によって容易に導き出すことができる。このため、本発明のより広範な態様は、以上のように表しかつ記述した特定の詳細および代表的な実施例に限定されるものではない。したがって、添付の特許請求の範囲およびその均等物によって定義される総括的な発明の概念の精神または範囲から逸脱することなく、様々な変更が可能である。
【符号の説明】
【０１０４】
１０    モデル検査装置
１１    入力部
１２    表示部
１３    出力部
１４    制御部
１４ａ  取得部
１４ｂ  変換部
１４ｃ  論理式生成部
１４ｄ  検査部
１５    記憶部
１５ａ  検査条件情報
１５ｂ  状態遷移情報
１５ｃ  論理式情報
２０    状態遷移表生成装置
【図１】
0005396406.tif 000010
【図２】
0005396406.tif 000011
【図３】
0005396406.tif 000012
【図４】
0005396406.tif 000013
【図５】
0005396406.tif 000014
【図６】
0005396406.tif 000015
【図７】
0005396406.tif 000016
【図８】
0005396406.tif 000017