(57)【特許請求の範囲】
【請求項１】
（ａ）検証対象の論理装置をモデル化した有限状態機械が満たすべき目的のプロパティを表す、有限長または無限長の遷移系列の集合を、遷移関係式でラベル付けされた、有向枝グラフに変換し、該有向枝グラフの構成情報を第１のメモリに記憶し、
（ｂ）該有向枝グラフ上の各節点に属する状態集合を第２のメモリに記憶し、（ｃ）該有向枝グラフ状の始点側とする節点に属する状態集合を該第２のメモリから読み出し、該第１のメモリに記憶されている有向枝グラフの構成情報を参照して、写像演算を行うべき枝を選択した後、該読み出した状態集合に対して該枝に対応する写像演算を施し、
（ｄ）該写像演算の結果を該枝の終点側の節点に属する状態集合に追加して、該第２のメモリに記憶し、
（ｅ）ステップ（ｃ）及び（ｄ）を繰り返し実行し、該第２のメモリに記憶された状態集合を基に、該有向枝グラフの示す遷移系列の集合が実際に要素を持つか否かを判定することによって、検証対象の論理装置が目的のプロパティを満たしているか否かを検証する、
ことを特徴とする論理装置の検証方法。
【請求項２】
前記ステップ（ｃ）において、前記第２のメモリに記憶されている前記始点側の節点に属する状態集合から１つの状態を取り出して、該状態に対してのみ写像演算を行うことを特徴とする請求項１に記載の論理装置の検証方法。
【請求項３】
前記ステップ（ｃ）において、前記第２のメモリに記憶されている前記始点側の節点に属する状態集合から適当な部分集合を取り出して、該部分集合に対してのみ写像演算を行うことを特徴とする請求項１に記載の論理装置の検証方法。
【請求項４】
前記写像演算は、前記有限状態機械の状態遷移関係が登録されている表を参照して行われることを特徴とする請求項１に記載の論理装置の検証方法。
【請求項５】
前記写像演算は、前記有限状態機械の状態遷移関係がハードウェア記述言語で記述されたものから作成される情報を用いて行われることを特徴とする請求項１に記載の論理装置の検証方法。
【請求項６】
前記ステップ（ｅ）の判定とは、前記有向枝グラフの特定の節点を無限回循環する遷移系列が存在するか否かを判断するものであることを特徴とする請求項１に記載の論理装置の検証方法。
【請求項７】
前記ステップ（ｅ）の判定とは、前記有向枝グラフの特定の節点において、状態集合が写像演算の結果、実際に得られるか否かを判断するものであることを特徴とする請求項１に記載の論理装置の検証方法。
【請求項８】
検証対象の論理装置をモデル化した有限状態機械が満たすべき目的のプロパティを表す、有限長または無限長の遷移系列の集合を、遷移関係式でラベル付けされた、有向枝グラフに変換し、該有向枝グラフの構成情報を記憶する第１の記憶手段と、
該有向枝グラフ上の各節点に対応して、該節点に属する状態集合を記憶する第２の記憶手段と、
該有向枝グラフ上の始点側とする節点に属する状態集合を該第２の記憶手段から読み出し、該第１の記憶手段に記憶されている有向枝グラフの構成情報を参照して、写像演算を行うべき枝を選択した後、該読み出した状態集合に対して該枝に対応する写像演算を施し、該写像演算の結果を該枝の終点側の節点に属する状態集合に追加して、該第２の記憶手段に記憶させる写像演算手段と、
該写像演算手段の処理を繰り返し実行させ、該第２の記憶手段に記憶された状態集合を基に該有向枝グラフの示す遷移系列の集合が実際に要素を持つか否かを判定することにより、検証対象の論理装置が目的のプロパティを満たすか否かを検証する判定手段と、
を備えることを特徴とする論理装置の検証装置。
【請求項９】
前記写像演算手段は、前記第２の記憶手段に記憶されている前記始点側の節点に属する状態集合から１つの状態を取り出して、該状態に対してのみ写像演算を行うことを特徴とする請求項８に記載の論理装置の検証装置。
【請求項１０】
前記写像演算手段は、前記第２の記憶手段に記憶されている前記始点側の節点に属する状態集合から適当な部分集合を取り出して、該部分集合に対してのみ写像演算を行うことを特徴とする請求項８に記載の論理装置の検証装置。
【請求項１１】
前記有限状態機械の状態遷移関係が登録されている表を記憶する状態遷移関係記憶手段を更に備え、
前記写像演算は、該状態遷移関係記憶手段に記憶されている表を参照して行われることを特徴とする請求項８に記載の論理装置の検証装置。
【請求項１２】
前記写像演算は、前記有限状態機械の状態遷移関係がハードウェア記述言語で記述されたたものから作成される情報を用いて行われることを特徴とする請求項８に記載の論理装置の検証装置。
【請求項１３】
前記特定の条件とは、前記有向枝グラフの特定の節点を無限回循環する遷移系列が存在するか否かを判断するものであることを特徴とする請求項８に記載の論理装置の検証装置。
【請求項１４】
前記特定の条件とは、前記有向枝グラフの特定の節点において、状態集合が写像演算の結果、実際に得られるか否かを判断するものであることを特徴とする請求項８に記載の論理装置の検証装置。
【請求項１５】
論理装置が目的のプロパティを満たしているか否かを検証する処理であって、コンピュータに
（ａ）検証対象の論理装置をモデル化した有限状態機械が満たすべき目的のプロパティを表す、有限長または無限長の遷移系列の集合を、遷移関係式でラベル付けされた、有向枝グラフに変換し、該有向枝グラフの構成情報を第１のメモリに記憶させ、
（ｂ）該有向枝グラフ上の各節点に属する状態集合を第２のメモリに記憶させ、
（ｃ）該有向枝グラフ上の始点側とする節点に属する状態集合を該第２のメモリから読み出させ、該第１のメモリに記憶されている有向枝グラフの構成情報を参照して、写像演算を行うべき枝を選択した後、該読み出した状態集合に対して写像演算を施させ、
（ｄ）該写像演算の結果を該枝の終点側の節点に属する状態集合に追加して、該第２のメモリに記憶させ、
（ｅ）ステップ（ｃ）及び（ｄ）を繰り返し実行し、該第２のメモリに記憶された状態集合を基に、該有向枝グラフの示す遷移系列の集合が実際に要素を持つか否かを判定することによって、検証対象の論理装置が目的のプロパティを満たしているか否かを検証させる、
ことを特徴とする処理を実現させるコンピュータ読み取り可能な記録媒体。
【請求項１６】
前記ステップ（ｃ）において、前記第２のメモリに記憶されている前記始点側の節点に属する状態集合から１つの状態を取り出して、該状態に対してのみ、写像演算を行うことを特徴とする請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項１７】
前記ステップ（ｃ）において、前記第２のメモリに記憶されている前記始点側の節点に属する状態集合から適当な部分集合を取り出して、該部分集合に対してのみ、写像演算を行うことを特徴とする請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項１８】
前記写像演算は、前記有限状態機械の状態遷移関係が登録されている表を参照して行われることを特徴とする請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項１９】
前記写像演算は、前記有限状態機械の状態遷移関係がハードウェア記述言語で記述されたものから作成される情報を用いて行われることを特徴とする請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項２０】
前記ステップ（ｅ）の判定とは、前記有向枝グラフの特定の節点を無限回循環する遷移系列が存在するか否かを判断するものであることを特徴とする請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項２１】
前記ステップ（ｅ）の判定とは、前記有向枝グラフの特定の節点において、状態集合が写像演算の結果、実際に得られるか否かを判断するものであることを特徴とする請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、有限状態機械でモデル化可能なもの全般の検証、例えば、順序回路やプロトコルの検証に利用可能な論理装置の検証方法及び検証装置に関する。
【０００２】
【従来の技術】
順序回路やプロトコルの設計が、それらに要求される性質（プロパティ）を満たしているか否かを検証する手法として、モデル検査が知られている。これは、有限状態機械が時相論理で表現されたプロパティを満足する／満足しないことを数学的に証明するものである。
【０００３】
有限状態機械の一般形式は、Ｍ＝（Ｑ、Σ、Φ、δ、λ、Ｉ）で与えられる。括弧内の各記号の意味を以下に示す。
・Ｑ：状態の集合（有限）
・Σ：入力アルファベット（有限）
・Φ：出力アルファベット（有限）
・δ：遷移関係式
・λ：出力関係式
・Ｉ：初期状態集合
遷移関係式は、現状態、入力、次状態が与えられたときに、現状態と入力から次状態に遷移する場合があれば値として“１”、なければ“０”をとるような関数である。遷移関係式は次の状態を決める関数であるが、ある現状態と入力に対して次状態が一意に定まらないような非決定的な遷移を表現することもできる。なお、遷移が決定的である場合には、現状態、入力から次状態を求める関数として状態遷移を表すことが可能となる。出力関係式も同様に、出力が非決定的な場合にも対応する。
【０００４】
原則的に、全ての順序回路は有限状態機械でモデル化できる。このため、論理装置を設計する際に、仕様として有限状態機械を用いる方法が広く用いられている。例えば、論理合成においては、装置の仕様を設計記述言語で記述した後、合成システムでその記述を有限状態機械に変換し、状態をフリップフロップ回路やレジスタで、遷移関係式δや出力関係式λを組み合わせ回路で実現する方法が一般的である。
【０００５】
なお、有限状態機械の基礎理論に関しては後記参照文献１の第２章で詳しく論じられている。論理装置の検証では、論理装置の時間的動作が要求される性質（プロパティ）を満足しているかどうかを調べる。この目的で用いられる技術としては、論理シミュレーションとモデル検査を挙げることができる。
【０００６】
論理シミュレーションとは、回路のモデル（設計記述言語による記述、ゲートレベルの回路図等）に対して適当な入力列を与えて動作を模擬する処理である。この際に、得られる動作がプロパティを満たしていることを確認する。
【０００７】
モデル検査とは、論理装置を有限状態機械あるいは複数の有限状態機械のネットワークとしてモデル化し、モデルがプロパティを満たしているかどうかを数学的に判定するアプローチである。モデル検査に関しては、情報処理１９９４年９月号の特集記事（後記参照文献２，３，４，５，６）で詳しく述べられている。
【０００８】
現在最も多く実用化されているモデル検査手法は、記号モデル検査法（後記参照文献７，８を参照のこと）と呼ばれるものである。記号モデル検査手法では、有限状態機械の動作を論理式で表し、検証手続きを論理関数処理で実現している。その際に、論理関数の表現形式として二分決定グラフ（ＢＤＤ：Binary  Decision  Diagram ；後記参照文献９，１０，１１，１２，１３を参照のこと）を用いている。膨大な状態数を持つ有限状態機械を取り扱うためには、論理関数を用いた非明示的な表現手法とＢＤＤを用いた効率的な論理関数処理が不可欠となっている。
【０００９】
図１６は従来の技術の説明図であり、有限状態機械の例を示す。前記モデル検査手法の内、記号モデル検査手法は、Kripke構造の論理装置モデルを論理関数を用いて表現し、計算木論理（Computation  Tree  Logic：ＣＴＬ）で表された仕様を満足する空でない状態集合が存在するか否かを検査することにより、論理装置のモデルが仕様を満足するか否かを検証する手法である。
【００１０】
ここで、Kripke構造とは、状態の有限集合Ｓと、状態の遷移関係Ｒと、初期状態点の集合Ｓｉと、各状態で真となる原始命題の集合Ｌとを用いて、次式のように表される非決定的有限オートマトンの一種である。
【００１１】
Ｋ＝（Ｓ、Ｒ、Ｓｉ、Ｌ）
また、計算木論理は、時相論理の一種であり、通常の論理演算に加えて、全称を表す演算子Ａ、存在を表す演算子Ｅとともに、「いつか」を表す時相演算子Ｆ、「いつも」を表す時相演算子Ｇ、「次に」を表す時相演算子Ｘ、及び「まで」を表す時相演算子Ｕを用いて表される。
【００１２】
例えば、時相演算子ＡＧａは、初期状態から到達可能な状態集合の全てにおいて論理式ａが成立する旨を示している。この場合は、論理装置のモデルにおいて、初期状態から遷移可能な全ての道筋を辿っていき、その道筋の全てが論理式ａが成立している状態にたどり着くか否かを調べれば良い。
【００１３】
すなわち、記号モデル検査手法における検証作業は、Kripke構造の状態遷移を辿り、各状態において、仕様を表す計算木論理式が成立するかを確認する作業であり、この作業は、計算木論理の式を用いたモデル上の最小不動点、或いは最大不動点を求める集合演算に帰着される。
【００１４】
このような集合演算は、ある状態集合｛ｑ｝から１回の遷移で到達可能な状態集合を求める像計算Image （｛ｑ｝）と、ある状態集合｛ｑ｝に１回の状態遷移で到達可能な状態集合を求める逆像計算Imagerev（｛ｑ｝）とを組み合わせることによって実現される。
【００１５】
例えば、図１６のように、９つの状態ｑ０〜ｑ８間の状態遷移で表される有限状態機械の例において、像計算及び逆像計算を行った結果の例を、以下に示す。
【００１６】
Image （｛ｑ０｝）＝｛ｑ０、ｑ１、ｑ２、ｑ３｝
Image （｛ｑ０、ｑ２｝）＝｛ｑ０、ｑ１、ｑ２、ｑ３、ｑ５｝
Imagerev（｛ｑ０｝）＝｛ｑ０、ｑ１｝
Imagerev（｛ｑ５｝）＝｛ｑ１，ｑ２，ｑ３、ｑ４｝
図１６に示した有限状態機械において、例えば、状態ｑ８を示す論理式ｐを用いた時相論理ＡＦｐを検証する際には、初期状態ｑ０から順次に像計算を繰り返し、初期状態から遷移可能な全ての道筋が状態ｑ８に到達するか否かを調べれば良い。一方、時相論理ＥＦｐを検証する場合には、状態ｑ８から逆像計算を繰り返して、初期状態ｑ０に到達する道筋があるか否かを調べれば良い。
【００１７】
ところで、実際の記号モデル検査法においては、集合演算を論理関数処理に置き換える手法が一般的であり、また、論理関数を二分決定グラフ（ＢＤＤ）で表現することにより、論理関数処理の効率化が計られている。
【００１８】
参照文献
１：J.E.Hopcroft  and  J.D.Ullman,  Introduction  to  Automata  Theory,  Languages,  and  Computation,  Addison-Wesley  Publishing  Company,  1979.
２：平石裕実、浜口政治、“論理関数処理に基づく形式的検証手法、”情報処理、vol.35,  no.8,  pp.710-718,1994
３：藤田昌宏、陳奔、山崎正実、“形式的検証手法の実設計への適用例、”情報処理、vol.35,no.8,pp.719-725,1994.
４：木村晋二、“形式的タイミング検証について、”情報処理、vol.35,no.8,pp726-735,1994.
５：高原厚、“プロセス代数を用いた形式的検証、”情報処理、vol.35,no8,pp.736-741,1994.
６：谷口健一、北道敦司、“代数的手法による仕様記述と設計及び検証、”情報処理、vol.35,no.2,pp.742-750,1994.
７：J.R.Burch,E.M.Clarke,K.L.McMillan,D.L.Dill,  and  L.J.Hwang,“Symbolic  Model  Checking ：1020  States  and  Beyond,”Information  and  Computation,vol.98,no.2,pp.142-170,1992.
８：K.L.McMillan,  Symbolic  Model  Checking,  Kluwer  Academic  Publishers,  1993.
９：R.E.Bryant, “Graph  Based  Algorithm  for  Boolean  Function  Manipulation,”ＩＥＥＥ  Transactions  on  Computers,  vol.C-35,no.8,pp.677-691,1986.
１０：石浦菜岐佐、“ＢＤＤとは、”情報処理、vol.34,no.5,pp.585-592,1993.
１１：湊真一、“計算機上でのＢＤＤの処理技法、”情報処理,vol.34,no.5,pp.593-599,1993.
１２：渡部悦穂、久木元裕治、“ＢＤＤの応用、”情報処理、vol.34,no.5,pp.600-608,1993.
１３：藤田昌宏、Edmund  M.  Clarke, “ＢＤＤのＣＡＤへの応用、”情報処理、vol.34,no.5,pp.609-616,1993.
【００１９】
【発明が解決しようとする課題】
論理シミュレーションで確認できる動作は選択された特定の入力列に対する結果のみである。従って、状態数が多い場合、全ての動作を試すことは膨大な長さの入力列とそれに比例した計算時間を必要とすることになり、現実的には不可能である場合が多い。
【００２０】
一般的に論理シミュレーションでは、確認済みの動作を数学的に記録／整理する機構がないため、全ての動作を網羅したことを判定できず、従って、ある動作が決して起こらないことを証明することはできない。
【００２１】
モデル検査は有限状態機械の動作を数学的に網羅する。ところが状態数が多く遷移の複雑な有限状態機械に対しては、計算機のメモリ使用量または計算時間の増大により、現実的には動作の確認が実行不可能となる場合が少なくない。これは、記号モデル検査においては、遷移関係を表すＢＤＤの規模や、論理関数処理の途中で生成されるＢＤＤの規模の問題となって現れる。ＢＤＤの規模はＢＤＤのノード数で計ることができるが、最悪の場合、変数に対して指数オーダで増大する可能性がある。
【００２２】
本出願人が、以前に出願した特願平９−４５１１４号あるいは特願平１０−１３６４号の発明は、検証手続きの途中で状態集合を分割することでＢＤＤ規模増大の問題を解決するものである。しかしながら、上記先願の発明は、ある特定の種類のプロパティに対する検証方式であり、適用範囲は現実の問題に対して十分ではなかった。
【００２３】
本発明の課題は、順序回路などの論理装置を有限状態機械でモデル化して検証する場合に、状態数の大きい論理装置を、メモリ容量や計算時間を適切に調整しながら有効に検証しうる論理装置の検証方法及び装置を提供することである。
【００２４】
【課題を解決するための手段】
本発明の論理装置の検証方法は、（ａ）検証対象の論理装置をモデル化した有限状態機械が満たすべき目的のプロパティを表す、有限長または無限長の遷移系列の集合を、遷移関係式でラベル付けされた、有向枝グラフに変換し、該有向枝グラフの構成情報を第１のメモリに記憶し、（ｂ）該有向枝グラフ上の各節点属する状態集合を第２のメモリに記憶し、（ｃ）該有向枝グラフ状の始点側とする節点に属する状態集合を該第２のメモリから読み出し、該第１のメモリに記憶されている有向枝グラフの構成情報を参照して、写像演算を行うべき枝を選択した後、該読み出した状態集合に対して該枝に対応する写像演算を施し、（ｄ）該写像演算の結果を該枝の終点側の節点に属する状態集合に追加して、該第２のメモリに記憶し、（ｅ）ステップ（ｃ）及び（ｄ）を繰り返し実行し、該第２のメモリに記憶された状態集合を基に、該有向枝グラフの示す遷移系列の集合が実際に要素を持つか否かを判定することによって、検証対象の論理装置が目的のプロパティを満たしているか否かを検証することを特徴とする。
【００２５】
本発明の論理装置の検証装置は、検証対象の論理装置をモデル化した有限状態機械が満たすべき目的のプロパティを表す、有限長または無限長の遷移系列の集合を、遷移関係式でラベル付けされた、有向枝グラフに変換し、該有向枝グラフの構成情報を記憶する第１の記憶手段と、該有向枝グラフ上の各節点に対応して、該節点に属する状態集合を記憶する第２の記憶手段と、該有向枝グラフ上の始点側とする節点に属する状態集合を該第２の記憶手段から読み出し、該第１の記憶手段に記憶されている有向枝グラフの構成情報を参照して、写像演算を行うべき枝を選択した後、該読み出した状態集合に対して該枝に対応する写像演算を施し、該写像演算の結果を該枝の終点側の節点に属する状態集合に追加して、該第２の記憶手段に記憶させる写像演算手段と、該写像演算手段の処理を繰り返し実行させ、該第２の記憶手段に記憶された状態集合を基に該有向枝グラフの示す遷移系列の集合が実際に要素を持つか否かを判定することにより、検証対象の論理装置が目的のプロパティを満たすか否かを検証する判定手段とを備えることを特徴とする。
【００２６】
本発明によれば、ある枝について写像演算を行う場合に、該枝の始点側の節点の状態集合を任意に選択することができ、例えば、１つの状態についてのみ写像演算を行うとか、部分集合についてのみ写像演算を行う等の柔軟な写像演算処理を行うことができるので、検証装置の使用メモリ容量や計算時間を適切に調整しながら処理することができる。また、写像演算を有向枝グラフの枝毎に行うので、全ての枝について写像演算を終えていなくても、目的の遷移系列が発見されればそこで、処理を終了して良いので、やはり、検証装置の使用メモリ容量及び計算時間を節約することができる。従って、従来では事実上不可能であった、状態数の非常に多い論理装置についても検証を行うことが可能になる。
【００２７】
【発明の実施の形態】
図１は、本発明の実施形態が適用される有限状態機械の遷移関係を示す図である。
【００２８】
同図のような遷移関係を持った有限状態機械の検証を具体例として、本発明の実施形態を説明する。
【００２９】
同図の例では、有限状態機械は３ビットの状態変数ｖ１、ｖ２、ｖ３で構成される。以降、ｖ１＝ａ、ｖ２＝ｂ、ｖ３＝ｃ（ａ，ｂ，ｃ∈｛０，１｝）の状態をａｂｃと表記する。この有限状態機械は０００〜１１１の８つの状態を持っている。説明を簡単にするため、ここでは入力を省略し、次状態は現状態に応じて非決定的に選ばれるものとしている。例えば、現状態が０００であれば、次状態は１００もしくは１１１となる。また、現状態が０１０であれば、次状態は必ず０００である。なお、この有限状態機械の初期状態は０００である。
【００３０】
有限状態機械は図１のような表で定義しても良いし、ハードウェア記述言語で定義しても良い。有限状態機械の遷移関係は明示的に（表形式のまま）保持しても良いし、ＢＤＤ等を使って非明示的に（関数の形で）保持しても良い。
【００３１】
ここでは、図１の有限状態機械に対し、次のように定義される遷移系列の集合Ｓに要素（実例）が存在するか否かを調べる場合について考える。
【００３２】
Ｓ＝｛ｓ｜ｓは、初期状態から任意の遷移の後、ｖ１＝１かつｖ２＝０の状態を通り、以後ｖ２＝１とｖ２＝０を交互に繰り返す無限長の遷移系列｝
以下、このような遷移系列を目的のプロパティと呼ぶ。
【００３３】
遷移系列の集合は正規表現またはω正規表現を使って与えても良いし、表やハードウェア記述言語などを使ったオートマトンまたはωオートマトンの記述を与えても良い。これらについては、例えば、Y.Choueka,“Theories  of  Automata  on  ω-Tapes：A  Simplified  Approach 、”Journal  of  Computer  and  System  Sciences,  vol.8,pp.117-141,1974. 、あるいは、H.Iwashita  and  T.Nakata,“Forward  Model  Checking  Techniques  Oriented  to  Buggy  Designs, ”in  Proc.ICCAD-97,pp.400-404,1997.に詳細が記載されている。
【００３４】
図２は、上記遷移系列の集合Ｓを有向グラフ３表現した図である。
【００３５】
遷移系列集合Ｓは図２のグラフ表現に変換できる。同図に示されたグラフ３は、３つの節点Ａ、Ｂ、Ｃ、と４つの有向枝（Ａ、Ａ）、（Ａ、Ｂ）、（Ｂ、Ｃ）、（Ｃ、Ｂ）から成っている。各枝には節点間における状態の写像を定義した式がラベル付けされている。例えば、枝（Ａ、Ｂ）上のラベル“δ、１０ｘ”は、遷移関係δで到達可能な次状態のうちｖ１＝１かつｖ２＝０（ｖ３は任意）を満たすものを選ぶ演算である。枝（Ａ、Ａ）上のラベル“δ、ｘｘｘ”は遷移関係δで到達可能な次状態全てを表す。遷移系列の開始点は節点Ａに対応する。節点Ａ上の初期状態０００から開始して、節点Ｃを無限回通る系列が、このグラフの表す遷移系列集合Ｓの要素である。
【００３６】
図３及び図４は、図２のグラフ３に対して、本発明の実施形態に基づいてモデル検査を行う手法を説明する図である。
【００３７】
グラフ３のデータ構造において、Ａ０＝｛０００｝と初期化し、枝（Ａ、Ａ）及び（Ａ、Ｂ）に未処理マークを付ける（同図では太線で示されている：ステップ１）。
【００３８】
次に、（Ａ、Ａ）または（Ａ、Ｂ）のどちらかの未処理枝（未処理マークが付けられた枝）を選んで写像演算を行う。仮に（Ａ、Ａ）を選び、それにラベル“δ、ｘｘｘ”に従った写像計算を施すと、図１の表から知られるように、｛０００｝→｛１００、１１１｝が得られる。この写像の結果をＡ０に加えると、Ａ０の要素が増えるので、（Ａ、Ａ）の未処理マークはそのままとする（ステップ２）。
【００３９】
再び、（Ａ、Ａ）を選び、ステップ２で得られた状態集合｛０００、１００、１１１｝に更にラベル“δ、ｘｘｘ”に従った写像計算を施し、その結果をＡ０に加える。このとき、既にＡ０に記憶されている状態が二重には記憶されないように配慮し、Ａ０に含まれていなかった結果のみをＡ０に加える様にする。すると、Ａ０＝｛０００、００１、０１１、１００、１０１、１１０、１１１｝となる（ステップ３）。その際、ステップ２で最終的に得られたＡ０全体について写像計算（｛０００、１００、１１１｝→｛０００、００１、０１１、１００、１０１、１１０、１１１｝）をしても良いし、ステップ２における増分要素に対する写像（｛１００、１１１｝→｛００１，０１１，１０１，１１０｝）のみを計算し、その結果をＡ０に加えても良い。
【００４０】
更に、もう一度、（Ａ、Ａ）を選んで、それに写像計算を実施するとＡ０の要素が増えないことがわかるので、（Ａ、Ａ）の未処理マークを消す（ステップ４）。
【００４１】
この時点で、残った未処理枝は（Ａ、Ｂ）なので、それにラベル“δ、１０ｘ”に従った写像計算を施してＢ０＝｛１００、１０１｝を得る（ステップ５）。すなわち、Ａ０の全ての要素（｛０００、００１、０１１、１００、１０１、１１０，１１１｝）個々に対して写像計算を行い、その写像計算により得られた結果の中から「１０ｘ」（ｘは任意であって、“０”であるか“１”であるかを問わない）となる状態のみをＢ０の要素として保持する。このとき、（Ａ、Ｂ）の未処理マークを除去し、新たに（Ｂ、Ｃ）に未処理マークを付ける。
【００４２】
以下同様に処理を継続していく。ただし、節点Ｃを通過する度に状態集合のインデックスを１つ増やす。（図４のステップ７、ステップ９：すなわち、節点Ｃを始点とする写像計算が実施される毎に得られる節点Ｃの状態集合を別の集合として記憶するように操作する。例えば、ステップ８では、新たにＣ１が状態集合として付加され、ステップ９では、新たにＣ２が状態集合として付加されている。）
グラフ３の表す遷移系列が存在することは、次の式を満たす整数ｎ、ｍ（０≦ｎ＜ｍ）が存在することと等価である。
【００４３】
Ｃｎ⊆（Ｃｎ＋１∪・・・∪Ｃｍ）・・・・・（１）
すなわち、節点Ｃでの写像計算をｎ回繰り返して得られた状態集合Ｃｎが、ｎ＋１回目以降ｍ回目までの写像計算によって得られる各状態集合Ｃｎ＋１、・・・Ｃｍの和集合にに含まれることを意味している。これは、状態集合Ｃｎが出現してから、それ以降、ｍ回写像計算を行うと、それらの写像計算の結果として得られる各状態集合の和の中にＣｎが含まれるようなになるので、節点Ｃにおいて、Ｃｎに含まれる状態は、ｍ回目以降において無限に出現する。すなわち、節点Ｂと節点Ｃの間を無限回循環する閉路が形成されていることを意味することになる。
【００４４】
そして、このようなｎ、ｍを発見したとき（遷移系列あり）または未処理の枝がなくなったとき（遷移系列なし）に終了する。
【００４５】
この例ではステップ１０においてＣ０⊆（Ｃ１∪Ｃ２）が成立し、遷移系列が存在することがわかる。従って、上記した遷移系列Ｓが有限状態機械に存在しているので、この有限状態機械によってモデル化された順序回路やプロトコルは要求されたプロパティを備えているということができる。
【００４６】
以上の例では、選ばれた枝の始点側の節点の全状態に対する写像を一度に計算しているが、１状態ずつ選んだり、部分集合を取り出して分割計算しても同じ検証結果が得られる。
【００４７】
図５は、本発明の第１の実施形態の処理を示すフローチャートである。
【００４８】
なお、同図のフローチャートの処理を開始する前に、順序回路等をモデル化する有限状態機械の状態遷移関係は、前述したような、表あるいはハードウェア記述言語で既に与えられているものとする。
【００４９】
最初に、ステップＳ１で、有限長または無限長の遷移系列の集合を表現する有向グラフを作成する。この有向グラフは、検証すべき有限状態機械の満たすべきプロパティを表す。節点は該有限状態機械における状態集合に対応し、節点間は遷移の集合に対応した有向枝で結ばれる。後述するように、各節点の一つまたは複数の状態集合を記憶するための領域が、記憶装置内に設けられ、各節点は特定の状態集合（図１〜図４の説明では、｛０００｝で）で初期化される。それぞれの枝には、始点側の状態あるいは状態集合から終点側の状態あるいは状態集合への写像を定義する遷移関係式が関連付けられる。この遷移関係式は、例えば、上記節点に対応して設けられた一定記憶領域を相互に関連付けるポインタと、どのような場合にポインタに従って、別の節点を表す記憶領域にアクセスするかを指示する条件と、節点に対応する記憶領域に記憶されている状態集合に対して写像演算を行うための、図１に示したような表、あるいは、ハードウェア記述言語で記述された状態遷移を特定する記述によって定義される。
【００５０】
次に、ステップＳ２で、有向グラフの始点側の節点（所定の方法により、有向グラフ内の節点を順次選択するようにする）に接続されている有向枝の内、処理すべき枝を選択する。その後、この選択された有向枝の始点側の節点に属する状態集合に写像を施して結果を終点側の状態集合に追加する処理を繰り返し行う（ステップＳ３）。すなわち、ステップＳ３で、図１〜図４までの例で説明したような写像演算処理を選択された有向枝について行う。ステップＳ４で、特定の状態集合が有向グラフの特定の１または複数の有向枝から形成されるループを無限回循環遷移する場合や、所定の状態集合に対する写像演算の後に特定の節点に状態集合が現れるというような、遷移系列の実例を発見したか否かを判断する。ステップＳ４で、遷移系列の実例が発見されない場合、ステップＳ５で現在処理している節点に接続する有向枝の内、未処理の枝があるか否かが判断される。ステップＳ５で、未処理の枝があると判断された場合には、ステップＳ２に戻って、ステップＳ２〜ステップＳ４の処理を行う。ステップＳ４で、遷移系列を発見した場合には、処理を終了する（ステップＳ７）。また、ステップＳ５で、遷移系列は発見していないが、未処理の枝がなくなった場合には、遷移系列なしとして処理を終了する（ステップＳ６）。
【００５１】
なお、有向グラフが閉路を持っていると一度写像計算を実行した枝の始点側に新たな状態が付加される場合があるが、その際にはその枝の写像計算は終了していないとみなす。
【００５２】
ここで、遷移系列とは、目的のプロパティを満足する状態集合の遷移である。従って、ステップＳ４の遷移系列が存在するか否かという判断は、次のようなものとなる。有向グラフ内である無限循環遷移を形成することが目的のプロパティの場合には、該遷移系列として、図１〜図４で説明したように節点Ｂと節点Ｃの間で無限回循環するような状態集合を見つける。また、目的のプロパティが、ある状態集合が有向グラフの所定の節点に至るべきというものである場合には、有向グラフ上で、この状態集合に対して、写像演算を繰り返し施し、該所定の節点に何らかの状態が現れるか否かを判断する。
【００５３】
第１の実施形態においては、遷移系列の存在を網羅的に調べるモデル検査を実現している。有向グラフの形を変更することで、有限長または無限長の様々な遷移系列集合について調べることができる。また、検証の結果は有向グラフの枝を選ぶ順序に依存しないため、メモリ使用量と計算時間の要求に応じて、枝の選択順序を変更できる。
【００５４】
図６は、本発明の第２の実施形態の処理を説明するフローチャートである。
【００５５】
この第の実施形態は、上記第１の実施形態を、始点側の状態集合の中から、１状態のみを選択する処理を行ってから写像演算を施すように変更したものである。
【００５６】
ステップＳ１０で、上記したような、目的のプロパティを表現する遷移系列集合の有向グラフ表現を作成する。次に、ステップＳ１１で、有向グラフの節点の内の一つを選択し、この節点に接続されている有向枝の中から処理を行う枝を選択する。ステップＳ１２で、該選択されてた有向枝の始点側の節点の記憶されている状態中から１状態を選択する。そして、ステップＳ１３で、該選択された１状態に対して、写像演算を施し、その写像演算の結果得られた状態集合を写像先の節点に対応付けて記憶する。ステップＳ１４で、遷移系列を発見したか否かを判断する。遷移系列が存在した場合には、ステップＳ１７に進んで、処理を終了する。ステップＳ１４で、遷移系列を発見しない場合には、ステップＳ１５に進んで、現在処理している節点に接続している有向枝の内、未処理の枝があるか否かを判断する。未処理の枝があるとステップＳ１５で判断された場合には、ステップＳ１１〜ステップＳ１４までの処理を繰り返し行う。そして、ステップＳ１５で、未処理の枝がもうないと判断された場合には、ステップＳ１６に進んで、遷移系列なしとして処理を終了する。
【００５７】
本実施形態では、第１の実施形態のステップＳ３をステップＳ１２，１３に置き換え、始点側の状態集合の中から一つの状態のみを選択し、その単一状態に対する写像計算のみを用いるようにすることでメモリ使用量を最小化する様にしている。
【００５８】
図７は、本発明の第３の実施形態の処理を説明するフローチャートである。
【００５９】
この第３の実施形態においては、第１の実施形態を、始点側の状態集合から適当な大きさの部分集合を選択する処理を行ってから、該部分集合のっみに写像演算を施すように変更したものである。
【００６０】
まず、ステップＳ２０で、目的のプロパティを表現する遷移系列の集合のグラフ表現を作成する。ステップＳ２１で、処理すべき節点の選択を行い、この節点に接続する有向枝の内、処理すべき枝を有向グラフの中から選択する。次に、ステップＳ２２で、該選択した有向枝の始点側、すなわち、ステップＳ２１で選択した節点の記憶されている状態集合の中から、写像演算を行う部分状態集合を選択する。ステップＳ２３で、該選択された部分状態集合に対し、写像演算を施し、上記選択した有向枝の終点側の節点、状態集合に、上記写像演算の結果を追加記憶する。ステップＳ２４で、目的の遷移系列がステップＳ２３の写像演算によって得られたか否かを判断し、目的の遷移系列が得られた場合には、ステップＳ２７に進んで処理を終了する。ステップＳ２４で、目的の遷移系列が得られていないと判断された場合には、ステップＳ２５に進んで、上記ステップＳ２１で選択された節点に接続している有向枝の内、未処理のものがあるか否かを判断し、未処理の枝がある場合には、再び、上記ステップＳ２１〜ステップＳ２４までの処理を行う。そして、ステップＳ２５で、未処理の枝がないと判断された場合には、目的の遷移系列が得られなかったとして、ステップＳ２６に進み、処理を終了する。
【００６１】
第３の実施形態は、有向枝の始点側の節点における写像演算を施す状態集合をそれまでに記憶されている状態集合の中の部分集合に限定することにより、第１の実施形態では得られない、メモリ使用量と計算時間の調整に関する新たな自由度を提供している。
【００６２】
本発明においては、有限状態機械とそれに対する遷移系列集合を入力として、該遷移系列集合の要素実例が存在するか否かを判定する。
【００６３】
上記遷移系列集合を表現する有向グラフの各節点に対応付けられた状態集合を保持するデータ構造を本発明の実施形態では「状態集合リスト」と呼ぶことにする。
【００６４】
図８は、該状態集合リストの構成例を示す図である。
【００６５】
同図の構成例では、状態集合リスト４はテーブル形式となっており、テーブルは３列で構成されており、各列は左から節点、「Ａ」、「Ｂ」、「Ｃ」の状態集合のデータを格納する様になっている。またテーブルの各行は、各節点が有する状態集合を識別するインデックスに対応している。同図で、｛０００｝が保持されている「Ａ」の列のインデックスが「１」の行のフィールドは、状態集合Ａ０を格納している。以下同様に、「Ａ」の列のインデックス「１」の行のフィールドは状態集合Ａ１を格納するようになっており、状態集合リスト４は各節点の、状態集合をインデックス毎に分けて保持するように構成されている。同図の場合は、図３のステップ１の処理後の状態を示しているので、状態集合リストはＡ０フィールドのみに状態集合｛０００｝を保持しており、その他のフィールドは全て空集合となっている。
【００６６】
有向グラフ上の枝と、枝にラベル付けされた写像を保持するデータ構造を本発明の実施形態では「枝リスト」と呼ぶことにする。
【００６７】
図９は、枝リストの構成例を示す図である。
【００６８】
同図は図２のグラフ構造を保持している枝リスト５の状態を示している。この例では、全ての写像は遷移関係式δの全体または一部分から作られたものになっているが、一般には各写像が全く無関係なものであっても構わない。
【００６９】
図２の有向枝グラフから明らかなように、このグラフには、有向枝として（Ａ、Ａ）、（Ａ、Ｂ）、（Ｂ、Ｃ）、及び（Ｃ、Ｂ）が存在する。これらのそれぞれの枝に対し、現状態に対応する写像の結果（次状態）をそれらに関連付けられ亜遷移関係式δを用いて算出し、該現状態と該次状態との対応の関係（遷移関係）をリスト５ｂ〜５ｅにさせて記憶させる。現状態と次状態の写像関係とを登録する写像情報リスト５ｂ〜５ｅと同図左上の枝管理リスト５ａとは、枝管理リスト５ａの写像の欄に、それぞれに対応する写像情報リスト５ｂ〜５ｅへのポインタを設定することによってリンクされる。枝（Ａ、Ａ）上の写像は、全ての現状態を任意の次状態に写像するものであるので、写像情報リスト５ｂには図１の表と同じものが写像δ、ｘｘｘとして保持されている。枝（Ａ、Ｂ）上の写像は、現状態の写像の結果として（１０ｘ）という状態だけが許されるので、写像情報リスト５ｃには現状態（０００）、（０１１）、（１００）に対して、（１００）、（１００）、（１０１）が次状態としてそれぞれ登録された表が写像δ、１０ｘとして保持されている。同様に、枝（Ｂ、Ｃ）上の写像に関しては、写像情報リスト５ｄに同図に示すような写像δ、ｘ１ｘの表が、枝（Ｃ、Ｂ）上の写像に関しては、写像情報リスト５ｅに同図に示すような写像δ、ｘ０ｘの表が保持される。
【００７０】
なお、同図では、有限状態機械の遷移関係を、表形式で保持するように説明しているが、必ずしも表形式である必要はなく、ＢＤＤ等を用いて関数等により保持するようにしても良い。
【００７１】
また、処理の途中で未処理マークを記憶するバッファの役割を果たすデータ構造を「イベントリスト」と呼ぶことにする。
【００７２】
図１０は、イベントリストの構成例を示す図である。
【００７３】
イベントリスト６は（節点１，節点２、整数）の３種類の情報の組み合わせからなる未処理マークが付けられた有向枝（未処理枝）を示す要素（データ）を優先度の高い順から記憶する優先順位付きリストである。この整数は、後述する疑似コードで明らかになるように、１つの節点を何回通ったかを表す値である。イベントリスト６から要素を一つ取り出す場合は最も優先度の高いものが選ばれる。イベントリスト６に要素を登録する場合には、その要素は何らかの基準に従って決定された位置に挿入される。本実施形態の方法では、この基準に関係なく正しい遷移系列の実例を得ることができる。同図は、イベントリスト６が図３のステップＳ１における初期設定に対応したデータ内容を保持している様子である。イベントリスト６には、枝（Ａ、Ａ）及び（Ａ、Ｂ）が、それぞれ、優先度が「０」、「１」の未処理枝として登録されている。
【００７４】
図１１〜図１３は、図２の有向グラフに対して適用した本実施形態のアルゴリズムを示す図である。
【００７５】
該アルゴリズム中で「循環節点」とは、そこを無限回通ることが遷移系列の条件となっている特別な節点である。本実施形態においては、節点Ｃが循環節点である。図１１に示す関数CheckGraph（G ）が“found ”を返せば、グラフＧに対応する遷移系列が存在し、“not  found”を返せば、そのような遷移系列は存在しない。
【００７６】
図１１は、関数CheckGraph（G ）のアルゴリズムを表す疑似コードである。
【００７７】
同図の処理は、図２有向グラフに目的の遷移系列が存在するか否かを判断するものである。まず、メインルーチンである関数CheckGraph(G) は、遷移系列集合Ｓのグラフ表現Ｇを入力とする。次に、前述した状態集合リスト４とイベントリスト６を初期化する。これにより、イベントリスト６及び状態集合リスト４は、図１０と図８に示されたように初期化される。次に、while 文でイベントリスト６が空になるまで、以下の処理を行う。
【００７８】
イベントリスト６には、初期化された状態で、処理すべき節点に接続されている未処理の枝を全て登録されているので、while 文内の処理が開始される。すなわち、まずイベントリスト６から未処理の枝に関する要素を１個取り出し、これを（Ｘ、Ｙ、ｉ）とする。そして、節点Ｘが循環節点であるか否か判断し、循環節点である場合には、ｉ＋１をｊに代入する。一方、Ｘが循環節点でない場合には、ｉをｊに代入する。この操作は、写像を施す節点Ｘが循環節点でない場合には、図３の節点Ａのように、１つの状態集合に順次写像の結果得られる状態集合を加えていくことを意味している。また、写像を施す節点が循環節点である場合には、図３〜図４の節点Ｃに示されるように、写像の結果得られた状態集合を別の集合として保持していくことを示している。このようにして、ｊの値を設定した後、Ｙｊ’←Ｙｊ∪Evaluate（Ｘ、Ｙ、ｉ）を実行する。ここで、節点Ｘが循環節点でなく、かつ、循環節点と枝により接続される節点でもない第１の節点である場合には、Ｙｊは、節点Ｙにおいてそれまでに得られた状態集合の和を表している。一方、節点Ｘが循環節点または循環節点と枝により接続される節点のような第２の節点の場合には、Ｙｊは空集合を表している。関数Evaluateは、節点Ｘの有する状態集合と、節点Ｙの有する状態集合及び整数値ｉを入力として、写像計算を行い、写像の結果得られる状態集合を返す関数である。
【００７９】
従って、節点Ｘが上記第１の節点である場合には、Ｙｊ’には、前回の写像計算で得られた節点Ｙにおける全ての状態集合と、今回、Evaluate関数によって写像計算された結果、節点Ｙについて得られた状態集合との和集合が代入される。一方、節点Ｘが上記第２の節点である場合には、Ｙｊ’には今回の写像が状態集合として代入される。次に、if文で、Ｙｊ’にＹｊが含まれるか否かを判断する。一般に、ＹｊはＹｊ’に含まれるが、ＹｊとＹｊ’が同じ場合には、当該if文の条件が成り立たないことになり、今回の写像によって新しい状態集合が生成されなかったことを示すので、上記while 文の先頭に戻って処理を繰り返す。一方、if文でＹｊがＹｊ’に含まれていると判断された場合には、新しい状態集合が今回の写像演算によって生成されたので、ＹｊにＹｊ’を代入することにより状態集合リスト４の節点ＹのインデックスｊのフィールドにＹｊを格納して、関数CycleIsFoundを呼び出して、節点Ｙに写像によって無限回循環する状態集合が存在するか否かを判断する。関数CycleIsFoundの戻り値が“true”であった場合には、節点Ｙに上記無限回循環する状態集合が存在するので、関数CheckGraphの戻り値として“found ”を出力する。一方、関数CycleIsFoundの戻り値が“true”ではなく、上記無限回循環する状態集合が存在しなかった場合には、次にforeach 文に進む。foreach 文では、節点Ｙからの枝の集合の中から、１つの枝（Ｙ、Ｚ）を選択し、（Ｙ、Ｚ、ｊ）がイベントリスト６に未登録の場合には、それをイベントリスト６に登録してwhile 文の先頭に戻って上記処理を繰り返す。このイベントリスト６への要素（Ｘ、Ｙ、ｊ）の新規登録は、新しい節点に対する写像計算を行うための準備処理である。
【００８０】
今までに述べて処理を、例えば、図３及び図４の場合を例にして具体的に説明すれば、イベントリスト６から（Ｘ，Ｙ，ｉ）を取り出したとき、節点Ｘが節点Ｃであり、節点Ｙが節点Ｂである場合には、節点Ｃが循環節点であるので、ｊにｉ＋１が設定される。そして、Ｙｉ＋１’にＹｉ＋１∪Evaluate（Ｃ、Ｂ、ｉ）が代入される。そして、次にＹｉ＋１’にＹｉ＋１が含まれるかが判断される。このとき、Ｙｉ＋１’とＹｉ＋１が等しい場合には、if文の条件が成立しないとして、while 文の先頭に戻って処理を繰り返す。一方、if文の条件が成立した場合には、Ｙｊ←Ｙｊ’とした後、関数CycleIsFoundによって、節点Ｃに無限回循環する状態集合が存在するか否かが判断される。無限回循環する状態集合が発見されなかった場合には、foreach 文で、節点Ｂの枝集合から１つの枝（Ｂ、Ｃ）を選択して、（Ｂ、Ｃ、ｉ＋１）が、イベントリスト６に登録されていない場合には、これをイベントリスト６に登録して、while 文の先頭に戻る。このように、節点Ｘとして節点Ｃが選択される毎に、イベントリスト６に登録される要素のインデックスが「１」ずつインクリメントするので、節点Ｂに対する写像によって得られる循環節点Ｃの状態集合は、別個の状態集合Ｙｊとして状態集合リスト４に格納される。
【００８１】
図１２は、関数Evaluateの疑似コードを示す図である。
【００８２】
関数Evaluateは、始点の節点Ｘと終点の節点Ｙ及び、循環節点を何回循環したかを示すインデックスｉとを入力とする。そして、写像情報リスト５ａを参照して枝（Ｘ、Ｙ）にラベル付けされた写像（図９の写像情報リスト５ｂ〜５ｅのいずれかに該当する写像）をＦに代入し、写像を施す節点Ｘの状態集合Ｘｉを状態集合リスト４から取得してＱに代入して、関数Ｆ（Ｑ）の値を戻り値として返す。すなわち、節点Ｘの状態集合Ｘｉに対して枝（Ｘ、Ｙ）上の写像を行った結果（節点Ｙに属する状態集合）をである関数Ｆ（Ｑ）の値を、関数値として返す。この関数Ｆ（Ｑ）は、図９の写像情報リスト５ｂ〜５ｅを参照して、状態集合Ｘｉ（＝Ｑ）に対する写像演算を行うものである。すなわち、関数Ｆ（Ｑ）は、状態集合Ｘｉ内の各状態（現状態）に対応する状態（次状態）を写像情報リスト５ｂ〜５ｅから取得して、該取得結果を戻り値として関数Evaluateに返す。
【００８３】
図１３は、関数CycleIsFoundの疑似コードを示す図である。
【００８４】
関数CycleIsFoundは、無限回循環する状態集合が存在するか否かが判断される節点Ｘと、循環節点を通過した回数を示すインデックスｉを入力として、図２の有向グラフに無限回循環する遷移系列が存在するか否かを判断する関数である。
【００８５】
まず、節点Ｘが循環節点であり、かつ、ｉが１以上であるか否かを判断する。該判断の結果が「Ｎｏ」の場合、すなわち、節点Ｘが循環節点でない場合、または、ｉが０であれば、関数の戻り値として“false ”を返す。判断の結果が「Ｙｅｓ」の場合には、ｉ以上のインデックスｋを持つ状態集合Ｘｋの和集合を生成し、これをＱに代入する。そして、for 文により、ｋの値をｉ−１から１つずつ減少させながら、ｋの値が０になるまで、以下の処理を繰り返し行う。すなわち、ＸｋがＱに含まれているか否かを判断し、含まれている場合には“true”を関数の戻り値として返すが、含まれていない場合には、ＱとＸｋとの和集合を新たなＱとしてfor 文のループをｋの値が０になるまで繰り返す。そして、ｋが０になってもＸｋ⊆Ｑが成り立たない場合には、関数の戻り値として“false ”を返す。このfor 文のループ処理は、前述の式（１）が成立するか否かを評価していることに対応している。すなわち、関数CycleIsFoundの戻り値が“true”の場合には、目的の遷移系列が発見されたことを示している。
【００８６】
図１４は、上述した図８〜図１３の本発明の実施形態を実現する論理装置検証装置の構成を示すブロック図である。
【００８７】
本実施形態の論理装置検証装置１０は、プロパティグラフ生成部１１、プロパティ検証部１２、状態集合リスト記憶部１３，枝リスト記憶部１４、遷移関係記憶部１５、及びイベントリスト記憶部１６からなっている。
【００８８】
まず、外部から、検証すべき順序回路等の論理装置をモデル化した有限状態機械の遷移関係を表形式あるいはハードウェア記述言語で記述したものを、遷移関係記憶部１５に入力・記憶する。また、同じく外部から、上記有限状態機械の目的のプロパティ（遷移系列集合）をハードウェア記述言語などで記述したものをプロパティグラフ生成部１１に入力する。プロパティグラフ生成部１１は、上記入力された目的のプロパティの記述から該プロパティを表すグラフを生成する。すなわち、まず、該生成したグラフの状態集合リスト記憶部１３内に各節点に対する状態集合リスト４を生成・記憶させる。次に、遷移関係記憶部１５に記憶されている有限状態機械の遷移関係を参照して、該生成したグラフの各枝にラベル付けされた遷移関係（写像）を保持する枝リスト５を枝リスト記憶部１４内に生成・記憶させる。プロパティ生成部１は、更に、イベントリスト記憶部１６内にイベントリスト６を生成・記憶させる。
【００８９】
プロパティ検証部１２は、図１１〜図１３の疑似コードで記述されている各関数（プログラム）を解釈・実行するものであり、プロパティグラフ生成部１１からグラフの検証を依頼されると、処理を開始する。プロパティ検証部１２は、まず状態集合リスト記憶部１３内の状態集合リスト及び、イベントリスト記憶部１６内のイベントリスト６を初期化する。そして、状態集合リスト４の初期値とイベントリスト６の初期値から処理を開始し、順次処理の進行に伴ってイベントリスト記憶部１６内のイベントリスト６を更新する。また、グラフ内の各節点の写像演算を行う場合には、枝リスト記憶部１４内の枝リスト５を参照して、該各節点の現状態集合を次状態集合に変換する写像演算を行う。このプロパティ検証部１２の動作は、上述した図１１〜図１３の各関数のアルゴリズムと同様であるので、詳しい説明は省略する。
【００９０】
図１５は、本実施形態の論理装置の検証方法をプログラムの実行により実現する場合に必要とされるコンピュータ３０のハードウェア環境を示すブロック図である。
【００９１】
ＣＰＵ２０は、バス２９を介してＲＯＭ２１にアクセス可能であり、電源投入時にＲＯＭ２１からＢＩＯＳ等を読み込んで入出力装置２７を含むその他の構成要素の検査、初期化を行い、それらの動作を可能にする。コンピュータ３０を論理装置の検証方法に専用に使用する場合には、本実施形態を実現するプログラムをＲＯＭ２１に記憶させて使用しても良い。ＲＡＭ２２には、本実施形態の論理装置の検証方法を実現するプログラムがＣＰＵ２０が実行可能な形式に展開される。ＣＰＵ２０は、ＲＡＭ２２から上記プログラムを読み込み実行することにより、論理装置の検証を実施する。本実施形態の論理装置の検証方法を実現するプログラムはハードディスクなどの外部記憶装置２４やフロッピーディスクやＣＤ−ＲＯＭなどの可搬記録媒体２６に記録される。記録媒体読み取り装置２５は、可搬記録媒体２６が装着可能で、可搬記録媒体２６から該プログラムを読み出し可能な駆動装置である。
【００９２】
入出力装置２７は、上記プログラムの実行に際して、検証すべき論理装置をモデル化した有限状態機械の状態遷移関係の入力や該有限状態機械のプロパティを入力するための装置であり、キーボードやマウス、ディスプレイなどからなっている。通信インタフェース２３は、ＬＡＮやインターネットなどの通信網３１を介して情報提供者２８との間で通信を行うものである。本実施形態の論理装置の検証方法を実現するプログラムを、通信インタフェース２３により情報提供者２８から通信網３１を介してダウンロードし、記憶装置２４，あるいは可搬記録媒体２６に一旦記憶されてから、ＲＡＭ２２に展開してＣＰＵ２０により実行するような利用形態にしても良い。
【００９３】
また、上記プログラムを情報提供者２８側のコンピュータで実行するような形態にして、必要な入力データ等をコンピュータ３０側から通信網３１を介して送信し、情報提供者２８側で上記プログラムを実行することによって得られた結果を通信網３１を介して受信し、該実行結果を入出力装置２７に出力させるなど、上記プログラムはネットワーク環境の下で遠隔実行させることも可能である。
【００９４】
【発明の効果】
以上説明したように、本発明によれば、有限状態機械の検証すべき目的のプロパティをグラフにより表現し、該グラフの枝毎に異なる遷移関係を対応付けられるので、複数の有限状態機械の協調動作など、従来より複雑な検証問題に対応可能となる。
【００９５】
また、写像計算を行うべき始点側の状態集合を任意の大きさの部分集合に設定可能であるので、メモリ使用量と計算時間のトレードオフに関して大きな自由度を与えることができる。これにより、従来の記号モデル検査手法ではメモリ使用量が限界を越える複雑な論理装置に対しても、検証可能となる。
【００９６】
また、更に、遷移系列の実例が発見できた場合には、全ての状態遷移（枝）を網羅して処理する前に検証を終了することができる。
【図面の簡単な説明】
【図１】本発明の実施形態を説明するための有限状態機械の遷移関係を示す図である。
【図２】遷移系列の集合Ｓをグラフ表現した図である。
【図３】本発明の実施形態に基づいてモデル検査を行う手法の説明図（その１）である。
【図４】本発明の実施形態に基づいてモデル検査を行う手法の説明図（その２）である。
【図５】本発明の第１の実施形態の処理を示すフローチャートである。
【図６】本発明の第２の実施形態の処理を説明するフローチャートである。
【図７】本発明の第３の実施形態の処理を説明するフローチャートである。
【図８】状態集合リストの例を示す図である。
【図９】枝リストの例を示す図である。
【図１０】イベントリストの例を示す図である。
【図１１】本実施形態のアルゴリズムのメインルーチンを表す疑似コードである。
【図１２】  Evaluate関数の疑似コードを示す図である。
【図１３】  CycleIsFound関数の疑似コードを示す図である。
【図１４】本発明の実施形態を実現する論理装置検証装置の構成を示す図である。
【図１５】本実施形態の論理装置の検証方法をプログラムとして実現する場合に必要とされるコンピュータのハードウェア環境図である。
【図１６】従来の技術の説明図である。
【符号の説明】
１０      論理装置検証装置
１１      プロパティグラフ生成部
１２      プロパティ検証部
１３      状態集合リスト記憶部
１４      枝リスト記憶部
１５      遷移関係記憶部
１６      イベントリスト記憶部
２０      ＣＰＵ
２１      ＲＯＭ
２２      ＲＡＭ
２３      通信インタフェース
２４      記憶装置
２５      記録媒体読み取り装置
２６      可搬記録媒体
２７      入出力装置
２８      情報提供者
２９      バス
３０      コンピュータ
３１      通信網
【図１】
0003663067.tif 000002
【図２】
0003663067.tif 000003
【図３】
0003663067.tif 000004
【図４】
0003663067.tif 000005
【図５】
0003663067.tif 000006
【図６】
0003663067.tif 000007
【図７】
0003663067.tif 000008
【図８】
0003663067.tif 000009
【図９】
0003663067.tif 000010
【図１０】
0003663067.tif 000011
【図１１】
0003663067.tif 000012
【図１２】
0003663067.tif 000013
【図１３】
0003663067.tif 000014
【図１４】
0003663067.tif 000015
【図１５】
0003663067.tif 000016
【図１６】
0003663067.tif 000017