(57)【特許請求の範囲】
【請求項１】
制約ソルバ処理を実行する、コンピュータによって実施されるシステムであって、
計算スレッドの入力ソルバ状態を１セットのサポートグラフとして表すためのブックキーピングコンポーネントであって、前記入力ソルバ状態は、前記計算スレッドの処理に関連し、前記計算スレッドに作用している並列ソルバから受け取られ、前記サポートグラフは、リテラルを有する複数のノードと、前記並列ソルバに関連付けられた制約とを含み、前記複数のノードから前記制約を充足するリテラルが仮定される、ブックキーピングコンポーネントと、
受け取ったサポートグラフのうちで同じリテラルを有するノードを併合するように、前記受け取ったサポートグラフを対ごとに併合し、前記計算スレッドの最終状態を表す併合済みグラフにするためのマージコンポーネントであって、前記併合済みグラフは、前記サポートグラフの対に含まれるノードを含む、マージコンポーネントと、
前記並列ソルバに関して、複数の学習済み制約を加え、前記併合済みグラフに含まれるノードのリテラルが前記併合済みグラフの制約を充足しない場合、中間の仮定を変更せず以前のノードを除去するための伝播コンポーネントと
を備えることを特徴とするシステム。
【請求項２】
前記ブックキーピングコンポーネントは、前記計算スレッドに作用している並列ブール充足可能性（ＳＡＴ）ソルバから前記入力ソルバ状態を受け取ることを特徴とする請求項１に記載のシステム。
【請求項３】
前記ブックキーピングコンポーネントは、前記計算スレッドに作用しているＣＳＰソルバから前記入力ソルバ状態を受け取ることを特徴とする請求項１に記載のシステム。
【請求項４】
前記ＣＳＰソルバが、評価の束Ａおよび１組の値Ｄに従って定義され、ただしＤおよびＡは同じ集合の要素であることを特徴とする請求項３に記載のシステム。
【請求項５】
推測値に基づいて変数の割当てを推論する、学習および推理コンポーネントをさらに備えることを特徴とする請求項１に記載のシステム。
【請求項６】
前記入力ソルバ状態は、前記計算スレッドに作用している２つの並列ＳＡＴソルバからのものであり、前記マージコンポーネントは、ｎ個の新しい、異なるリテラルを前記サポートグラフのｎ個のコピーのそれぞれに加え、ただしｎは正の整数であることを特徴とする請求項１に記載のシステム。
【請求項７】
制約ソルバ処理の、コンピュータによって実施される方法であって、
計算スレッドの入力ソルバ状態を１セットのサポートグラフとして表すステップと、
並列ソルバの、前記計算スレッドの処理に関連する前記入力ソルバ状態に関連する前記サポートグラフを受け取るステップであって、前記サポートグラフは、リテラルを有する複数のノードと、前記並列ソルバに関連付けられた制約とを含み、前記複数のノードから前記制約を充足するリテラルが仮定される、ステップと、
受け取ったサポートグラフのうちで同じリテラルを有するノードを併合するように、前記受け取ったサポートグラフを対ごとに併合し、前記計算スレッドの最終状態を表す併合済みグラフにするステップであって、前記併合済みグラフは、前記サポートグラフの対に含まれるノードを含む、ステップと、
前記並列ソルバに関して、複数の学習済み制約を加えるステップと、
前記併合済みグラフに含まれるノードのリテラルが前記併合済みグラフの制約を充足しない場合、中間の仮定を変更せず以前のノードを除去するステップと
を含むことを特徴とする方法。
【請求項８】
前記並列ソルバのそれぞれの前記サポートグラフを同時に操作するステップをさらに含むことを特徴とする請求項７に記載の方法。
【請求項９】
残りのリテラルを、仮定として指定するステップと
をさらに含むことを特徴とする請求項７に記載の方法。
【請求項１０】
前記並列ソルバはブールＳＡＴソルバであることを特徴とする請求項７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列化制約充足問題ソルバにおけるＬｏｃｋ−ｆｒｅｅ状態併合に関する。
【背景技術】
【０００２】
プロセッサ、メモリ、ストレージなど、ハードウェアにおける技術的な進歩は、多数の様々なタイプのデータ型のメディア（たとえば、音声、テキスト、ビデオ）、開発プログラムなどを処理することにより、より豊かなユーザ体験をもたらす、より大規模かつより複雑なソフトウェアアプリケーションの作成を促進するものとして引き続き働いている。
【０００３】
シングルプロセッサシステムにおける、これらのベンダによって頼りにされているハードウェアサポートは、もはやムーアの法則に関連する過去の回路高速化を容易に得ることができるとは思われないため、現実的でないものとなり得る。ムーアの法則の原理面は、およそ１８カ月ごとに、チップ上のトランジスタの数が、概してデバイス作製における技術的な進歩により倍加することである。過去には、これが達成されたとき、プロセッサのクロック速度もまた増大される。しかし、より隙間なく詰め込まれたトランジスタに現在伴う熱密度は非常に高く、クロック速度を増すことは、熱を効率的かつ効果的に放散させることができないことを意味する。このように、より小型のデバイスは、もはや直接的には、より高速かつより低い温度で動作するマシンにならない。
【０００４】
利用されている１つの代替は、単に、より多くのデバイスを使用することである。換言すれば、プロセッサのアドレス体系において、例えば、ソフトウェア需要に対処するように並列またはマルチプロセッサシステムを設計することである。しかしながら、並列処理システムは、アルゴリズムまたはコンピュータのスレッドを処理するための複雑な調和技法を必要とする。制約解決は、これらの調和技法を検査する上で有用である。しかしながら、従来の順序アルゴリズムは、使用可能な共用メモリ並列プロセッサすべてを効果的に利用するように再構築することが困難なことで悪名高い。
【０００５】
制約充足問題（ＣＳＰ）、例えばソルバ−ブール充足可能性（ＳＡＴ）ソルバなど−も、決して先の観察に対する例外ではない。一般に、順序ＣＳＰソルバは、部分解（一部の制約変数に対する割当て）を含む現在の状態を有し、そこからソルバは１つまたは複数の現在割り当てられていない変数を割り当てることによって作成された拡張解（ａｕｇｍｅｎｔｅｄ  ｓｏｌｕｔｉｏｎ）を有する新しい状態に移動しようと試みる。この新しい割当ては、制約の伝播を経て他の割当てを生じる。次いで、制約の伝播により、現在の割当ての中で競合（ｃｏｎｆｌｉｃｔ）が検出される可能性があり、これらの現在の割当ては、（その競合を軽減するために）部分的にアンドゥ（ｕｎｄｏ）し、新しい割当てに変更され、再伝播されなければならない。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
並列処理システムでは、この問題解決領域の並列実施は、上述のようにして制約を伝播するいくつかの並列計算が行われる。問題は、いくつかの競合のないソルバ状態（伝播後）を、単一の競合のないソルバ状態に併合することである。
【課題を解決するための手段】
【０００７】
以下、開示される技術革新のいくつかの態様を基本的に理解するために簡単な概要を提示する。この概要は包括的な全体像ではなく、また主な／クリティカルな要素を識別すること、あるいはその範囲を述べることは意図されていない。後で提示される、より詳しい説明の序文として、いくつかの概念を簡単な形態で提示することを目的とするにすぎない。
【０００８】
開示されているアーキテクチャは、一般的な制約充足問題（ＣＳＰ）ソルバにおける並列処理を支援する。ソルバの計算スレッドの状態は、１セットのサポートグラフとして表される。サポートグラフのセットは、しばしば一般的なＣＳＰソルバの重要な構成要素である真理性維持システム（ＴＭＳ）の効率的な実施に際して認められた機構である。本明細書では、サポートグラフは、グラフ同士を対ごとに併合することによって新しいやり方で使用され、新しい競合のないグラフを生み出す。これは、制約の並列伝播を複数の新しい割当てにわたってマッピングし、複数の伝播に由来する状態同士を併合することにより（より多くの変数が割り当てられた）新しい問題ソルバ状態に縮小（ｒｅｄｕｃｅ）することによって、ＣＳＰソルバの構築を可能にする。このアーキテクチャは、概して、いくつかの形式的な特性を有する任意のＣＳＰソルバで適用されることができる。たとえば、１つの実装では、このアーキテクチャは、特にブール充足可能性（ＳＡＴ）ソルバの状況で適用されることができる。
【０００９】
本明細書で開示され、かつ特許請求されているアーキテクチャは、ソルバ処理を容易にする、コンピュータによって実施されるシステムを含む。このシステムは、計算スレッドの入力ソルバ状態を１セットのグラフとして表すためのブックキーピングコンポーネントを含む。マージコンポーネントが、その１セットのグラフの、少なくとも２つの入力グラフの対ごとの併合を実施し、その計算スレッドの最終状態を表す併合済みグラフにする。
【００１０】
前述の、また関連の目的を達成するために、開示されている技術革新の、いくつかの例示的な態様について、以下の説明および添付の図面に関連して、本明細書で述べる。しかしながら、これらの態様は本明細書で開示されている原理を使用することができる様々なやり方のうちのいくつかにすぎず、そのような態様すべてとそれらの均等物を包含することが意図されている。他の利点および新規の特徴は、図面と共に考察されたとき、以下の詳細な説明から明らかになるであろう。
【図面の簡単な説明】
【００１１】
【図１】並列実装によるソルバ処理を容易にするシステムの図である。
【図２】本技術革新によるソルバ状態を処理する方法の図である。
【図３】回答割当てのための推測値を推論するために学習および推理を使用する、代替の並列ソルバシステムの図である。
【図４】例示的な制約伝播プロセスから導出される（Ｌ，Ｋ）演繹グラフの図である。
【図５】図４のサポートグラフから出力された競合する制約を処理するための新しいグラフの図である。
【図６】２つのサポートグラフを作成および併合する方法の図である。
【図７】対ごとの併合プロセスのために２つの入力サポートグラフを切り詰める方法の図である。
【図８】併合済みグラフの競合を処理する方法の図である。
【図９】順序ＳＡＴソルバのために、サポートグラフを切り詰め、かつ併合して最終的な、併合された競合のないグラフにする方法の図である。
【図１０】並列ＳＡＴソルバのために、サポートグラフを切り詰め、かつ併合して最終的な、併合された競合のないグラフにする方法の図である。
【図１１】本技術革新のソルバ状態処理をマルチコア処理システムに適用するシステムの図である。
【図１２】本技術革新によるソルバ状態処理をマルチコア・マルチプロセッサシステムに適用するシステムの図である。
【図１３】本技術革新によるソルバ状態処理を、別々のコンピューティングシステムにわたるソルバ状態処理に適用するシステムの図である。
【図１４】大きな探索空間内での問題ソルバとして適用するための真理性維持システムおよび推論エンジンを使用するＣＳＰソルバシステムの図である。
【図１５】開示されている並列化ソルバ状態アーキテクチャを使用するように動作可能なコンピューティングシステムのブロック図である。
【図１６】開示されている技術革新による並列化ソルバ処理を利用することができる例示的なコンピューティング環境の概略的なブロック図である。
【発明を実施するための形態】
【００１２】
開示されているアーキテクチャは、従来、順序問題としてすら対処することが困難であったことで悪名高い共用メモリ並列プロセッサシステムに対する解決策を提供する。本技術革新は、並列制約充足問題（ＣＳＰ）ソルバにおいて、Ｌｏｃｋ−ｆｒｅｅ状態併合を実現する。ソルバの計算スレッドの状態は、１セットのサポートグラフとして表される。（話を簡単にするために、混乱が生じないとき、「セットのサポートグラフ」ではなく、「サポートグラフ」という句が使用されることになる。）これらのサポートグラフは、Ｌｏｃｋ−ｆｒｅｅであって、新しい競合のないグラフを生み出すプロセスを説明する対ごとの方法でグラフ同士を併合することによって新しい方法で用いられる。このアーキテクチャは、概して、基礎となる問題がブール充足可能性に縮小可能である任意のＣＳＰソルバで適用可能であり、１つの特定の実装では、このアーキテクチャは、特にブール充足可能性（ＳＡＴ）ソルバの状況で適用することができる。
【００１３】
ＳＡＴソルバの特定の実装では、ＳＡＴソルバ問題は、２つの形のうちの１つで問題を生む１組のブール式から始まる。式が常に真であるかどうか知っていることが望ましい。換言すれば、式が公理であるかどうか判定することが望ましい。任意の式の補数（または否定）をとることによる等価の問いは、式が充足可能かどうか判定することである。すなわち、式を真にする変数の割当てがあるか、と問うことである。機械化するために、これは問題にアプローチするやり方となり得る。これは、問題を証明する公理ではなく、充足可能性問題として取り組まれる。
【００１４】
デジタル設計の空間では、ブール式が公理であるか否か知っていることが望ましい。示そうとする式が公理であるようにするのではなく、否定が充足可能でないことを示す。ブール式は、たとえば論理和標準形など標準形式で提示される。論理和標準形は、式の集合が有限であり、否定符号（論理ＮＯＴ）および論理和（ｄｉｓｊｕｎｃｔｉｏｎ）（または論理ＯＲ）という式のいずれか一つを生む二つの論理結合子だけがある。したがって、現在は標準形式にある元の問題を充足可能とするために、これらの論理和式が確実に真となる変数を割り当てる。標準形式にある式のそれぞれは、節と呼ばれる。本明細書では、「節」という用語が制約を指す可能性もある。
【００１５】
ＣＳＰソルバなどそのような複雑な領域では、部分解を導出することができる解析方法すらないことがしばしばである。本質的に推測（ｇｕｅｓｓ）である回答を仮定しなければならない。結果的に、かつてプログラムによって真であると考えられた初期の仮定が、時間の経過につれて変化し、後で偽であることが発見される可能性がある。したがって、プログラムは、なされてしまった可能性のある推論を、後で偽であると判明した仮定に基づいてアンドゥするという問題を有する。効率的なものにするために、プロセスは可能な限りアンドゥを少なくしようと試みる。
【００１６】
ＳＡＴは、充足可能性を実証するために回答の部分割当てが推測されるので、上述の問題に直面する。この推測により、新しい推測の論理的因果関係（ｌｏｇｉｃａｌ  ｃｏｎｓｅｑｕｅｎｃｅｓ）のため、他のブール変数回答が割り当てられる。そのような推測の結果、変数すべてが割り当てられることになる好結果の１組の推測値（ｇｕｅｓｓ）がついにできるか、あるいは、なされた最後の推測により論理的不整合に至り、この点でそれらの推定値の１つが放棄される。
【００１７】
従来では、辞書式バックトラック（ｃｈｒｏｎｏｌｏｇｉｃａｌ  ｂａｃｋｔｒａｃｋｉｎｇ）を後戻りするために使用することができ、一度に１つの変数について値を選択する。このバックトラックは、変数に割り当てる正当な値がなくなるまで続行することができる。
【００１８】
開示されている技術革新は、最も関連のある仮定をアンドゥする、たとえばその１つの仮定だけ変更し、中間の仮定には何も変更を加えない機能を提供することによって、「非辞書式」バックトラックを使用する。換言すれば、後退により現在の位置とある以前の位置との間でノードすべてが変更される従来のシステムに対して、アルゴリズムは任意の経路で戻り、１つの仮定を選び、その仮定だけ変更することができる。
【００１９】
次に、本技術革新は図面を参照して説明され、図面番号は全体を通じて要素のように参照して用いられる。以下の説明では、説明の目的で、本技術革新を完全に理解するために、多数の特定の詳細が述べられる。しかしながら、本技術革新はこれらの特定の詳細なしに実施することができることは明らかであろう。他の場合には、本技術革新の説明を容易にするために、周知の構造およびデバイスがブロック図の形態で示される。
【００２０】
最初に図面を参照すると、図１は、並列実装によるソルバ処理を容易にするシステム１００を示す。システム１００は、計算スレッド並列ソルバの処理に関連するソルバ状態１０４（ソルバ状態1、ソルバ状態2、．．．、ソルバ状態Nで示され、ただしＮは正の整数である）を、１セットのサポートグラフとして表すためのブックキーピングコンポーネント１０２を含む。ソルバ状態１０４は、ブックキーピングコンポーネント１０２によって処理するために、並列で様々なシステムから受け取ることができる。ブックキーピングコンポーネント１０２は、後続の併合のために、ソルバ状態１０４を処理し、サポートグラフにする。また、システム１００は、その１セットのサポートグラフの少なくとも２つの入力サポートグラフを対ごとに併合し、計算スレッドの最終状態を表す併合済みグラフにするためのマージコンポーネント１０６を含むことができる。
【００２１】
ブックキーピングコンポーネントおよびマージコンポーネント（１０２および１０６）によるサポートグラフの操作は同時とすることができる。換言すれば、ソルバのうちの１つからのソルバ状態は、別のソルバからのソルバ状態の処理中に受け取られ、かつ処理される。
【００２２】
１つの実装では、ブックキーピングコンポーネント１０２は、計算スレッドに作用している並列ＣＳＰソルバから入力ソルバ状態１０４を受け取る。下記でより詳細に述べるように、ＣＳＰソルバは、評価の束（ａ  ｌａｔｔｉｃｅ  ｏｆ  ｖａｌｕａｔｉｏｎｓ）Ａおよび１組の値Ｄに従って定義され、ただしＤおよびＡは同じ集合である。より特定の代替の実装では、ブックキーピングコンポーネント１０２は、計算スレッドに作用している並列ブールＳＡＴソルバから入力ソルバ状態１０４を受け取る。
【００２３】
入力ソルバ状態１０４が、計算スレッドに作用している２つの並列ＳＡＴソルバからのものである場合、マージコンポーネント１０６は、ｎ個の新しい、異なるリテラルを、Ｌ完全（Ｌ−ｃｏｍｐｌｅｔｅ）、Ｋ整合（Ｋ−ｃｏｎｓｉｓｔｅｎｔ）の演繹グラフのｎ個のコピーのそれぞれに加えることを容易にする。これについても、以下でさらに述べる。
【００２４】
マージコンポーネント１０６は、入力ソルバ状態をＬｏｃｋ−ｆｒｅｅの形でサイクルなしで併合済みグラフに併合し、併合済みグラフ内の競合をなくし、それによって競合のないグラフ１０８を出力する。
【００２５】
Ｌｏｃｋ−ｆｒｅｅ処理に関して、並列処理（ｐａｒａｌｌｅｌｉｓｍ）を行う１つのやり方は並列スレッド処理を扱う機能をもつことである。換言すれば、最終的に結果の仕上げ（ｆｉｎａｌｉｚａｔｉｏｎ）を必要とするいくつかの並列スレッドが存在する。
【００２６】
並列スレッド処理を実施する１つの従来のやり方は、第１のスレッドが結果に到達するまでその第１のスレッドが単に他のスレッドを何らかの共用データ構造から締め出すことである。次いで、先のスレッド結果と整合する結果を得ることが他のスレッドの義務となる。
【００２７】
本技術革新は、並列で１ステップ先に処理し、次いで結果を組み合わせることによって、従来のロックを回避する。したがって、この方法はｍが正の整数であるｍ個の独立のエージェントがあるため、各エージェントが１ステップ先に進んでおり、回答全体を得るために、エージェントが結果を組み合わせなければならない点でＬｏｃｋ−ｆｒｅｅである。プロセスの中心部で、結果が一度に２つずつ組み合わされる。  
【００２８】
サポートグラフを併合するとき、いくつかの望ましくないことが起こる可能性がある。第１に、競合が２つのグラフ間で発生する。換言すれば、第１のグラフでは、変数ｘに真の値が割り当てられており、他のグラフ内の同じ変数ｘには、偽が割り当てられている。解決するために、２つのグラフが併合され、この競合に通じる１組の仮定が見出される。見出された後で、関連する仮定、または複数の仮定のうちの１つが撤回される。
【００２９】
第２の問題は、あるグラフ内の割当てが仮定であり、別のグラフ内の同じ割当てが単位導出（ｕｎｉｔ  ｒｅｓｏｌｕｔｉｏｎ）によって導出されるとき発生する可能性がある。今、グラフ併合が試みられた場合、得られるグラフはサイクルを示すことになる。解決するために、欲張り法を使用する非常に経済的なやり方で仮定が撤回される。これについては、下記でより詳細に述べる。
【００３０】
図２は、本技術革新によるソルバ状態を処理する方法を示す。説明を簡単にするために、たとえばフローチャートまたは流れ図の形態で本明細書に示されている１つまたは複数の方法は一連の動作として示され、述べられているが、いくつかの動作は本技術革新によれば本明細書に示され、述べられているものとは異なる順序、および／または他の動作と同時に発生してもよいため、本技術革新が動作の順序によって制限されないことを理解されたい。たとえば、方法は別法として状態図においてなど一連の相互関係のある状態またはイベントとして表すことができることを、当業者なら理解するであろう。さらに、本技術革新による方法を実施するために、示されている動作すべてが必要とされるわけではない。
【００３１】
２００では、サポートグラフは並列ソルバのソルバ状態から生成される。２０２では、ソルバ状態のサポートグラフが受け取られ、そのソルバ状態は計算スレッドの処理に関連する。２０４では、同じリテラルを有するノードを併合するために各ソルバからのサポートグラフが同時に切り詰められる。２０６では、これらのサポートグラフが対ごとに併合され、計算スレッドの最終状態を表す併合済みサポートグラフにされる。２０８では、併合済みグラフの完全性を達成するために制約伝播が開始される。２１０では、制約伝播中に非辞書式バックトラックが使用され、前の仮定を変更し、競合を解決する。２１２では、競合するリテラルがなくされ、競合のない併合済みグラフを出力する。
【００３２】
次に、図３を参照すると、回答を割り当てるための推測値を推論するために学習および推理を使用する代替の並列ソルバシステム３００が示される。システム３００は、ソルバ状態を生成する複数のシステム（たとえば、２つの順序ソルバシステム）３０２を含む。たとえば、（システムAで示されている）第１のシステム３０４、第１の順序ＣＳＰソルバは、たとえばソルバ状態３０６（ソルバ状態A1、．．．、ソルバ状態ASで示され、ただしＳは正の整数である）を生成し、（システムＢで示されている）第２のシステム３０８、第２の順序ＣＳＰソルバは、たとえばソルバ状態３０８（ソルバ状態B1、．．．、ソルバ状態BTで示され、ただしＴは正の整数である）を生成する。
【００３３】
ブックキーピングコンポーネント１０２は、対応する第１および第２のシステム（３０４および３０８）からソルバ状態（３０６および３１０）を受け取り、並列スレッド処理のための、かつシステム制約を反映するソルバ状態のグラフ（たとえば、サポートグラフ）を作成する。これらのグラフは、併合して競合のない状態１０８を有する併合済みグラフにするためにマージコンポーネント１０６に渡される。しかしながら、この併合済みグラフは完全でない可能性がある。したがって、伝播コンポーネント３１２によって促進される制約伝播が併合済みグラフにおける完全性を確保するために使用される。これについては、以下でより詳細に述べる。伝播コンポーネント３１２はまた、中間の仮定を変更することなしに、より以前の仮定を直接変更するために制約伝播の一部として非辞書式バックトラックを容易にする。
【００３４】
システム３００はまた、可変の割当てについて、制約伝播中に推測値に基づいて推論するのを容易にする（本明細書では推論エンジンとも呼ばれる）学習および推理コンポーネント３１４を使用することができる。
【００３５】
システム３００は回答のすべてが既知であるわけではない応用例において動作することができる。したがって、いったい何が進行中であるかについて仮定される。たとえば、サーバプログラムがより多くのデータにさらされたとき、そのプログラムが行った、より以前の仮定が偽であることを発見されるということが発生する可能性がある。次いで、そのプログラムはなされてしまった可能性のある推論を偽の前提に基づいてアンドゥするという問題を有する。
【００３６】
充足可能性問題では、充足可能性を実証するために、回答の割当てを推測しなければならない可能性があるため、同様の問題が存在する可能性がある。換言すれば、新しい推測がなされる順序的なものの場合には、新しい推測の論理的因果関係のため、これは他のブール変数回答を割り当てさせる。さらに、最終的に２つのことのうちの１つが起こる。変数すべてが割り当てられることになる好結果の１組の推測値ができるか、あるいは、なされた最後の推測により論理的不整合に至り、この点で、それらの推定値の１つが放棄される。
【００３７】
ブール充足可能性の最も古典的なバージョンでは、最後の推測値の符号が変更され、その結果、以前、ブール変数に偽が割り当てられていた場合、その割当てが真に変更され、プロセスが再び進む。割当てが真でも偽でもない可能性があるとき論理的不整合が発生する可能性があり、これは、ある以前の、行われた割当てが誤りであったに違いないことを意味する。
【００３８】
必要に応じて、繰り返し後退および前進するのではなく、観察された競合に通じる仮定の実際の集合が識別される。ひとたび競合が観察されたなら、何が競合に通じるか正確に診断することが望ましく、それは、なされた最後の仮定であることも、そうでないこともある。そのような診断は正確に行うことができ、したがって、１組の適合しない仮定が識別される。
【００３９】
（たとえば、選択に関連する）本アーキテクチャは、その様々な態様を実施するために、様々な、学習および推理をベースとするスキームを使用することができる。たとえば、どの割当てを（たとえば、真から偽に、または偽から真に）トグルするか判定するためのプロセスは、自動クラシファイアシステムおよびプロセスを介して、うまく進めることができる。
【００４０】
クラシファイアは、入力属性ベクトルｘ＝（ｘ１，ｘ２，ｘ３，ｘ４，ｘｎ）をクラスラベルｃｌａｓｓ（ｘ）にマッピングする関数である。また、クラシファイアは、その入力が、あるクラスに属する信頼度（ｃｏｎｆｉｄｅｎｃｅ）、すなわちｆ（ｘ）＝ｃｏｎｆｉｄｅｎｃｅ（ｃｌａｓｓ（ｘ））を出力することができる。そのような類別では、確率的解析および／または他の統計解析（たとえば、１人または複数の人に対する期待値を最大化するように解析ユーティリティおよびコストを考慮するもの）を使用し、ユーザが自動的に実施させたいと望むアクションを予測（ｐｒｏｇｎｏｓｅ）または推論することができる。
【００４１】
本明細書では、「推論する（ｔｏ  ｉｎｆｅｒ）」および「推論（ｉｎｆｅｒｅｎｃｅ）」という用語は、概して、イベントおよび／またはデータを介して獲得された１組の観察から、システム、環境、および／またはユーザの状態について推理する、または推論するプロセスを指す。推論は、特定の状況またはアクションを識別するために使用することができ、または、たとえば諸状態にわたる確率分布を生成することができる。推論は、確率的なものとすることができる−すなわち、当該の諸状態にわたる確率分布の計算が、データおよびイベントの考察に基づく。また、推論は、１組のイベントおよび／またはデータから、より高いレベルのイベントを構成するために使用される技法を指すことができる。そのような推論により、イベント同士が時間的に近接して相関されようと、そうでなかろうと、また、イベントおよびデータが１つまたは複数のイベントおよびデータソースに由来していようと、１組の観察されたイベント、および／または記憶されたイベントデータから、新しいイベントまたはアクションが構築される。
【００４２】
サポートベクトルマシン（ＳＶＭ）は、使用することができるクラシファイアの一例である。ＳＶＭは、トリガ入力イベントを非トリガイベントから最適な形で分離する、可能な入力の空間内で超曲面（ｈｙｐｅｒｓｕｒｆａｃｅ）を見出すことによって動作する。直観的には、これにより類別は、トレーニングデータに近いが同一ではないデータを検査するために正しいものとなる。他の有向および無向のモデル類別手法は、たとえば、様々な形態の統計的回帰を含む。ナイーブベイズ、ベイズネットワーク、決定木、ニューラルネットワーク、ファジィ論理モデル、および独立の様々なパターンを表す他の統計的類別モデルを使用することができる。また、本明細書で使用される類別は、ランクおよび／または優先順位を割り当てるために使用される方法をも含む。
【００４３】
本明細書から容易に理解されるように、本アーキテクチャは、（たとえば、一般的なトレーニングデータを介して）明示的にトレーニングされるクラシファイア、ならびに（たとえば、ユーザの挙動を観察すること、外来情報を受け取ることを介して）暗黙にトレーニングされるクラシファイアを使用することができる。たとえば、ＳＶＭは、クラシファイアコンストラクタおよび特徴選択モジュール内での学習またはトレーニングを介して構成される。したがって、クラシファイアは、所定の基準に従っていくつかの関数を自動的に学習および実行するために使用することができる。
【００４４】
換言すれば、学習および推理コンポーネント３１４は、競合処理のために、学習された制約を適用することができる。下記で述べるように、一例では、１つの学習された制約を、競合解決のために順序ＳＡＴソルバに加えることができる。同様に、並列ＳＡＴソルバでは、いくつかの学習された制約を、制約伝播処理中に加えることができる。
【００４５】
制約伝播の例を見る前に、よりよく理解するために、予備情報を提供する。制約充足問題（ＣＳＰ）は、一般に以下のように説明される。すなわち、変数の有限集合Ｖ、（一般に有限の）１組の値Ｄ、（おそらくは無限の）評価の束Ａ、および関数（制約）の有限集合Ｄ|V|→Ａが与えられた場合、Ａ内で最大である制約すべてにおいて、その束がタプルのイメージの間で一致するようにＤ|V|におけるタプルを見出す。以下は、ＤおよびＡが共にブールの束である場合の説明であり、特に、ＳＡＴソルバの状況における本発明について述べる。この制限にもかかわらず、本発明は、ＤおよびＡが同じ集合である任意のＣＳＰに一般化可能である。
【００４６】
変数は、ｘ1、ｘ2、．．．、ｘnで示され、ただしｎは正の整数である。リテラルは、「符号付き」変数、すなわちｘ1、¬ｘ1、ｘ2、¬ｘ2、．．．である。Ｌは、ｌがＬ全体に及ぶリテラルの集合である。節は、□で示される空の節を含む、リテラルの有限集合である。節｛ｘ1，¬ｘ2，ｘ3，¬ｘ4｝は、しばしば代わりに、ｘ1∨¬ｘ2∨ｘ3∨¬ｘ4（その諸要素の論理ＯＲ（∨））として書き表される。命題式の任意の有限集合を、論理的に等価な、節の有限集合として表すことができる。
【００４７】
変数には、割り当てなくても、真（Ｔｒｕｅ）（たとえば、ｘ1）または偽（Ｆａｌｓｅ）（たとえば、¬ｘ1）の値を割り当ててもよい。変数ｘに対する値Ｔｒｕｅの割当ては、リテラルｘと合成される。変数ｘに対する値Ｆａｌｓｅの割当ては、リテラル¬ｘと合成される。評価は、割当てを変数から節にリフトする結果として、節に帰される。Ｔｒｕｅの割当てを有する節は充足され、Ｆａｌｓｅの割当てを有する節は違反したものとなる。充足可能性は、１組の節を充足する論理変数の割当てがあるかどうかという問いである。恒真式は、１組の節があらゆる割当てによって充足されるかどうかという問いである。式はその否定が充足可能なものである場合だけに限って恒真式である点で、充足可能性と恒真式は、二重概念である。
【００４８】
Ｋを、Ｌ内のリテラルにわたる１組の節とする。（Ｌ，Ｋ）演繹グラフは、そのノードが、Ｌの部分集合と共に対にされた個々のリテラルでラベル付けされ、そのエッジが、Ｋのメンバでラベル付けされる有向グラフである。どのＬおよびＫが意図されているかについて混乱がないとき、このグラフは、単に演繹グラフと呼ばれる。ノードは、第１のノードから第２のノードへの有向エッジがあり、そのエッジが節ｋでラベル付けされている場合だけ、別のノードに対するｋ祖先である。
【００４９】
（Ｌ，Ｋ）演繹グラフは、ノード上のラベルが、その祖先ノード上のラベルの和集合であり、ノードｌが、入来アークを有していない場合には｛ｌ｝でラベル付けされ、リテラルｌに関するそのノードへの入来エッジすべてが、ｌ∨ｋの形態の節でラベル付けされ、リテラルｌに関するそのノードからの出エッジすべてが、¬ｌ∨ｋの形態の節でラベル付けされる場合だけ、十分にラベル付けされたもの（ｗｅｌｌ−ｌａｂｅｌｅｄ）である。ｌノードに入射する、ｌ∨ｌ1∨．．．∨ｌmとラベル付けされたエッジがあるときはいつでも、やはりｌノードに入射するｍ−１個の、ｌ∨ｌ1∨．．．∨ｌmとラベル付けされた他のエッジがある。
【００５０】
それ自体からなる単集合でラベル付けされた（Ｌ，Ｋ）演繹グラフ内のノードｌ（たとえば、¬ｘ9＠｛¬ｘ9｝）は、仮定リテラルと呼ばれる。十分にラベル付けされた（Ｌ，Ｋ）演繹グラフは、あるノードに入射する入来アークがちょうど１つの節でラベル付けされている場合、一意に正当化される。十分にラベル付けされた（Ｌ，Ｋ）演繹グラフは、ノードｌもノード¬ｌも含まない場合だけ、Ｋ整合である。十分にラベル付けされた（Ｌ，Ｋ）演繹グラフは、ｌ∨ｌ1∨．．．∨ｌmの形態のＫ内のあらゆるｋについて、¬ｌ1，．．．，¬ｌmがグラフ内にあるときはいつでも、ｌが、入力入射エッジがｋでラベル付けされているグラフ内にある場合だけ、Ｋ完全（Ｋ−ｃｏｍｐｌｅｔｅ）である。非循環の、十分にラベル付けされた（Ｌ，Ｋ）演繹グラフＧは、（ノードで表して）より大きい、十分にラベル付けグラフＧ’がない場合、Ｌ完全である。
【００５１】
図４および図５は、競合処理のためにサポートグラフを使用する並列化ソルバの例を示す。図４は、例示的な制約伝播プロセスから導出された（Ｌ，Ｋ）演繹グラフ４００を示す。上記定義の応用例を例示するために、充足可能性問題および試みられる部分解の一例を考えてみる。
ω1≡（¬ｘ1∨ｘ2）
ω2≡（¬ｘ1∨ｘ3∨ｘ9）
ω3≡（¬ｘ2∨¬ｘ3∨ｘ4）
ω4≡（¬ｘ4∨ｘ5∨ｘ10）
ω5≡（¬ｘ4∨ｘ6∨ｘ11）
ω6≡（¬ｘ5∨¬ｘ6）
ω7≡（ｘ1∨ｘ7∨¬ｘ12）
ω8≡（ｘ1∨ｘ8）
ω9≡（¬ｘ7∨¬ｘ8∨¬ｘ13）
を含む初期の１組の制約Ｃ、および仮定の現在のスタックから開始する。演繹グラフ４００では、仮定が仮定ノードとしてモデル化され、それらのノードは、入力アークを有していない。したがって、グラフ４００に関する仮定は、
ｘ1＠｛ｘ1｝、
¬ｘ9＠｛¬ｘ9｝、
¬ｘ10＠｛¬ｘ10｝、および
¬ｘ11＠｛¬ｘ11｝、
を含む。グラフ４００は、４つの仮定ノード、すなわち、ｘ1に真（たとえば、ｘ1）が割り当てられている第１の仮定ノード４０２と、ｘ9に偽（たとえば、¬ｘ9）が割り当てられている第２の仮定ノード４０４と、ｘ10に偽（たとえば、¬ｘ10）が割り当てられている第３の仮定ノード４０６と、ｘ11に偽（たとえば、¬ｘ11）が割り当てられている第４の仮定ノード４０８とを含む。
【００５２】
ある時のスナップショットを見ると、グラフ４００は、仮定ノード４０２がｘ1に対する真（たとえば、ｘ1）の割当てを有し、仮定ノード４０４がｘ9に対する偽（たとえば、¬ｘ9）の割当てを有することを示す。次に、ω2でラベル付けされたエッジ、上記の制約節ω2≡（¬ｘ1∨ｘ3∨ｘ9）を考えてみる。すなわち換言すれば、これは「ｘ1ではなく、またはｘ3、またはｘ9」と読むことができる。しかしながら、制約ω2では、ｘ1は¬ｘ1として否定で現れ、これは、グラフ４００内での真としての割当てがこの論理和を偽にし、ｘ9が否定で割り当てられ、やはりｘ9論理和を偽にすることに留意されたい。しかし、制約ω2全体は真にしなければならず、制約節ω2を真にすることができる唯一の残りのやり方は、ｘ3が真になるように割り当てられたとき（たとえば、ｘ3）である。これはちょうど、ｘ1を真として割り当てることによって、グラフ４００がノード４１０で示すものである。したがって、入力ノード４０２および４０４での仮定、および関連する制約ω2に基づいて、制約ω2を充足する唯一のやり方は、ｘ3を真として割り当てることである。これは単位導出の応用例である。
【００５３】
他のノードに進むと、ノード４１２に対するエッジは、制約ω1≡（¬ｘ1∨ｘ2）を使用する。しかしながら、ノード４０２でのｘ1には真が割り当てられており、制約ω1を充足する上での唯一の残りの可能性は、ノード４１２でのｘ2を真として割り当てることである。ω3でラベル付けされたエッジを見ると、制約節ω3≡（¬ｘ2∨¬ｘ3∨ｘ4）は、ノード４１４でｘ4に真を割り当てることによって充足することができるだけである。換言すれば、４１４に対する入力ノードは４１０および４１２であり、これらは、それぞれｘ3およびｘ2に真を割り当て、ω3を充足する唯一の残りの可能なやり方は、真をｘ4に割り当てることである。
【００５４】
ω4でラベル付けされたエッジを見ると、入力ｘ10に偽が割り当てられ、入力ｘ4に真が割り当てられるため、制約節ω4≡（¬ｘ4∨ｘ5∨ｘ10）は、ノード４１６でｘ5に真を割り当てることによって充足することができるだけである。ω5でラベル付けされたエッジは、入力ｘ11に偽が割り当てられ、入力ｘ4に真が割り当てられるため、制約節ω5≡（¬ｘ4∨ｘ6∨ｘ11）を使用し、これは、ノード４１８でｘ6に真を割り当てることによって充足することができるだけである。最後に、ω6でラベル付けされたエッジは、制約節ω6≡（¬ｘ5∨¬ｘ6）を使用し、この制約は、対応するノード４１６および４１８で、ｘ5の真およびｘ6の真の、既存の割当てに基づいて失敗する。
【００５５】
制約伝播は、（Ｌ，Ｋ）演繹グラフ４００に通じ、最後のノード４２０に到達したとき、（異なる形態で書き表された）新しく導出された制約、すなわち、
ωC（κ（ω6））≡¬（ｘ1∧¬ｘ9∧¬ｘ10∧¬ｘ11）
を出力し、上式で、κ（カッパ）は「競合」を表し、制約は、何がうまくいかなかったかのレポートである。ここで、出力ωC（κ（ω6））は、同時にｘ1が真、ｘ9が偽、ｘ10が偽、ｘ11が偽であることができず、それらのうちの１つを、さらに処理するために放棄しなければならないことを示す。これは、ｘ1ではなく、またはｘ9、またはｘ10、またはｘ11と等価であり、これは正しい形態にある。図５は、図４のサポートグラフから出力された競合する制約を処理するための新しいグラフ５００を示す。上記の４つのうちの３つ（たとえば、¬ｘ9、¬ｘ10、¬ｘ11）について仮定を選択することにより、新しいグラフ５００、およびさらに別の新しく導出された制約
ωC（κ（ω9））≡¬（¬ｘ9∧¬ｘ10∧¬ｘ11∧ｘ12∧ｘ13）
が生み出される。
【００５６】
より具体的には、グラフ５００は、ノード５０２、５０４、５０６をそれぞれ¬ｘ9＠｛¬ｘ9｝、¬ｘ10＠｛¬ｘ10｝、¬ｘ11＠｛¬ｘ11｝として使用して、仮定を行う（以前の仮定のうちの１つを落とす）ことによって作成される。これらの仮定から開始し、新しく導出された制約ωC（κ（ω6））をエッジに適用することにより、制約ωC（κ（ω6））を充足するように、ノード５０８でｘ1に対する偽の割当てが生み出される。
【００５７】
ω7でラベル付けされたエッジを見ると、（ｘ12＠｛ｘ12｝が割り当てられた）別の仮定ノード５１０が導入され、制約節ω7≡（ｘ1∨ｘ7∨¬ｘ12）は、入力ｘ1に偽が割り当てられ、入力ｘ12に真が割り当てられるため、ノード５１２でｘ7に真を割り当てることによって充足することができるだけである。
【００５８】
ω8でラベル付けされたエッジを見ると、制約節ω8≡（ｘ1∨ｘ8）は、入力ｘ1に偽が割り当てられるため、ノード５１４でｘ8に真を割り当てることによって充足することができるだけである。次に、ω9でラベル付けされたエッジを考えると、制約節ω9≡（¬ｘ7∨¬ｘ8∨¬ｘ13）は、現在の入力（ノード５１２、ノード５１４、および仮定ノード５１６）を使用して充足することができない。したがって、ノード５１８で出力される、新しく導出された制約ωC（κ（ω9））≡¬（¬ｘ9∧¬ｘ10∧¬ｘ11∧ｘ12∧ｘ13）は、演繹グラフ５００で何がうまくいかなかったかのレポートである。制約導出プロセスは、競合状態が存在しなくなるまで続行する。
【００５９】
より一般的な形で述べると、一度各並列ソルバスレッドのソルバ状態についてサポートグラフが得られると、併合を開始することができる。この説明は対ごとの併合を重点的に扱うが、併合は、２つより多いグラフを使用して行うことができることも意図の範囲内である。状態併合は、Ｌｏｃｋ−ｆｒｅｅである。換言すれば、並列処理を行う１つの従来のやり方は、スレッド処理を含む。たとえば、複数の並列スレッドがデータを処理中である場合、最終的には、スレッドの結果同士を併合することが望ましい。これを行う１つのやり方は、第１のスレッドがそのプロセスを完了するまで、その第１のスレッドが、単に他のスレッドを何らかの共用データ構造から締め出すことによるものである。したがって、すでに書き込まれているものと整合する結果を書き込むことが、他の締め出されたスレッドの義務となる。この従来のアーキテクチャは、少なくとも非効率である。開示されているアーキテクチャは、そのような明示的なロック機構を回避する。
【００６０】
上述のように、アルゴリズムは、並列で１ステップ先に処理を実行し、次いで結果が組み合わされる。換言すれば、結果全体に到達するために、各エージェントは、１ステップ先に処理し、別々の暫定結果が組み合わされ、これが、回答全体に到達するまで続行される。さらに、競合処理が解決され、併合プロセスにはサイクルがない。
【００６１】
従前のように、競合解除（ｄｅｃｏｎｆｌｉｃｔ）処理では、１つまたは複数の仮定が、グラフの一方または他方で放棄されてもよい。さらに、どの仮定を放棄するかについて、非常に経済的であることが望ましい。開示されているアーキテクチャによって使用される情報の集合（たとえば、仮定、推論値（ｄｅｄｕｃｔｉｏｎｓ）、グラフ、．．．）のすべてを定義することにより、（本明細書でｒｅｄｕｘとも呼ばれる）縮小アルゴリズムは、併合される２つのグラフ間で可能な限り放棄を少なくするようにして選択をする。単一のグラフの場合には、これらの競合を識別するポイントは、いくつかの以前の仮定にわたって後退しなければならないのではなく、放棄しようとする場合、可能な限り因果関係が小さい仮定を識別することであり、これはそのセットのサポートグラフについてのポイントであることを想起されたい。
【００６２】
次に、同じ技法を１対のグラフに適用すると、グラフは、仮定が放棄される場合、可能な限り影響または損失が少ないように、サイクルがない形で併合される。これは、「欲張り」法またはアルゴリズムを使用することによって対処することができる。換言すれば、この方法は、特定の時点で最良と思われる選択をすることによって、放棄されつつあるものを最小限に抑える、コストの少ないやり方を見出す。はるかに多くの解析を使用する、より集約的なアルゴリズムを使用することができるが、１つの実装では、欲張り法で十分である。
【００６３】
図６は、２つのサポートグラフを作成および併合する方法を示す。６００では、２つのサポートグラフが、処理するために受け取られる。６０２では、欲張り法を使用してサイクルを低減する、またはなくするために、同じリテラルに対応するノードを併合するようにグラフが切り詰められる（または縮小される）。６０４では、サポートグラフ同士を併合して併合済みグラフにする。６０６では、必要な場合、制約を伝播することによって、完全性のために併合済みグラフを処理する。６０８では、必要な場合、競合に関して併合済みグラフを処理する。６１０では、競合のないソルバ状態を表す、最終的な併合済みグラフが出力される。
【００６４】
どのように２つの（Ｌ，Ｋ）演繹グラフを併合することができるかについてのより詳細な説明のための準備として、以下の定義を提示する。Ｇ、Ｇ’が非循環の、Ｌ完全な（Ｌ，Ｋ）演繹グラフである場合には、
ＣG,G'は、グラフＧおよびＧ’に共通の仮定の集合である。
ＡGは、Ｇの仮定の集合である。
ＤGは、Ｇの推論値の集合である。
ＡG,G'は、Ｇ’の推論値であるＧの仮定の集合である。
ＢG,G'は、Ｇ’に述べられていないＧの仮定の集合である。
ＡG＝ＣG,G'∪ＡG,G'∪ＢG,G'
ＡG'＝ＣG,G'∪ＡG',G∪ＢG',G
【００６５】
【数１】
0004707760.tif 000002
【００６６】
Ｇ内のある仮定の従属要素（ｄｅｐｅｎｄｅｎｔｓ）を生成する関数である。
【００６７】
【数２】
0004707760.tif 000003
【００６８】
Ｇ内のある推論値の祖先を生成する関数である。
【００６９】
図７は、対ごとの併合プロセスのために２つの入力サポートグラフを切り詰める方法を示す。７００では、この特定の実装においては、このプロセスがｒｅｄｕｘと呼ばれる関数に従って開始される。関数ｒｅｄｕｘ（Ｇ，Ｇ’）は、以下のように定義される１対のグラフ（Ｇ1，Ｇ2）を生成する。７０２では、第１の定義がもたらされる。すなわち、ｌ∈ＡG,G'を、｜ｆG'（ｌ）｜（従属要素の集合のサイズ）が少なくともＡG,G'内の任意の他の仮定ノードの選択されたもの（ｃｈｏｉｃｅ）と同程度の大きいものとなるようなノードとする。７０４では、第２の定義がもたらされる。すなわち、ｌ’∈ＡG',Gを、｜ｆG'（ｌ’）｜が少なくともＡG',G内の任意の他の仮定ノードの選択されたものと同程度の大きいものとなるようなノードとする。７０６では、｜ｆG'（ｌ）｜が｜ｆG'（ｌ’）｜より小さい場合、ＧおよびＧ’の役割が逆にされる。７０８では、ｌ’’∈ｈG'（ｌ）が、｜ｆG'（ｌ’’）｜がｌ’の任意の他の選択されたものと同程度の小さいものとなるように選択される。７１０では、ｌ2が｜ｆG'（ｌ’’）｜内にあるように、Ｇ’’を、ｌ’’および任意のノードｌ2を欠くＧ’のサブグラフになるように定義する。７１２では、
【００７０】
【数３】
0004707760.tif 000004
【００７１】
の場合には、ｒｅｄｕｘを終了し、対（Ｇ，Ｇ’’）を返す。７１４では、
【００７２】
【数４】
0004707760.tif 000005
【００７３】
の場合には、ｒｅｄｕｘ（Ｇ，Ｇ’’）を呼び出す。
【００７４】
最終的には、ｒｅｄｕｘは、同じリテラルに対応するノード同士をサイクルのおそれなしに併合することができるように、２つのグラフを切り詰める。下記で示すように、ｒｅｄｕｘは、導出されたもの（非仮定リテラル）の放棄を可能な限り少なくしようと試みる意味で「欲張り」な形で切り詰める。最終的に可能な限り多くの並列前進が達成されるようにして切り詰めることが望ましい。しかし、サイクルのおそれなしに併合するためにグラフを切り詰める他のアルゴリズムを使用することができることを理解されたい。
【００７５】
併合済みグラフ−やはりＧと呼ぶ−は、もはやＬ完全ではなく、これは、Ｌ完全にするために制約を伝播することによって修正することができることに留意されたい。また、併合済みグラフが、競合するリテラルｌおよび¬ｌを含む可能性もあり、その場合には、このグラフについてｄｅｃｏｎｆｌｉｃｔ（Ｇ）が計算され、それにより競合のないグラフが生成される。図８は、併合済みグラフの競合を処理する方法を示す。８００では、この特定の実装においては、競合の除去は、ｄｅｃｏｎｆｌｉｃｔと呼ばれる関数に従って開始される。８０２では、ｌ’∈ｈG（ｌ）を、｜ｆG'（ｌ’）｜が任意の他の、そのような選択されたものと同程度の小さいものとなるように選択する。８０４では、ｌ’’∈ｈG（¬ｌ）を、｜ｆG'（ｌ’’）｜が任意の他の、そのような選択されたものと同程度の小さいものとなるように選択する。８０６では、｜ｆG'（ｌ’）｜≦｜ｆG'（ｌ’’）｜である場合、削除すべき仮定として、その従属要素のすべてと共に、ｌ（そうでない場合はｌ’）を選択する。８０８では、すべての競合するノードがなくされるまで、このプロセスが繰り返される。
【００７６】
ｒｅｄｕｘ関数およびｄｅｃｏｎｆｌｉｃｔ関数は、ｍｅｒｇｅ関数を置くことによってＳＡＴソルバ内で使用することができ、ｍｅｒｇｅ関数は、まずｒｅｄｕｘを１対のグラフに適用し、次いで結果にｄｅｃｏｎｆｌｉｃｔを適用する。図９は、順序ＳＡＴソルバのために、サポートグラフを切り詰め、かつ併合して最終的な、併合された競合のないグラフにする方法を示す。９００では、（たとえば、ｒｅｄｕｘを使用する）グラフ切り詰め、および（たとえば、ｄｅｃｏｎｆｌｉｃｔを使用する）競合処理が、順序ＳＡＴソルバ内で開始される。９０２では、順序ＳＡＴソルバの内部ループが、１つの新しいリテラルを、Ｌ完全、Ｋ整合の演繹グラフに加える。９０４では、サポートグラフが、ノードを併合しサイクルのない処理を生成するように、切り詰められる。９０６では、併合済みグラフをＬ完全にするように、制約が伝播される。９０８では、（たとえば、関数ｄｅｃｏｎｆｌｉｃｔを使用して）競合のない併合済みグラフが、任意選択で１つの学習済み制約を加えることによって、もたらされる。９１０では、必要に応じて、ソルバ状態の、併合された競合のないグラフを出力するように、プロセスが繰り返される。
【００７７】
図１０は、並列ＳＡＴソルバのために、サポートグラフを切り詰め、かつ併合して最終的な、併合された競合のないグラフにする方法を示す。１０００では、（たとえば、ｒｅｄｕｘを使用する）グラフ切り詰め、および（たとえば、ｄｅｃｏｎｆｌｉｃｔを使用する）競合処理が、並列ＳＡＴソルバ内で開始される。１００２では、並列ＳＡＴソルバの内部ループが、ｎ個の新しい、異なるリテラルを、Ｌ完全、Ｋ整合のサポートグラフの、ｎ個のコピーのそれぞれに加える。１００４では、ｎ個のグラフが、ノードを併合しサイクルのない処理を生成するように、切り詰められる。１００６では、併合済みグラフをＬ完全にするように、制約が各演繹グラフ内で伝播される。１００８では、（たとえば、関数ｄｅｃｏｎｆｌｉｃｔを使用して）競合のない併合済みグラフが、任意選択で学習済み制約を加えることによって、出力される。
【００７８】
図１１は、本技術革新のソルバ状態処理をマルチコア処理システム１１０２に適用するシステム１１００の図を示す。マルチコア処理システム１１０２は、共用メモリ並列処理システムであり、共に同じダイ上で作製される（コア1で示される）第１の処理コア１１０４、および（コア2で示される）第２の処理コア１１０６によってうまく機能させることができる。また、処理システム１１０２は、処理されつつある計算スレッドの共用バッファリングのためにオンボードメモリ１１０８を含むことができる。メモリ１１０８は、同じダイ上で示されているが、ダイの外部に位置することができ、同じ目的を果たす。
【００７９】
コア（１１０４および１１０６）のそれぞれによる共用スレッド処理をサポートして、１対のソルバが設けられる。たとえば、共にたとえばＣＳＰソルバとすることができる（ソルバ1で示される）第１のソルバ１１１０、および（ソルバ2で示される）第２のソルバ１１１２が、プロセッサシステム１１０２の複数のコア（１１０４および１１０６）の間でのスレッド実行中に制約処理を実行するように設けられる。
【００８０】
状態システム１１１４が、開示されている技術革新による対ごとのサポートグラフ処理のために設けられる。状態システム１１１４は、関連する並列化ソルバ（１１１０および１１１２）から、サポートグラフの形態で受け取られる（ソルバ1状態およびソルバ2状態として示される）ソルバ状態を対ごとに処理する。状態システム１１１４は、サポートグラフ縮小（または切り詰め）、サポートグラフ併合、競合処理、および可変の割当てを行うために、上述の、ブックキーピングコンポーネント１０２と、マージコンポーネント１０６と、伝播コンポーネント３１２と、推理コンポーネント３１４とを含むことができる。
【００８１】
状態システム１１１４は、完全にソフトウェアで、完全にハードウェアで（たとえば、ＡＳＩＣ−特定用途向け修正回路デバイス、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）として）、またはハードウェアとソフトウェアの組合せとして実装することができることを理解されたい。別法として、状態システム１１１４のコンポーネント（１０２、１０６、３１２、３１４）は、ハードウェアおよび／またはソフトウェアの組合せとして別々に実装することができる。
【００８２】
図１２は、本技術革新によるソルバ状態処理をマルチコア・マルチプロセッサシステムに適用するシステム１２００の図を示す。マルチコア・マルチプロセッサシステム１２００は、第１のマルチコアプロセッサシステム１２０２と、第２のマルチコアプロセッサシステム１２０４とを含み、それぞれが共用メモリ並列処理システムである。第１のプロセッサシステム１２０２は、（コア1で示される）第１の処理コア１２０６と、（コア2で示される）第２の処理コア１２０８とを含み、共に同じダイ上で作製され、処理されつつある計算スレッドの共用バッファリングのために共用メモリ１２０８を共用する。
【００８３】
第２のマルチコアプロセッサシステム１２０４は、（コア1で示される）第１の処理コア１２１２と、（コア2で示される）第２の処理コア１２１４とを含み、共に同じダイ上で作製され、処理されつつある計算スレッドの共用バッファリングのために共用メモリ１２１６を共用する。
【００８４】
コア（１２０６および１２０８）のそれぞれによる共用スレッド処理をサポートして、ソルバの、対応するセットが設けられる。たとえば、共にたとえばＣＳＰソルバとすることができる（ソルバ1で示される）第１のソルバ１２１８、および（ソルバ2で示される）第２のソルバ１２２０が、プロセッサシステム１２０２の複数のコア（１２０６および１２０８）の間でのスレッド実行中に制約処理を実行するように設けられる。同様に、コア（１２１２および１２１４）のそれぞれによる共用スレッド処理をサポートして、ソルバの、対応するセットが設けられる。たとえば、共にたとえばＣＳＰソルバとすることができる（ソルバ3で示される）第３のソルバ１２２２、および（ソルバ4で示される）第４のソルバ１２２４が、プロセッサシステム１２０４の複数のコア（１２１２および１２１４）の間でのスレッド実行中に制約処理を実行するように設けられる。
【００８５】
ソルバ（１２１８、１２２０、１２２２、１２２４）のそれぞれは、ソルバ状態を状態処理システム１２２６に渡す。たとえば、（Ｓ1状態およびＳ2状態で示される）ソルバ状態は、第１のプロセッサシステム１２０２から状態システム１２２６に転送され、（Ｓ3状態およびＳ4状態で示される）ソルバ状態は、第２のプロセッサシステム１２０４から状態システム１２２６に転送される。
【００８６】
状態システム１２２６は、開示されている技術革新による対ごとのサポートグラフ処理のために設けられる。状態システム１２２６は、並列化ソルバ（１２１８、１２２０、１２２２、１２２４）から、サポートグラフの形態で受け取られるソルバ状態を対ごとに処理する。たとえば、そのようなマルチコア・マルチプロセッサシステムでは、スレッド計算処理は、コア（１２０６、１２０８、１２１２、１２１４）の任意の組合せにわたって行われる。たとえば、処理は、コア１２０８、コア１２１２、コア１２１４を使用して行われることができる。したがって、これらの３つのコアからの状態が、開示されているアルゴリズムによる対ごとの処理のために状態システム１２２６に渡されるはずである。それをサポートして、状態システム１２２６は、状態処理にかけられるスレッドに基づいてソルバ（１２１８、１２２０、１２２２、１２２４）のそれぞれから関連する状態を選択するために、選択コンポーネント１２２８を含むことができる。換言すれば、無関係な状態は、サポートグラフ処理のために選択されないことになる。しかしながら、状態処理は今、１つの状態システムが各プロセッサシステム（１２０２または１２０４）に対して専用となるように追加の状態システム（図示せず）を含めることによって、並列でも実行することができることを理解されたい。
【００８７】
従前のように、状態システム１２２６はさらに、サポートグラフ縮小（または切り詰め）、サポートグラフ併合、競合処理、および可変の割当てを行うために、上述の、ブックキーピングコンポーネント１０２と、マージコンポーネント１０６と、伝播コンポーネント３１２と、推理コンポーネント３１４とを含むことができる。
【００８８】
さらに、状態システム１２２６は、完全にソフトウェアで、完全にハードウェアで（たとえば、ＡＳＩＣ、ＦＰＧＡ）、またはハードウェアとソフトウェアの組合せとして実装することができることを理解されたい。
【００８９】
また、状態システム（図１１の１１１４、および／または１２２６）は、ソルバ状態の処理のためにコンピューティングシステムにインストールするために、独立のソフトウェアおよび／またはハードウェアのプラグ可能なモジュールとして実装されることもできる。たとえば、高速インターフェースおよびメモリ（たとえば、不揮発性またはフラッシュ）を備えるカードを、プロセッササブシステムに対する好適なインターフェースとして、またソルバ状態処理のために使用することができる。別法として、またはそれと組み合わせて、開示されている技術革新によるソルバ状態を処理するソフトウェアモジュールをインストールすることができる。
【００９０】
図１３は、本技術革新によるソルバ状態処理を、別々のコンピューティングシステムにわたるソルバ状態処理に適用するシステム１３００の図を示す。ここで、第１のコンピューティングシステム１３０２は、プログラムおよびデータ処理を実行するために、システムプロセッサ１３０４（および単一コア１３０６）を有するシングルプロセッサシステムである。第２のコンピューティングシステム１３０８は、プログラムおよびデータ処理を実行するために、マルチプロセッササブシステム１３１０（および２つのプロセッサ１３１２および１３１４）を有するマルチプロセッサシステムである。これらのシステム（１３０２および１３０８）は、ネットワーク１３１６（または好適な高速インターフェース）上に通信して配置され、さらに、ソルバ状態処理のために、図１２の状態システム１２２６と通信する。スレッドが両システム（１３０２および１３０８）にわたって処理される場合、ソルバ状態は、図１２における上述の説明と同様に、両システムから処理することができる。
【００９１】
図１４は、大きな探索空間内での問題ソルバとして適用するための、真理性維持システム１４０２および（学習および推理を使用する）推論エンジン１４０４を使用するＣＳＰソルバシステム１４００の図を示す。エンジン１４０４は、代替を探り、選択をし、正しくなるようにその選択を解析する。競合が発生したとき、真理性維持システムは、その競合をなくするのを容易にし、それに応じて、今後の使用のためにその知識ベースを更新する。
【００９２】
本明細書では、「コンポーネント」および「システム」という用語は、コンピュータ関連のエンティティ、ハードウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行時のソフトウェアを指すものとする。たとえば、コンポーネントは、それだけには限らないが、プロセッサ上で動作するプロセス、プロセッサ、ハードディスクドライブ、（光記憶媒体および／または磁気記憶媒体の）複数の記憶デバイス、オブジェクト、実行可能物、実行のスレッド、プログラム、および／またはコンピュータとすることができる。例として、サーバ上で動作するアプリケーションもそのサーバも、コンポーネントとすることができる。１つまたは複数のコンポーネントがプロセスおよび／または実行のスレッド内にある可能性があり、コンポーネントは、１つのコンピュータ上で局所化され、かつ／または２つ以上のコンピュータ間で分散される可能性がある。
【００９３】
次に図１５を参照すると、開示されている並列化ソルバ状態アーキテクチャを使用するように動作可能なコンピューティングシステム１５００のブロック図が示されている。その様々な態様に関する追加的な状況を提供するために、図１５および以下の考察は、本技術革新の様々な態様を実装することができる好適なコンピューティングシステム１５００を簡単に、一般的に説明することが意図されている。上記の説明は、１つまたは複数のコンピュータ上で動作することができるコンピュータ実行可能命令の一般的な状況にあるが、本技術革新は、他のプログラムモジュールと組み合わせて、かつ／またはハードウェアとソフトウェアの組合せとして実装することもできることを、当業者なら理解するであろう。
【００９４】
一般に、プログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造などを含む。さらに、本発明の方法は、シングルプロセッサまたはマルチプロセッサコンピュータシステム、ミニコンピュータ、メインフレームコンピュータ、ならびにパーソナルコンピュータ、ハンドヘルドコンピューティングデバイス、マイクロプロセッサをベースとする、またはプログラム可能な家電などを含めて、それぞれ１つまたは複数の関連するデバイスに動作可能に結合することができる他のコンピュータシステム構成で実施することができることを、当業者なら理解するであろう。
【００９５】
また、図の、本技術革新の諸態様は、いくつかのタスクが、通信ネットワークを介してリンクされる遠隔処理デバイスによって実行される分散コンピューティング環境内で実施することができる。分散コンピューティング環境では、プログラムモジュールは、ローカルと遠隔双方のメモリ記憶デバイス内に位置することができる。
【００９６】
コンピュータは、一般に、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータによってアクセスすることができる任意の使用可能な媒体とすることができ、揮発性媒体と不揮発性媒体、取外し式媒体と非取外し式媒体を含む。限定ではなく例として、コンピュータ可読媒体は、コンピュータ記憶媒体と通信媒体を備えることができる。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなど、情報を記憶するための任意の方法または技術で実施される揮発性媒体と不揮発性媒体、取外し式媒体と非取外し式媒体を含む。コンピュータ記憶媒体は、それだけには限らないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、もしくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタルビデオディスク（ＤＶＤ）、もしくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、もしくは他の磁気記憶デバイス、または、所望の情報を記憶するために使用することができ、コンピュータによってアクセスすることができる任意の他の媒体を含む。
【００９７】
図１５を再度参照すると、様々な態様を実施するための例示的なコンピューティングシステム１５００は、処理ユニット１５０４を含むコンピュータ１５０２と、システムメモリ１５０６と、システムバス１５０８とを含む。システムバス１５０８は、それだけには限らないがシステムメモリ１５０６を含むシステムコンポーネント用の、処理ユニット１５０４に対するインターフェースを実現する。処理ユニット１５０４は、様々な市販のプロセッサのいずれかとすることができる。デュアルマイクロプロセッサおよび他のマルチプロセッサアーキテクチャを、処理ユニット１５０４として使用することもできる。
【００９８】
システムバス１５０８は、様々な市販のバスアーキテクチャを使用して、（メモリコントローラを用いる、または用いない）メモリバス、周辺機器バス、およびローカルバスに、さらに相互接続することができる、いくつかのタイプのバス構造のいずれかとすることができる。システムメモリ１５０６は、読出し専用メモリ（ＲＯＭ）１５１０と、ランダムアクセスメモリ（ＲＡＭ）１５１２とを含む。基本入出力システム（ＢＩＯＳ）は、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭなど不揮発性メモリ１５１０内に記憶され、このＢＩＯＳは、起動中などにコンピュータ１５０２内の要素間で情報を転送するのを助ける基本ルーチンを含む。ＲＡＭ１５１２は、データをキャッシュするために、スタティックＲＡＭなど高速ＲＡＭを含むこともできる。
【００９９】
コンピュータ１５０２は、好適なシャーシ（図示せず）内で外部使用するように構成することもできる内蔵ハードディスクドライブ（ＨＤＤ）１５１４（たとえば、ＥＩＤＥ、ＳＡＴＡ）と、（たとえば、取外し式フロッピー（登録商標）ディスク１５１８との間で読出しまたは書込みするための）磁気フロッピー（登録商標）ディスクドライブ（ＦＤＤ）１５１６と、（たとえば、ＣＤ−ＲＯＭディスク１５２２を読み出す、またはＤＶＤなど他の高容量光媒体との間で読出しもしくは書込みするための）光ディスクドライブ１５２０とをさらに含む。ハードディスクドライブ１５１４、磁気ディスクドライブ１５１６、および光ディスクドライブ１５２０は、それぞれハードディスクドライブインターフェース１５２４、磁気ディスクドライブインターフェース１５２６、および光ドライブインターフェース１５２８によってシステムバスに接続することができる。外部ドライブ実装用のインターフェース１５２４は、ユニバーサルシリアルバス（ＵＳＢ）およびＩＥＥＥ１３９４インターフェース技術の少なくとも一方、または両方を含む。他の外部ドライブ接続技術も本技術革新の意図内にある。
【０１００】
ドライブ、およびそれらの関連するコンピュータ可読媒体は、データ、データ構造、コンピュータ実行可能命令などの不揮発性記憶を実現する。コンピュータ１５０２の場合、ドライブおよび媒体は、任意のデータの、好適なデジタルフォーマットでの記憶に対処する。上記のコンピュータ可読媒体についての説明は、ＨＤＤ、取外し式磁気フロッピー（登録商標）ディスク、およびＣＤまたはＤＶＤなど取外し式光媒体を参照しているが、ｚｉｐドライブ、磁気カセット、フラッシュメモリカード、カートリッジなど、コンピュータによって読出し可能な他のタイプの媒体もまた、例示的な動作環境内で使用することができること、さらに任意のそのような媒体が、開示されている技術革新の方法を実行するためのコンピュータ実行可能命令を含むことができることを、当業者なら理解すべきである。
【０１０１】
オペレーティングシステム１５３０、１つまたは複数のアプリケーションプログラム１５３２（たとえば、上述のＬｏｃｋ−ｆｒｅｅ  ＣＳＰソルバ処理システム）、他のプログラムモジュール１５３４、およびプログラムデータ１５３６を含めて、いくつかのプログラムモジュールを、ドライブおよびＲＡＭ１５１２内に記憶することができる。また、オペレーティングシステム、アプリケーション、モジュール、および／またはデータのすべて、または一部分は、ＲＡＭ１５１２内でキャッシュすることができる。本技術革新は、様々な市販のオペレーティングシステム、またはオペレーティングシステムの組合せを用いて実施することができることを理解されたい。
【０１０２】
ユーザは、１つまたは複数の有線／無線入力デバイス、たとえばキーボード１５３８、およびマウス１５４０などポインティングデバイスを介して、コンピュータ１５０２にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ＩＲリモートコントロール、ジョイスティック、ゲームパッド、スタイラスペン、タッチセンサ画面などが含まれてもよい。これらの、また他の入力デバイスは、しばしば、システムバス１５０８に結合される入力デバイスインターフェース１５４２を介して処理ユニット１５０４に接続されるが、パラレルポート、ＩＥＥＥ１３９４シリアルポート、ゲームポート、ＵＳＢポート、ＩＲインターフェースなど、他のインターフェースによって接続することもできる。
【０１０３】
モニタ１５４４、または他のタイプのディスプレイデバイスもまた、ビデオアダプタ１５４６など、インターフェースを介してシステムバス１５０８に接続される。モニタ１５４４に加えて、コンピュータは一般に、スピーカ、プリンタなど、他の周辺出力デバイス（図示せず）を含む。
【０１０４】
コンピュータ１５０２は、遠隔コンピュータ１５４８など、１つまたは複数の遠隔コンピュータに対する、有線および／または無線通信を介した論理接続を使用してネットワーク環境内で動作することができる。遠隔コンピュータ１５４８は、ワークステーション、サーバコンピュータ、ルータ、パーソナルコンピュータ、ポータブルコンピュータ、マイクロプロセッサをベースとするエンターテイメント機器、ピアデバイスまたは他の共通ネットワークノードとすることができ、簡単にするために、メモリ／記憶デバイス１５５０だけが示されているが、一般に、コンピュータ１５０２に関して述べた要素の多数または全部を含む。図の論理接続は、ローカルエリアネットワーク（ＬＡＮ）１５５２、および／またはより大きなネットワーク、たとえば広域ネットワーク（ＷＡＮ）１５５４に対する有線／無線接続を含む。そのようなＬＡＮおよびＷＡＮネットワーキング環境は、事務所や会社で普通であり、イントラネットなど、それらのすべてがグローバル通信ネットワーク、たとえばインターネットに接続することができる全社コンピュータネットワークを容易にする。
【０１０５】
コンピュータ１５０２は、ＬＡＮネットワーキング環境内で使用されるとき、有線および／または無線通信ネットワークインターフェースまたはアダプタ１５５６を介してローカルネットワーク１５５２に接続される。アダプタ１５５６は、ＬＡＮ１５５２との有線または無線通信を容易にすることができ、ＬＡＮ１５５２もまた、無線アダプタ１５５６と通信するために、ＬＡＮ１５５２上に配置された無線アクセスポイントを含むことができる。
【０１０６】
コンピュータ１５０２は、ＷＡＮネットワーキング環境内で使用されるとき、モデム１５５８を含むことができ、またはＷＡＮ１５５４上の通信サーバに接続され、または、インターネットによるなど、ＷＡＮ１５５４の上で通信を確立するための他の手段を有する。モデム１５５８は、内部にあっても外部にあってもよく、また有線デバイスでも無線デバイスでもよく、シリアルポートインターフェース１５４２を介してシステムバス１５０８に接続される。ネットワーク環境では、コンピュータ１５０２に関して示されているプログラムモジュール、またはその一部分を、遠隔メモリ／記憶デバイス１５５０に記憶することができる。図のネットワーク接続は例示的なものであり、コンピュータ間で通信リンクを確立する他の手段を使用することができることが理解されるであろう。
【０１０７】
コンピュータ１５０２は、無線通信で動作可能に配置された任意の無線デバイスまたはエンティティ、たとえば、プリンタ、スキャナ、デスクトップおよび／またはポータブルコンピュータ、ポータブルデータアシスタント、通信衛星、無線で検出可能なタグに関連付けられた任意の機器またはロケーション（たとえば、キオスク、新聞雑誌販売所、休憩室）、ならびに電話と通信するように動作可能である。これは、少なくともＷｉＦｉおよびＢｌｕｅｔｏｏｔｈ（商標）無線技術を含む。したがって、通信は、従来のネットワークの場合のように予め定義された構造とすることも、単に少なくとも２つのデバイス間のアドホック通信とすることもできる。
【０１０８】
次に図１６を参照すると、開示されている技術革新による並列化ソルバ処理を利用することができる例示的なコンピューティング環境１６００の概略的なブロック図が示されている。システム１６００は、１つまたは複数のクライアント１６０２を含む。クライアント１６０２は、ハードウェアおよび／またはソフトウェア（たとえば、スレッド、プロセス、コンピューティングデバイス）とすることができる。クライアント１６０２は、たとえば、本技術革新を使用することによってクッキーおよび／または関連の文脈情報を収容することができる。
【０１０９】
システム１６００はまた、１つまたは複数のサーバ１６０４を含む。サーバ１６０４もまた、ハードウェアおよび／またはソフトウェア（たとえば、スレッド、プロセス、コンピューティングデバイス）とすることができる。サーバ１６０４は、たとえば、本アーキテクチャを使用することによって変換を実行するためのスレッドを収容することができる。クライアント１６０２とサーバ１６０４の間の１つの可能な通信は、並列化ソルバ状態処理をサポートする２つ以上のコンピュータプロセス間で伝送されるように適合されたデータパケットの形態にあるものとすることができる。データパケットは、たとえば、クッキーおよび／または関連の文脈情報を含むことができる。システム１６００は、クライアント１６０２とサーバ１６０４の間の通信を容易にするために使用することができる通信フレームワーク１６０６（たとえば、インターネットなどグローバル通信ネットワーク）を含む。
【０１１０】
通信は、（光ファイバを含む）有線および／または無線技術を介してうまく機能させることができる。クライアント１６０２は、クライアント１６０２にとってローカルな情報（たとえば、クッキーおよび／または関連の文脈情報）を記憶するために使用することができる１つまたは複数のクライアントデータストア１６０８に動作可能に接続される。同様に、サーバ１６０４は、サーバ１６０４にとってローカルな情報を記憶するために使用することができる１つまたは複数のサーバデータストア１６１０に動作可能に接続される。
【０１１１】
上述したものには、開示されている技術革新の諸例が含まれる。当然ながら、コンポーネントおよび／または方法の考えられるあらゆる組合せについて述べることは可能ではなく、多数の他の組合せおよび並べ替えが可能であることを、当業者なら理解することができる。したがって、本技術革新は、添付の特許請求の範囲の精神および範囲内に入るそのような変更、修正、および変形形態をすべて包含するものとする。さらに「ｉｎｃｌｕｄｅｓ（含む）」という用語が詳細な説明または特許請求の範囲で使用されている限り、そのような用語は、「ｃｏｍｐｒｉｓｉｎｇ（含む、備える）」が特許請求の範囲内で転換句として使用されたとき解釈されるように「ｃｏｍｐｒｉｓｉｎｇ」という用語と同様に包括的であるものとする。
【図１】
0004707760.tif 000006
【図２】
0004707760.tif 000007
【図３】
0004707760.tif 000008
【図４】
0004707760.tif 000009
【図５】
0004707760.tif 000010
【図６】
0004707760.tif 000011
【図７】
0004707760.tif 000012
【図８】
0004707760.tif 000013
【図９】
0004707760.tif 000014
【図１０】
0004707760.tif 000015
【図１１】
0004707760.tif 000016
【図１２】
0004707760.tif 000017
【図１３】
0004707760.tif 000018
【図１４】
0004707760.tif 000019
【図１５】
0004707760.tif 000020
【図１６】
0004707760.tif 000021