(57)【要約】【課題】新たな演算子を含む正規表現について、その正規表現によって規定される系列の集合が他の正規表現によって規定される系列の集合を包含するか否かを効率的に判定する。【解決手段】要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する判定装置は、正規表現Ｌ及び正規表現Ｒの各々が、指定した２以上の要素データを任意の順序で配列した系列の集合を示す存在演算子を含むか否かを判断し、正規表現Ｌが存在演算子を含まず、かつ、正規表現Ｒが存在演算子を含むことを条件として、正規表現Ｒに包含されない全ての系列の集合を示す補言語を算出し、正規表現Ｌにより規定される要素データの系列の集合と、正規表現Ｒの補言語により規定される要素データの系列の集合との共通部分が空集合であることを条件として、正規表現Ｌが正規表現Ｒに包含されると判定する。【選択図】図１
2006185176.tif 000002
【特許請求の範囲】
【請求項１】
要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する判定装置であって、
前記正規表現Ｌ及び前記正規表現Ｒの各々が、指定した２以上の要素データを任意の順序で配列した系列の集合を示す存在演算子を含むか否かを判断する存在演算子包含判断部と、
前記正規表現Ｌが前記存在演算子を含まず、かつ、前記正規表現Ｒが前記存在演算子を含むことを条件として、前記正規表現Ｒに包含されない全ての前記系列の集合を示す補言語を算出する補言語算出部と、
前記正規表現Ｌにより規定される要素データの系列の集合と、前記正規表現Ｒの補言語により規定される要素データの系列の集合との共通部分が空集合であることを条件として、前記正規表現Ｌが前記正規表現Ｒに包含されると判定する包含判定部と
を備える判定装置。
【請求項２】
要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する判定装置であって、
前記正規表現Ｌ及び前記正規表現Ｒの何れもが、当該正規表現により規定される集合中の全ての系列について、当該系列中の要素データを並べ替えた他の何れの系列も当該集合に含まれる入替可能言語である場合において、
前記正規表現Ｌにより規定される系列の集合のうち、配列される要素データが予め定められた順序に従う順序規定系列の集合、及び、前記正規表現Ｒにより規定される系列の集合のうち、配列される要素データが前記予め定められた順序に従う順序規定系列の集合を求める順序規定系列生成部と、
前記正規表現Ｌの前記順序規定系列の集合が、前記正規表現Ｒの前記順序規定系列の集合に包含されることを条件として、前記正規表現Ｌが前記正規表現Ｒに包含されると判定する包含判定部と
を備える判定装置。
【請求項３】
入力した正規表現が、系列中に要素データを配列する順序を規定する順序規定演算子を含まないことを条件として、当該正規表現が前記入替可能言語であると判断する入替可能言語判断部を更に備え、
前記順序規定系列生成部は、前記正規表現Ｌ及び前記正規表現Ｒの何れもが前記入替可能言語判断部により前記入替可能言語であると判断された場合、又は、予め前記入替可能言語であると定められている場合を条件として、前記順序規定系列の集合を求める
請求項２記載の判定装置。
【請求項４】
要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する判定装置であって、
前記正規表現Ｒにより規定される系列の部分集合であって、当該部分集合に含まれる全ての系列について当該系列中の前記要素データを並べ替えた結果得られる全ての並べ替え系列を含み、かつ、当該系列中の全ての前記要素データが最大１回のみ出現する最大の部分集合を生成し、前記正規表現Ｒにより規定される集合の制約部分集合とする制約部分集合生成部と、
前記正規表現Ｌにより規定される前記系列の集合が、前記制約部分集合に含まれることを条件として、前記正規表現Ｌが前記正規表現Ｒに包含されると判定する包含判定部と
を備える判定装置。
【請求項５】
入力された正規表現に基づいて、当該正規表現が示す系列中の前記要素データを並べ替えた結果得られる全ての並べ替え系列を含み、かつ当該系列中の全ての前記要素データが最大１回のみ出現する前記系列の集合を生成し、当該正規表現の閉包集合とする閉包集合生成部を更に備え、
前記制約部分集合生成部は、前記正規表現Ｒに包含されない全ての前記系列の集合を規定する前記正規表現Ｒの否定正規表現〜Ｒを生成し、前記否定正規表現〜Ｒの閉包集合を前記閉包集合生成部により生成させ、前記否定正規表現〜Ｒの閉包集合を、全ての前記要素データが最大１回のみ出現する全ての前記系列の集合から除外した前記系列の集合を生成し、前記制約部分集合とし、
前記包含判定部は、前記正規表現Ｌの閉包集合を前記閉包集合生成部により生成させ、前記正規表現Ｌの閉包集合が、前記正規表現Ｒの制約部分集合に含まれることを条件として、前記正規表現Ｌが前記正規表現Ｒに含まれると判定する
請求項４記載の判定装置。
【請求項６】
前記閉包集合生成部は、入力された正規表現に基づいて、当該正規表現の閉包集合を示す二分決定グラフ（ＢＤＤ：Ｂｉｎａｒｙ  Ｄｅｃｉｓｉｏｎ  Ｄｉａｇｒａｍ）であって、
（１）各要素データに対応するノードを有し、
（２）各要素データに対応するノードが、当該要素データが前記系列に含まれる場合に選択される第１ラベルｈが付加された第１有向枝と、当該要素データが前記系列に含まれない場合に選択される第２ラベルｌが付加された第２有向枝とに接続され、
（３）当該集合に含まれる全ての前記系列について各々の前記要素データが含まれるか否かに応じて前記第１有向枝又は前記第２有向枝を選択した結果得られる経路が、当該集合が当該系列を含むことを示す包含末端ノードに接続され、
（４）当該集合に含まれない全ての前記系列について各々の前記要素データが含まれるか否かに応じて前記第１有向枝又は前記第２有向枝を選択した結果得られる経路が、当該集合が当該系列を含まないことを示す非包含末端ノードに接続される、
二分決定グラフを生成し、
前記包含判定部は、前記正規表現Ｌの閉包集合を示す二分決定グラフと、前記否定正規表現〜Ｒの閉包集合を示す二分決定グラフとを、二分決定グラフのインターセクション演算した結果が、前記非包含末端ノードであることを条件として、前記正規表現Ｌが前記正規表現Ｒに含まれると判定する
請求項５記載の判定装置。
【請求項７】
要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する判定方法であって、
前記正規表現Ｌ及び前記正規表現Ｒの各々が、指定した２以上の要素データを任意の順序で配列した系列の集合を示す存在演算子を含むか否かを判断する存在演算子包含判断段階と、
前記正規表現Ｌが前記存在演算子を含まず、かつ、前記正規表現Ｒが前記存在演算子を含むことを条件として、前記正規表現Ｒに包含されない全ての前記系列の集合を示す補言語を算出する補言語算出段階と、
前記正規表現Ｌにより規定される要素データの系列の集合と、前記正規表現Ｒの補言語により規定される要素データの系列の集合との共通部分が空集合であることを条件として、前記正規表現Ｌが前記正規表現Ｒに包含されると判定する包含判定段階と
を備える判定方法。
【請求項８】
要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する判定装置として、コンピュータを機能させるプログラムであって、
前記コンピュータを、
前記正規表現Ｌ及び前記正規表現Ｒの各々が、指定した２以上の要素データを任意の順序で配列した系列の集合を示す存在演算子を含むか否かを判断する存在演算子包含判断部と、
前記正規表現Ｌが前記存在演算子を含まず、かつ、前記正規表現Ｒが前記存在演算子を含むことを条件として、前記正規表現Ｒに包含されない全ての前記系列の集合を示す補言語を算出する補言語算出部と、
前記正規表現Ｌにより規定される要素データの系列の集合と、前記正規表現Ｒの補言語により規定される要素データの系列の集合との共通部分が空集合であることを条件として、前記正規表現Ｌが前記正規表現Ｒに包含されると判定する包含判定部と
して機能させるプログラム。
【請求項９】
要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する判定方法であって、
前記正規表現Ｌ及び前記正規表現Ｒの何れもが、当該正規表現により規定される集合中の全ての系列について、当該系列中の要素データを並べ替えた他の何れの系列も当該集合に含まれる入替可能言語である場合において、
前記正規表現Ｌにより規定される系列の集合のうち、配列される要素データが予め定められた順序に従う順序規定系列の集合、及び、前記正規表現Ｒにより規定される系列の集合のうち、配列される要素データが前記予め定められた順序に従う順序規定系列の集合を求める順序規定系列生成段階と、
前記正規表現Ｌの前記順序規定系列の集合が、前記正規表現Ｒの前記順序規定系列の集合に包含されることを条件として、前記正規表現Ｌが前記正規表現Ｒに包含されると判定する包含判定段階と
を備える判定方法。
【請求項１０】
要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する判定装置として、コンピュータを機能させるプログラムであって、
前記正規表現Ｌ及び前記正規表現Ｒの何れもが、当該正規表現により規定される集合中の全ての系列について、当該系列中の要素データを並べ替えた他の何れの系列も当該集合に含まれる入替可能言語である場合において、
前記コンピュータを、
前記正規表現Ｌにより規定される系列の集合のうち、配列される要素データが予め定められた順序に従う順序規定系列の集合、及び、前記正規表現Ｒにより規定される系列の集合のうち、配列される要素データが前記予め定められた順序に従う順序規定系列の集合を求める順序規定系列生成部と、
前記正規表現Ｌの前記順序規定系列の集合が、前記正規表現Ｒの前記順序規定系列の集合に包含されることを条件として、前記正規表現Ｌが前記正規表現Ｒに包含されると判定する包含判定部と
して機能させるプログラム。
【請求項１１】
要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する判定方法であって、
前記正規表現Ｒにより規定される系列の部分集合であって、当該部分集合に含まれる全ての系列について当該系列中の前記要素データを並べ替えた結果得られる全ての並べ替え系列を含み、かつ、当該系列中の全ての前記要素データが最大１回のみ出現する最大の部分集合を生成し、前記正規表現Ｒにより規定される集合の制約部分集合とする制約部分集合生成段階と、
前記正規表現Ｌにより規定される前記系列の集合が、前記制約部分集合に含まれることを条件として、前記正規表現Ｌが前記正規表現Ｒに包含されると判定する包含判定段階と
を備える判定方法。
【請求項１２】
要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する判定装置として、コンピュータを機能させるプログラムであって、
前記コンピュータを、
前記正規表現Ｒにより規定される系列の部分集合であって、当該部分集合に含まれる全ての系列について当該系列中の前記要素データを並べ替えた結果得られる全ての並べ替え系列を含み、かつ、当該系列中の全ての前記要素データが最大１回のみ出現する最大の部分集合を生成し、前記正規表現Ｒにより規定される集合の制約部分集合とする制約部分集合生成部と、
前記正規表現Ｌにより規定される前記系列の集合が、前記制約部分集合に含まれることを条件として、前記正規表現Ｌが前記正規表現Ｒに包含されると判定する包含判定部と
して機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、判定装置、判定方法、及びプログラムに関する。特に、本発明は、要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する判定装置、判定方法、及びプログラムに関する。
【背景技術】
【０００２】
近年、電子的な文書管理の効率化等を目的として、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）に基づくＸＭＬ文書が広く用いられるようになってきている。このため、膨大な量のＸＭＬ文書を処理する必要性が高まっており、その処理を効率化する技術が注目されている。例えば、ＸＭＬのスキーマ言語は、ＸＭＬ文書の取り得る構造を記述したものであり、ＸＭＬ文書がその構造に準拠しているか否かを判定する技術に用いられる（非特許文献４参照。）。この技術の応用範囲は非常に広く、例えば通信により受信したデータの誤りチェックや、データベース等におけるデータの妥当性チェック等に用いられる。
【０００３】
従来、あるスキーマ言語により規定される構造が、他のスキーマ言語により規定される構造に包含されるか否かを判定する技術が研究されている（非特許文献１及び２参照。）。この技術は、スキーマ言語の互換性チェックや、ＸＭＬプログラミングにおける型検査等に適用可能である。例えば、第１のスキーマ言語に準拠したデータがデータベースに格納されている場合において、これらのデータが第２のスキーマ言語にも準拠していることを証明するには、第１のスキーマ言語が第２のスキーマ言語に包含されることだけを調べればよい。即ちこれにより、データベース中の膨大なデータについての妥当性チェックに代えてスキーマ言語同士の包含チェックを１回だけ行えばよいので、効率がよい。
【０００４】
非特許文献３については後述する。
【非特許文献１】John E. Hopcroft and Jeffery D. Ullman, Introduction to Automata Theory, Languages and Computation I, Addison Wesley, 1979
【非特許文献２】Haruo Hosoya and  Jerome Vouillon and Benjamin C. Pierce, Regular Expression Types for XML, Proceedings of the International Conference on Functional Programming (ICFP), 11-22, Sep., 2000
【非特許文献３】S. Minato, Zero-Suppressed BDDs for Set Manipulation in Combinatorial Problems, Proceedings of the 30th ACM/IEEE Design Automation Conference, 272-277, 1993
【非特許文献４】XML Schema, World Wide Web Consortium, 2000
【発明の開示】
【発明が解決しようとする課題】
【０００５】
スキーマ言語であるＸＭＬ ｓｃｈｅｍａ（非特許文献４参照。）には、通常の正規表現には含まれないxs:allという演算子が含まれている。例えば、ＸＭＬ ｓｃｈｅｍａにおいては、以下のような記載が可能である。
【０００６】
＜xs:all＞ 
＜xs:element name="a" minOccurs="1" maxOccurs="1"/＞
＜xs:element name="b" minOccurs="0" maxOccurs="1"/＞
＜xs:element name="c" minOccurs="1" maxOccurs="1"/＞
＜/xs:all＞
【０００７】
これは、要素ａを１個、要素ｂを１個又は０個、及び、要素ｃを１個含み、他の要素は含まない全ての系列の集合を示すスキーマ言語である。このスキーマ言語は、指定された２以上の要素データを任意の順序で配列した系列の集合を示す存在演算子＆を用いて、以下の正規表現として表すことができる。
a＆(b|ε)＆c
【０００８】
非特許文献１又は２の技術は、スキーマ言語を、ＸＭＬ文書中の現れる要素や属性等の配列を示す正規表現（又は木正規表現）とみなして、複数の正規表現が互いに包含関係にあるか否かの判断技術を応用している。しかしながら、これらの技術の何れもが通常の正規表現のみを対象としており、xs:allが含まれた正規表現についての包含関係を判定することはできなかった。
【０００９】
なお、xs:all演算子を、正規表現の既存の演算子に書き換えることにより、非特許文献１又は２の技術を応用可能とも考えられる。例えば、a＆b＆.....＆zという正規表現は、以下のように書き換えることができる。
a＆b＆. ..＆z 
= a, (b＆….＆z) | b,(a＆c＆… ＆z) | … | z,(a＆…＆y)
【００１０】
更に、第１項は、以下のように展開される。
a, (b＆….＆z)
= a, b, (c＆…＆z) | a, c,(b＆d＆….＆z) | … | a, z,(b＆…＆y)
同様に、第２項以降もそれぞれ展開することができる。
【００１１】
しかしながら、このような書き換えによって展開される項の数は、要素の数の増加に応じて指数関数的に増加し、組み合わせ爆発を起こす。このような書き換えによって既存の技術を応用したのでは、包含判定の計算が現実的な時間で終了しない場合があり、適切でない。
【００１２】
そこで本発明は、上記の課題を解決することのできる判定装置、判定方法、及びプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、本発明においては、要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する判定装置であって、正規表現Ｌ及び正規表現Ｒの各々が、指定した２以上の要素データを任意の順序で配列した系列の集合を示す存在演算子を含むか否かを判断する存在演算子包含判断部と、正規表現Ｌが存在演算子を含まず、かつ、正規表現Ｒが存在演算子を含むことを条件として、正規表現Ｒに包含されない全ての系列の集合を示す補言語を算出する補言語算出部と、正規表現Ｌにより規定される要素データの系列の集合と、正規表現Ｒの補言語により規定される要素データの系列の集合との共通部分が空集合であることを条件として、正規表現Ｌが正規表現Ｒに包含されると判定する包含判定部とを備える判定装置、当該判定装置を用いた判定方法、及びコンピュータを当該判定装置として機能させるプログラムを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明の効果】
【００１４】
本発明によれば、新たな演算子を含む正規表現について、その正規表現によって規定される系列の集合が他の正規表現によって規定される系列の集合を包含するか否かを効率的に判定することができる。
【発明を実施するための最良の形態】
【００１５】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１６】
図１は、判定装置１０の機能を機能ブロックに分類して示す。判定装置１０は、要素データの系列の集合を規定する第１の正規表現Ｌが、第２の正規表現Ｒに包含されるか否かを判定する。この際、正規表現Ｌ及びＲの少なくとも何れか一方が、指定された２以上の要素データを任意の順序で配列した系列の集合を示す存在演算子＆を含む場合であっても、正確かつ効率的に包含の判定を行うことを目的とする。
【００１７】
本実施例の説明にあたり、正規表現Ｌ及びＲは、上記非特許文献４のＸＭＬ  ｓｃｈｅｍａにより記述可能な要素データの系列の集合を示すものとする。具体的には、正規表現Ｌ及びＲに含まれる存在演算子＆は、以下の規則に従う。
（１）存在演算子＆は、演算子の入れ子構造の最上位階層のみで用いられる。例えば、(a＆b)*、(a＆b),c等の表現は許されない
（２）存在演算子＆の指定対象が要素データ、又は、要素データ若しくは空系列の何れかである。例えば、a又は(a|ε)という表現のみが指定対象として許可され、a*＆bや(a,b)＆cは許されない
（３）存在演算子＆により複数の同一の要素データが指定されない。例えば、a＆a等の表現は許されない
【００１８】
判定装置１０は、存在演算子包含判断部１００と、入替可能言語判断部１１０と、補言語算出部１２０と、順序規定系列生成部１３０と、制約部分集合生成部１４０と、閉包集合生成部１５０と、包含判定部１６０とを備える。存在演算子包含判断部１００は、正規表現Ｌ及び正規表現Ｒの各々が存在演算子を含みか否かを判断する。入替可能言語判断部１１０は、正規表現Ｌのみが存在演算子を含む場合に、正規表現Ｒが、当該正規表現により規定される集合中の全ての系列について、その系列中の要素データを並べ替えた他の何れの系列もその集合に含まれる入替可能言語であるか否かを判断する。
【００１９】
例えば、入替可能言語判断部１１０は、正規表現Ｒが、系列中に要素データを配列する順序を規定する順序規定演算子を含まないことを条件として、正規表現Ｒを入替可能言語であると判断してもよい。なお、上述した、正規表現Ｌ及びＲに表記可能な存在演算子＆の規則によれば、存在演算子＆を含む正規表現は入替可能言語である。従って、正規表現Ｌ及び正規表現Ｒの何れもが存在演算子を含む場合には、正規表現Ｌ及び正規表現Ｒの何れも入替可能言語である。また、正規表現Ｌのみが存在演算子＆を含み、正規表現Ｒが入替可能言語であると入替可能言語判断部１１０により判断された場合には、正規表現Ｌ及び正規表現Ｒの何れも入替可能言語である。
【００２０】
補言語算出部１２０は、正規表現Ｌが存在演算子＆を含まず、かつ、正規表現Ｒが存在演算子＆を含むことを条件として、正規表現Ｒに包含されない全ての系列の集合を示す補言語を算出する。順序規定系列生成部１３０は、正規表現Ｌ及び正規表現Ｒの何れもが入替可能言語である場合において、正規表現Ｌにより規定される系列の集合のうち、配列される要素データが予め定められた順序に従う順序規定系列の集合を求める。更に、順序規定系列生成部１３０は、正規表現Ｒにより規定される系列の集合のうち、配列される要素データが当該予め定められた順序に従う順序規定系列の集合を求める。
【００２１】
制約部分集合生成部１４０は、正規表現Ｌが存在演算子＆を含み、かつ正規表現Ｒが入替可能言語でない場合に、正規表現Ｒにより規定される集合の制約部分集合を生成する。正規表現Ｒの制約部分集合とは、正規表現Ｒにより規定される系列の部分集合であって、当該部分集合に含まれる全ての系列について当該系列中の要素データを並べ替えた結果得られる全ての並べ替え系列を含み、かつ、当該系列中の全ての要素データが最大１回のみ出現する最大の部分集合をいう。
【００２２】
具体的な処理として、制約部分集合生成部１４０は、まず、正規表現Ｒに包含されない全ての系列の集合を規定する正規表現Ｒの否定正規表現〜Ｒを生成する。次に、制約部分集合生成部１４０は、否定正規表現〜Ｒの閉包集合を閉包集合生成部１５０により生成させる。そして、制約部分集合生成部１４０は、否定正規表現〜Ｒの閉包集合を、全ての要素データが最大１回のみ出現する全ての系列の集合から除外した系列の集合を生成し、制約部分集合とする。この際、閉包集合生成部１５０は、入力された正規表現（例えばこの例では否定正規表現〜Ｒ）に基づいて、当該正規表現が示す系列中の要素データを並べ替えた結果得られる全ての並べ替え系列を含み、かつ当該系列中の全ての要素データが最大１回のみ出現する系列の集合を生成し、当該正規表現の閉包集合とする。
【００２３】
包含判定部１６０は、正規表現Ｌが、正規表現Ｒに包含されるか否かを判定する。この判定の処理は、正規表現Ｌ及びＲが存在演算子＆を含むか否か、及び、入替可能言語であるか否かによって異なる。正規表現Ｌが存在演算子＆を含まず、かつ、正規表現Ｒが存在演算子＆を含む場合には、包含判定部１６０は、正規表現Ｌにより規定される要素データの系列の集合と正規表現Ｒの補言語により規定される要素データの系列の集合との共通部分が空集合であることを条件として、正規表現Ｌが正規表現Ｒに包含されると判定する。
【００２４】
また、正規表現Ｌ及び正規表現Ｒの何れもが入替可能言語である場合において、包含判定部１６０は、正規表現Ｌの順序規定系列の集合が、正規表現Ｒの順序規定系列の集合に包含されることを条件として、正規表現Ｌが正規表現Ｒに包含されると判定する。また、正規表現Ｌが存在演算子＆を含み、かつ正規表現Ｒが入替可能言語でない場合には次の処理となる。まず、包含判定部１６０は、正規表現Ｌの閉包集合を閉包集合生成部１５０により生成させる。そして、包含判定部１６０は、正規表現Ｌの閉包集合が、正規表現Ｒの制約部分集合に含まれることを条件として、正規表現Ｌが正規表現Ｒに含まれると判定する。
【００２５】
図２は、判定装置１０により正規表現Ｌが正規表現Ｒに含まれるか否かが判定される処理のフローチャートを示す。判定装置１０は、正規表現Ｌ及び正規表現Ｒを入力する（Ｓ２００）。そして、存在演算子包含判断部１００は、正規表現Ｌ及び正規表現Ｒの各々が存在演算子を含むか否かを判断する（Ｓ２１０）。正規表現Ｌ及び正規表現Ｒの何れもが存在演算子＆を含まない場合については、従来公知の技術により包含判定が可能であるので説明を省略する。
【００２６】
正規表現Ｒのみが存在演算子＆を含み、かつ、正規表現Ｌが存在演算子＆を含まない場合に（Ｓ２１０：Ｒのみ含む）、補言語算出部１２０は、正規表現Ｒの補言語を算出する（Ｓ２２０）。正規表現Ｒを一般化したａ１＆ａ２＆・・・＆ａｎについて、その補言語を算出する具体例を述べる。まず、以下の右辺に示す各々の正規表現を、その左辺に示す表現に置き換える置き換え規則（１）を設ける。
【００２７】
one(a) = (Σ-a)*,a,(Σ-a)*
zero_or_one(a) = (Σ-a)*,(ε|a,(Σ-a)*)
zero_or_many(a) =(Σ-a)*,(ε|a,Σ*,a,Σ*)    …規則（１）
one_or_many(a) =Σ*,a,Σ*
many(a) =Σ*,a,Σ*,a,Σ*
【００２８】
これらの置き換え規則（１）は、それぞれ、要素データａを、「一回のみ」、「0回か一回」、「０回か２回以上」、「1回以上」、「２回以上」含む系列を規定する正規表現を示す。ここで(Σ-a)*は、a以外の要素データの任意の繰り返しを表す。
【００２９】
これらの置き換え規則を用いると、以下の式（２）に示すように、正規表現Ｒの補言語~Rを、存在演算子＆を含まない正規表現で表すことができる。
~R = Σ* - R
= Σ* - ((a1|…|an)* ∩ one(a1) ∩ one(a2) ∩ …  ∩ one(an))        …式（２）
= one_or_many(Σ-{a1,…,an}) | zero_or_many(a1) | …  | zero_or_many(an)
【００３０】
なお、さらにもし正規表現Ｒがa1＆ … ＆ (ai|ε)＆ … ＆ an のように (ai|ε)という正規表現を含んでいるとしたら、上記の式の２行目で one(ai) の代わりに zero_or_one(ai) を使うということなので、３行目では対応する部分のzero_or_many(ai)に代えてmany (ai)を用いればよい。
【００３１】
続いて、包含判定部１６０は、正規表現Ｌにより規定される要素データの系列の集合と正規表現Ｒの補言語により規定される要素データの系列の集合との共通部分が空集合であることを条件として、正規表現Ｌが正規表現Ｒに包含されると判定する（Ｓ２２５）。正規表現Ｌ、及び、正規表現Ｒの補言語の何れもが存在演算子を含まないのであるから、この判定方法は従来公知の正規表現の演算により行うことができる。
【００３２】
一方、正規表現Ｌ及び正規表現Ｒの何れもが存在演算子を含む場合に（Ｓ２１０：ＬもＲも含む）、正規表現Ｌ及び正規表現Ｒの何れもが入替可能言語であるので、順序規定系列生成部１３０は、正規表現Ｌ及び正規表現Ｒの順序規定系列の集合を生成する（Ｓ２４０）。例えば正規表現Ｌが(a＆b)であり、正規表現Ｒが(a＆b＆(c|ε))である場合に、順序規定系列生成部１３０は、これらの正規表現に含まれる系列の集合のうち、要素データa、b、ｃがアルファベットの辞書順で出現する系列の集合を生成する。
【００３３】
例えば、要素データa、ｂ、ｃのみが出現する系列において、順序規定系列生成部１３０は、正規表現Ｌ∩a*b*c*の演算を行った結果、正規表現Ｌの順序規定系列の集合として(a,b)を生成する。また、順序規定系列生成部１３０は、正規表現Ｒ∩a*b*c*の演算を行った結果、正規表現Ｒの順序規定系列の集合として(a,b,(c|ε))を生成する。より詳細には、存在演算子＆により指定される要素データをアルファベット順に並べ替えた後、存在演算子＆を順序規定演算子「,」に置き換えれば順序規定系列の集合が求められる。そして、包含判定部１６０は、正規表現Ｌの順序規定系列の集合が、正規表現Ｒの順序規定系列の集合に包含されることを条件として、正規表現Ｌが正規表現Ｒに包含されると判定する（Ｓ２４５）。
【００３４】
一方、正規表現Ｌのみが存在演算子＆を含み、正規表現Ｒが存在演算子＆を含まない場合に（Ｓ２１０：Ｌのみ含む）、入替可能言語判断部１１０は、正規表現Ｒが入替可能言語か否かを判断する。正規表現Ｒが入替可能言語である場合に（Ｓ２３０：入替可）、正規表現Ｌ及び正規表現Ｒの何れもが入替可能言語であるので、判定装置１０は、Ｓ２４０に処理を移す。一方、正規表現Ｒが入替可能言語でない場合に（Ｓ２３０：入替不可）、制約部分集合生成部１４０は、次の処理を行う。
【００３５】
制約部分集合生成部１４０は、正規表現Ｒにより規定される集合の制約部分集合を生成する（Ｓ２５０）。制約部分集合をrestrict(R)とする。具体的には、制約部分集合生成部１４０は、まず、正規表現Ｒに包含されない全ての系列の集合を規定する正規表現Ｒの否定正規表現〜Ｒを生成する。いま、正規表現Ｒは存在演算子＆を含まないので、正規表現Ｒの否定正規表現の算出は、従来公知の方法により実現できる（例えば、上述の非特許文献１参照。）。特に、本実施例が対象とするＸＭＬ  Ｓｃｈｅｍａにおいては常に「決定的」正規表現が使われるため、否定正規表現〜Ｒを計算するための決定的多項式時間のアルゴリズムが知られている。
【００３６】
次に、制約部分集合生成部１４０は、否定正規表現〜Ｒの閉包集合を閉包集合生成部１５０により生成させる。具体的には、閉包集合生成部１５０は、入力された正規表現（例えばこの例では否定正規表現〜Ｒ）に基づいて、当該正規表現が示す系列中の要素データを並べ替えた結果得られる全ての並べ替え系列を含み、かつ当該系列中の全ての前記要素データが最大１回のみ出現する系列の集合を生成し、当該正規表現の閉包集合とする。例えば、正規表現を入力としてその正規表現の閉包集合を求める関数coverは、以下の式（３）で定義される。
【００３７】
cover(a) = {{a}| a}
cover(ε) = {{}}
cover(E,E') = cover(E＆E') =                                           …式（３）
{X ∪ Y | X ∈ cover(E), Y ∈ cover(E'), X と Y は共通部分を持たない}
cover(E|E') = cover(E) ∪ cover(E') 
cover(E*) = 
{{}} ∪ {X1 ∪ …∪ Xn | 任意の i について Xi ∈ cover(E), 
また i ≠ j なら Xi と Xj は共通部分を持たない}
【００３８】
そして、制約部分集合生成部１４０は、否定正規表現〜Ｒの閉包集合cover(~R)を、全ての要素データが最大１回のみ出現する全ての系列の集合（∪U）から除外した系列の集合を生成し、制約部分集合restrict(R)とする。この処理を示す数式の導出過程は以下の式（４）で表される。但し、入替可能言語のクラスをＰとする。
【００３９】
restrict(R) = ∪{R' | R' ⊆ R, R' ∈ P ∩ U}
= ∪U ∩(∪{R' | R' ⊆ R, R' ∈ P})
= ∪U - ∩{ ∪U - R' | R' ⊆ R, R' ∈ P}
= ∪U - ∩{ ∪U - R' | ∪U - R' ⊇ ~R ∩ ∪U, R' ∈ P}              …式（４）
= ∪U - ∩{ R'' | R'' ⊇ ~R ∩ ∪U, R'' ∈ U, ∪U - R'' ∈ P}
= ∪U - ∩{ R'' | R'' ⊇ ~R ∩ ∪U, R'' ∈ P ∩ U}
= ∪U - cover(~R)
【００４０】
なお、上の等式を導くためには R'' が U に含まれるなら ∪U - R'' ∈ P であることと、R'' ∈ P であることが等しいという性質を使っている。これは, R'' も ∪U - R'' も共に、ある集合(それぞれの文字の出現を覚えておくような集合)の言語として表現できることを考えれば明らかな性質である。
【００４１】
次に、包含判定部１６０は、正規表現Ｌの閉包集合を閉包集合生成部１５０により生成させる（Ｓ２６０）。そして、包含判定部１６０は、正規表現Ｌの閉包集合が、正規表現Ｒの制約部分集合に含まれることを条件として、正規表現Ｌが正規表現Ｒに含まれると判定する（Ｓ２７０）。
【００４２】
図３は、閉包集合を求める処理に用いられる二分決定グラフ（ＢＤＤ：Ｂｉｎａｒｙ  Ｄｅｃｉｓｉｏｎ  Ｄｉａｇｒａｍ）の一例を示す。図３（Ａ）は、系列の集合を表すＢＤＤを示し、図３（Ｂ）は、そのＢＤＤによって規定される系列の集合を示す。図２のＳ２５０等において閉包集合を算出するには、ＢＤＤのひとつであるＺＢＤＤを用いた方法が効率的である。本図では、まず、ＢＤＤの構造について具体例を用いて説明する。ＺＢＤＤの更に詳細な構造については非特許文献３を参照されたい。
【００４３】
ＢＤＤは、各要素データに対応するノードを有し、各ノード間に有向枝を有する非循環有向グラフ(DAG:Directed Acyclic Graph)である。例えば要素データa、ｂ、ｃの各々には、ルートノード３００、ノード３３０、及びノード３６０が対応付けられている。そして、ＢＤＤにおいて、各要素データに対応するノードは、その要素データが系列に含まれる場合に選択される第１ラベルｈが付加された第１有向枝と、その要素データが系列に含まれない場合に選択される第２ラベルｌが付加された第２有向枝とに接続される。
【００４４】
例えば、ルートノード３００は、ａが系列に含まれる場合に選択される第１有向枝３１０と、ａが系列に含まれない場合に選択される第２有向枝３２０とに接続される。また、ノード３３０は、ｂが系列に含まれる場合に選択される第１有向枝３４０と、ｂが系列に含まれない場合に接続される第２有向枝３５０とに接続される。また、ノード３６０は、ｃが系列に含まれる場合に接続される第１有向枝３７０と、ｃが系列に含まれない場合に接続される第２有向枝３８０とに接続される。
【００４５】
そして、ＢＤＤにおいて、当該集合に含まれる全ての系列について各々の要素データが含まれるか否かに応じて第１有向枝又は第２有向枝を選択した結果得られる経路が、当該集合が当該系列を含むことを示す包含末端ノードに接続される。例えば、系列｛a,b｝は当該集合に含まれるので、ルートノード３００の第１有向枝３４０とノード３３０の第１有向枝３４０とを順次選択した結果得られる経路は、包含末端ノード３９０に接続される。
【００４６】
更に、当該集合に含まれない全ての系列について各々の要素データが含まれるか否かに応じて第１有向枝又は第２有向枝を選択した結果得られる経路が、当該集合が当該系列を含まないことを示す非包含末端ノードに接続される。例えば、系列{a}は、当該集合に含まれないので、ルートノード３００の第１有向枝３１０とノード３３０の第２有向枝３５０とノード３６０の第２有向枝３８０とを順次選択した結果得られる経路は、非包含末端ノード３９５に接続される。
【００４７】
次に、集合演算をＢＤＤの演算により表す方法を示す。ＢＤＤによって規定される系列の集合についての集合演算は、ＢＤＤに対する演算として表される。例えば、集合のユニオン演算は、以下の式（５）により定義されるＢＤＤのユニオン演算によって表される。
【００４８】
n ∪ 0 = 0 ∪ n = n
1 ∪ 1 = 1
n ∪ 1 = 1 ∪ n = zbdd (n.v, n.l ∪1, n.h)                      …式（５）
n ∪ m = m ∪ n = zbdd (n.v, n.l ∪m, n.h)        (n.v ＜ m.v の場合)
n ∪ m = m ∪ n = zbdd (n.v, n.l ∪m.l, n.h ∪m.h)    (n.v = m.v の場合)
【００４９】
ここで、ｍ、ｎはＢＤＤのノードを示す。また、n.vは、nに対応する要素データを示す。また、n.v=m.vは、n及びmによって表される要素データが同一であることを意味し、n.v ＜m.vは、nによって表される要素データが、mによって表される要素データと比較してアルファベットの辞書順の先頭側であることを示す。また、０は、非包含終端ノードを示し、１は、包含終端ノードを示す。
【００５０】
また、ノードｎの第２有向枝に接続するノード、及びノードｎの第１有向枝に接続するノードを、それぞれｎ．ｌ及びｎ．ｈとする。また、ｚｂｄｄ（ｖ，ｌ，ｈ）は、要素データｖに対応するノードを新たに生成して当該ノードの第２有向枝及び第１有向枝にノードｌ及びノードｈをそれぞれ接続する処理の関数を示す。ただし ｚｂｄｄでは第１有向枝が非包含終端ノードに接続されるようなノードは作られず、ｚｂｄｄ（ｖ、ｌ、０）= l となる.
【００５１】
また、例えば、集合のインターセクション演算は、以下の式（６）により定義されるＢＤＤのインターセクション演算によって表される。
n ∩ 0 = 0 ∩ n = 0
1 ∩ 1 = 1
n ∩ 1 = 1 ∩ n = n.l ∩1                                            …式（６）
n ∩ m = m ∩ n = n.l ∩m  (n.v ＜ m.v の場合)
n ∩ m = m ∩ n = zbdd (n.v, n.l ∩m.l, n.h ∩m.h)  (n.v = m.v の場合)
【００５２】
更に、本実施例においては、存在演算子＆に対応するＢＤＤの演算を以下の式（７）に定義する。
n ＆ 0 = 0 ＆ n = 0
1 ＆ n = n ＆ 1 = n                                                  …式（７）
n ＆ m = m ＆ n = zbdd (n.v, n.l ＆ m, n.h + m)  (n.v ＜ m.v の場合)
n ＆ m = m ＆ n = zbdd (n.v, n.l ＆ m.l, (n.h ＆ m.l) ∪ (n.l ＆ m.h))
(n.v = m.v の場合)
【００５３】
更に、本実施例においては、要素データを繰り返した系列を示す演算子「＊」に対応するＢＤＤの演算を以下の式（８）に定義する。
0* = 1* = 1
n* = zbdd (n.v, n.l*, n.l* ＆ n.h)          …式（８）
【００５４】
以上に定義した演算を用いて、閉包集合生成部１５０は、以下の式（９）により、入力とする正規表現の閉包集合を示す二分決定グラフを生成する。
cover(a) = zbdd (a, 0, 1)
cover(ε) = 1
cover(E,E') = cover(E＆E') = cover(E) ＆ cover (E')      …式（９）
cover(E|E') = cover(E) ∪ cover(E') 
cover(E*) = cover(E)*
【００５５】
そして、包含判定部１６０は、正規表現Ｌの閉包集合を示す二分決定グラフcover(L)と、否定正規表現〜Ｒの閉包集合を示す二分決定グラフcover(~R)とに対して、二分決定グラフのインターセクション演算を行う(cover(L)∩cover(~R))。そして、包含判定部１６０は、その結果が、非包含末端ノード（即ちBDDにおける0）であることを条件として、正規表現Ｌが正規表現Ｒに含まれると判定する。
【００５６】
以下に、zbddによって表される系列の集合の意味を説明する。ここで、式[|x|]=yが、ＺＢＤＤのノードｘが表す系列の集合ｙを示すものとする。ZBDD の意味は、以下のようであると解釈する。
[|0 |] = {}
[|1 |] = {{}}
[|n |] = [| n.l |] ∪ {X ∪{n.v} | X ∈ [|n.h |]}
【００５７】
このとき、 演算 ∩ の正しさ (集合の上での∩と同じ意味をもつこと) は次のように説明される。
[|n |] ∩ [|0 |] = [|0 |] ∩ [|n |] = {} = [|0 |]
[|1 |] ∩ [|1 |] = {{}} = [|1 |]
[|n |] ∩ [|1 |] = [|1 |] ∩ [|n |] 
= {{}} ∩ ([|n.l |] ∪ {X ∪{n.v} | X ∈ [|n.h |]})
= {{}} ∩ [|n.l |] ∪ {{}} ∩ {X ∪{n.v} | X ∈ [|n.h |]}
= {{}} ∩ [|n.l |]
(X ∪{n.v} は {} ではありえないため)
= [| n.l ∩1 |]
【００５８】
[|n |] ∩ [|m |] = [|m |] ∩ [|n |] =    (n.v ＜ m.v の場合)
= ([| n.l  |]∪ {X ∪{n.v} | X ∈ [|n.h |]}) ∩ [|m |]
= [| n.l |]∩ [|m |]∪ {X ∪{n.v} | X ∈ [|n.h |]}) ∩ [|m |]
= [| n.l |]∩ [|m |]
(※n.v ＜ m.v より [|m |] には X ∪{n.v} は含まれないため)
【００５９】
[|n |] ∩ [|m |] = [|m |] ∩ [|n |]    (n.v = m.v の場合)
= ([| n.l  |]∪ {X ∪{n.v} | X ∈ [|n.h  |]})
∩ ([| m.l  |]∪ {X ∪{n.v} | X ∈ [|m.h  |]})
= [| n.l  |]∩ [| m.l  |]
∪ [| n.l  |]∩ {X ∪{n.v} | X ∈ [|m.h  |]}
∪ [| m.l  |]∩ {X ∪{n.v} | X ∈ [|n.h  |]}
∪ {X ∪{n.v} | X ∈ [|n.h  |]} ∩ {X ∪{n.v} | X ∈ [|m.h  |]}
=  [| n.l  |]∩ [| m.l  |]
∪ {X ∪{n.v} | X ∈ [|n.h  |] ∩ [|m.h  |]}
(※[|n.l |] また [|m.l  |] には, X ∪{n.v} の形のものは含まれない)
= [| zbdd (n.v, n.l∩ m.l, n.h ∩ m.h) |]
【００６０】
また、演算 ∪ の正しさ (集合の上での ∪ と同じ意味をもつこと) は次のように説明される。
【００６１】
[|n |] ∪ [|0 |] = [|0 |] ∪ [|n |] = {} ∪ [|n |] = [|n |] 
[|1 |] ∪ [|1 |] = {{}} = [|1 |]
[|n |] ∪ [|1 |] = [|1 |] ∪ [|n |] 
= [|1 |] ∪  [|n.l |] ∪ {X ∪{n.v} | X ∈ [|n.h |]}
= [| zbdd(n.v, n.l ∪1, n.h) |]
【００６２】
[|n |] ∪ [|m |] = [|m |] ∪ [|n |] =  (n.v ＜ m.v の場合)
= [| n.l |] ∪ [|m |] ∪ {X ∪{n.v} | X ∈ [|n.h |]})
= [| zbdd(n.v, n.l ∪m, n.h) |]
【００６３】
[|n |] ∪ [|m |] = [|m |] ∪ [|n |]      (n.v = m.v の場合)
= [| n.l  |] ∪ [| m.l  |] 
∪{X ∪{n.v} | X ∈ [|n.h  |]} ∪ {X ∪{n.v} | X ∈ [|m.h  |]})
= [| n.l  |]∪ [| m.l  |]
∪ {X ∪{n.v} | X ∈ [|n.h  |] ∪[|m.h  |]}
= [| zbdd (n.v, n.l ∪ m.l, n.h ∪ m.h) |]
【００６４】
さて、本実施例において導入された演算＆と演算 * については, これによって S と T を要素データの集合の集合とするとき、
S ＆ T  = {X ∪ Y | X ∈ S, Y ∈ T, X と Y は共通部分を持たない} 
S* = {{}} ∪{X1 ∪ …∪ Xn | 任意の i について Xi ∈ S, 
また i ≠ j なら Xi と Xj は共通部分を持たない}
のような集合の演算に対応するように定義されていればよい。
【００６５】
これらの正しさは次のように説明される。まず＆の正しさについては、
[|n |] ＆ [|0 |] = [|0 |] ＆ [|n |] = {} = [|0 |]
[|n |] ＆ [|1 |] = [|1 |] ＆ [|n |] = {{}} ＆ [|n |] = [|n |]
(※{} はどんな集合とも共通部分を持たないことに注意) 
[|n |] ＆ [|m |] = [|m |] ＆ [|n |] =  (n.v ＜ m.v の場合)
= ([| n.l  |] ∪ {X ∪{n.v} | X ∈ [|n.h |]}) ＆ [|m |]
= [| n.l |] ＆ [|m |] ∪ {X ∪{n.v} | X ∈ [|n.h |]} ＆ [|m |]
= [| n.l |] ＆ [|m |] ∪
{X ∪ Y ∪ {n.v} | X ∈ [| n.h |], Y∈ [|m |] かつ X ∪{n.v} と Y は共通部分を持たない.}
= [| n.l |] ＆ [|m |] ∪
{X ∪ Y ∪ {n.v} | X ∈ [| n.h |], Y∈ [|m |] かつ X と Y は共通部分を持たない.}
(※n.v ＜ m.v より Y には n.v は含まれないから)
= [| zbdd (n.v, m.l ＆ m, n.h ＆ m) |]
【００６６】
[|n |] ＆ [|m |] = [|m |]  ＆ [|n |]  (n.v = m.v の場合)
= ([| n.l  |] ∪ {X ∪{n.v} | X ∈ [|n.h  |]})
＆ ([| m.l  |]∪ {X ∪{n.v} | X ∈ [|m.h  |]})
= [| n.l  |] ＆ [| m.l  |]
∪ [| n.l  |] ＆ {X ∪{n.v} | X ∈ [|m.h  |]}
∪ [| m.l  |] ＆ {X ∪{n.v} | X ∈ [|n.h  |]}
∪ {X ∪{n.v} | X ∈ [|n.h  |]} ＆ {X' ∪{n.v} | X' ∈ [|m.h  |]}
= [| n.l  |]∪ [| m.l  |]
∪ [| n.l  |] ＆ {X ∪{n.v} | X ∈ [|m.h  |]}
∪ [| m.l  |] ＆ {X ∪{n.v} | X ∈ [|n.h  |]}
(※X ∪{n.v} と X' ∪{n.v} は必ず共通部分 n.v を持つ.)
= [| zbdd (n.v, m.l ＆ m.l, n.h ＆ m.l ∪ n.l ＆ m.h) |]
【００６７】
次に、*の正しさは以下のように説明される。
[|0 |]* = {{}} ∪ {} = {{}} 
[|1 |]* = {{}} ∪ {X1 | X1 ∈ {{}}} = {{}}   
[|n |]* = {{}} 
∪ {X1 ∪ …∪ Xn | 
任意の i≦n について Xi ∈ [|n.l |] ∪ {X ∪{n.v} | X∈[|n.h |]}, 
また i≠j なら Xi と Xj は共通部分を持たない}
= {{}} ∪
∪ {X1 ∪ …∪ Xn | 
任意の i≦k について Xi ∈ [|n.l |], 
また i≠j なら Xi と Xj は共通部分を持たない}
∪ {X1 ∪ …∪ Xk  ∪ Y1 ∪ …∪ Ym  | 任意の i≦k について Xi ∈ [|n.l |], 
任意の i≦m について Yi ∈ {X ∪{n.v} | X ∈ [|n.h |]}, 
i ≠ j なら Xi と Xj は共通部分を持たない,
i ≠ j なら Yi と Yj は共通部分を持たない, 
任意の Xi と Yj は共通部分を持たない.}
= {{}} 
∪ [|n.l* |]
∪ {X1 ∪ …∪ Xk  ∪ Y1 | 任意の i≦k について Xi ∈ [|n.l |], 
Y1 ∈ {X ∪{n.v} | X ∈ [|n.h |]}, i ≠ j なら Xi と Xj は共通部分を持たない,
また X1 ∪ …∪ Xk と Y1 は共通部分を持たない.}
(※なぜなら, Y1 と Y2 があったらそれらは共通部分 n.v を持つから.)
= {{}} ∪ [|n.l* |] ∪ [|n.l*|] ＆ {X ∪ {n.v} | X ∈ [|n.h |]}
= {{}} ∪ [|n.l*|] ∪ {X ∪ {n.v} | X ∈ [|n.l*|] ＆ [|n.h|]}
= [| zbdd (n.v, n.l*, n.l* ＆ n.h) |]
【００６８】
とくに演算 * のこのような実現方法により実施例は高速である。たとえば* を ＆ を使って計算する他の方法も考えられる。例えば、n* = 1 ∪ 1 ＆ n ∪ 1 ＆ n ＆ n ∪ … という演算をくりかえし行うことになるが、この方法での計算はあまり速くない。
【００６９】
以上、閉包集合の計算をＢＤＤによって行えば、閉包集合を高速かつ効率的に求めることができる。実際に、本実施例に示した方法を、従来技術を応用する方法と比較する実験を行った。その際、従来技術を応用する方法としては、本明細書の「発明が解決しようとする課題」の欄に記載の、「存在演算子を書き換える」手法を採用した。その結果、従来技術を応用する方法においてはメモリの必要容量が大きすぎて実現できない場合であっても、適切に包含判定できることが確かめられた。また、従来技術を応用する方法によっても判定可能な場合であっても、本実施例の方が数百倍高速に判定を行うことができた。
【００７０】
図４は、判定装置１０として機能するコンピュータ５００のハードウェア構成の一例を示す。コンピュータ５００は、ホストコントローラ１０８２により相互に接続されるＣＰＵ１０００、ＲＡＭ１０２０、及びグラフィックコントローラ１０７５を有するＣＰＵ周辺部と、入出力コントローラ１０８４によりホストコントローラ１０８２に接続される通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を有する入出力部と、入出力コントローラ１０８４に接続されるＲＯＭ１０１０、フレキシブルディスクドライブ１０５０、及び入出力チップ１０７０を有するレガシー入出力部とを備える。
【００７１】
ホストコントローラ１０８２は、ＲＡＭ１０２０と、高い転送レートでＲＡＭ１０２０をアクセスするＣＰＵ１０００及びグラフィックコントローラ１０７５とを接続する。ＣＰＵ１０００は、ＲＯＭ１０１０及びＲＡＭ１０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ１０７５は、ＣＰＵ１０００等がＲＡＭ１０２０内に設けたフレームバッファ上に生成する画像データを取得し、表示装置１０８０上に表示させる。これに代えて、グラフィックコントローラ１０７５は、ＣＰＵ１０００等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【００７２】
入出力コントローラ１０８４は、ホストコントローラ１０８２と、比較的高速な入出力装置である通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を接続する。通信インターフェイス１０３０は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ１０４０は、コンピュータ５００が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ１０６０は、ＣＤ−ＲＯＭ１０９５からプログラム又はデータを読み取り、ＲＡＭ１０２０を介して入出力チップ１０７０に提供する。
【００７３】
また、入出力コントローラ１０８４には、ＲＯＭ１０１０と、フレキシブルディスクドライブ１０５０や入出力チップ１０７０等の比較的低速な入出力装置とが接続される。ＲＯＭ１０１０は、コンピュータ５００の起動時にＣＰＵ１０００が実行するブートプログラムや、コンピュータ５００のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ１０５０は、フレキシブルディスク１０９０からプログラム又はデータを読み取り、ＲＡＭ１０２０を介して入出力チップ１０７０に提供する。入出力チップ１０７０は、フレキシブルディスク１０９０や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【００７４】
コンピュータ５００に提供されるプログラムは、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ１０７０及び/又は入出力コントローラ１０８４を介して、記録媒体から読み出されコンピュータ５００にインストールされて実行される。プログラムがコンピュータ５００等に働きかけて行わせる動作は、図１から図３において説明した判定装置１０における動作と同一であるから、説明を省略する。
【００７５】
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ５００に提供してもよい。
【００７６】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００７７】
【図１】図１は、判定装置１０の機能を機能ブロックに分類して示す。
【図２】図２は、判定装置１０により正規表現Ｌが正規表現Ｒに含まれるか否かが判定される処理のフローチャートを示す。
【図３】図３は、閉包集合を求める処理に用いられる二分決定グラフ（ＢＤＤ）の一例を示す。
【図４】図４は、判定装置１０として機能するコンピュータ５００のハードウェア構成の一例を示す。
【符号の説明】
【００７８】
１０  判定装置
１００  存在演算子包含判断部
１１０  入替可能言語判断部
１２０  補言語算出部
１３０  順序規定系列生成部
１４０  制約部分集合生成部
１５０  閉包集合生成部
１６０  包含判定部
３００  ルートノード
３１０  第１有向枝
３２０  第２有向枝
３３０  ノード
３４０  第１有向枝
３５０  第２有向枝
３６０  ノード
３７０  第１有向枝
３８０  第２有向枝
３９０  包含末端ノード
３９５  非包含末端ノード
５００  コンピュータ
【図１】
2006185176.tif 000003
【図２】
2006185176.tif 000004
【図３】
2006185176.tif 000005
【図４】
2006185176.tif 000006