(58)【調査した分野】(Int.Cl.,DB名)
前記式プロセッサ(18)内で前記入力WFF(100)を受け取る前に、古典的プロセッサ(14)内で、1つまたは複数の古典的アルゴリズムを使用して前記入力WFF(100)を処理することによって所定のタイムアウト期間内に結果のWFF(104)を処理するステップと、
前記結果のWFF(104)またはそれがないことを前記式プロセッサ(18)に通信するステップと、
前記結果のWFF(104)がない場合に前記式プロセッサ(18)内で前記入力WFF(100)を受け取るステップと、をさらに含み、
前記古典的アルゴリズムは前記入力WFF(100)の前記連言標準形または前記選言標準形を判定するためのアルゴリズムである、請求項1から6のいずれか一項に記載の方法。
前記入力WFF(100)を受け取るように構成され、1つ以上の古典的アルゴリズムを用いて所定のタイムアウト期間内に結果のWFF(104)を判定するように構成された古典的プロセッサ(14)をさらに含み、
前記古典的プロセッサ(14)は、前記結果のWFFおよびその欠如を式プロセッサ(18)に伝えるように構成され、
前記式プロセッサ(18)は、前記古典的プロセッサから結果のWFF(104)を受け取らなかったときに、前記入力WFF(100)を受け取るように構成されており、
前記古典的アルゴリズムは前記入力WFF(100)の前記連言標準形または前記選言標準形を判定するためのアルゴリズムである、請求項8から13に記載のシステム。
【発明を実施するための形態】
【0017】
図示が本開示のさまざまな実施形態を示すためのものである図面を参照すると、
図1に示されているのは、制約管理システム12(
図23)内で設計制約式計算をサポートするためなど、複雑な命題論理式または複雑な完全論理式(WFF)100を単純化する方法300の図である。本開示では、入力WFF 100は、否定演算子130、連言演算子132、および選言演算子134(
図2A〜2B)を用いてブール変数すなわちブール述語124(
図11)および等価述語126(
図11)を組み合わせる。システム(
図23)および方法300は、入力WFF 100を、ステップ308(
図1)で、入力WFF 100の初期ビット配列200(
図1)表現に変換する。ステップ310(
図1)では、初期ビット配列200を、単純化されたビット配列212に変換して、入力WFF 100を表すために必要ではない述語114(
図11)を除去する。ステップ312では、単純化されたビット配列212を、選言標準形(DNF)140(
図6)および/または連言標準形(CNF)142(
図6)を含む最小限の標準形の戻りWFF 138(
図6)に変換する。戻りWFF 138を、ステップ314で式プロセッサ18(
図23)によって返すことができる。
【0018】
データ依存制約管理システム12(
図23)内などでシステム10(
図23)および方法300(
図1)を実施することの技術的影響は、完全論理式の和集合演算、共通部分演算、および差分演算の結果を単純化するのに必要な時間の長さの大幅な短縮である。さらに、データ依存制約管理システムでの方法の実施は、モデルローディングおよびトレード実行に必要な時間の長さを大幅に短縮することができる。たとえば、本発明人は、高度な超音速飛翔体設計の特定のトレード研究を計算するのに必要な時間の長さが数時間から数分に減らされた、本開示で説明される方法の実施形態を観察した。処理時間の短縮は、設計者がより大きくより複雑な設計空間を統合された形で探索することを可能にするという技術的影響を提供する。上で示したように、入力WFFの単純化は、トレード研究中にデータ依存制約ネットワークのノードをトラバースする時の分岐を減らすことができる。分岐を減らすことおよび複雑なWFFの単純化に必要な時間の長さを減らすことによって、このシステムおよび方法は、それぞれが性能および/またはコストを評価するための異なる分析モデルを含む可能性がある広い範囲の代替システム構成を設計者がすばやくトレードオフすることを可能にするという技術的影響を提供する。
【0019】
制約ネットワーク内の任意の個々の方程式または変数ノードに関連するWFFが単純である場合があるが、そのようなWFFが、所与のトレード研究またはネットワーク内の仮定される独立変数の所与の集合に関する計算パスに沿って、和集合演算および共通部分演算を使用して組み合わされることに留意されたい。たとえば、WFF1aを有するNode1aおよびWFF1bを有するNode1bによって表される変数が、計算パス内のWFF2を有するNode2によって表される関係の相補的先行値である場合には、Node2を、選言標準形Or(And(WFF1a,WFF2),And(WFF1b,WFF2))またはより単純に連言標準形And(Or(WFF1a,WFF1b),WFF2)によって表される世界の集合内で実行することができる。計算パスは、数百個から数千個のステップを含む場合があり、複雑さの組合せ増加が発生する可能性がある。
【0020】
データ依存制約管理システム12の文脈で説明されるが、本明細書で開示されるシステムおよび方法を、単純なWFFの長々しい組合せの操作を必要とするアプリケーションを含む命題論理式の操作を必要とするすべてのアプリケーションで有利に実施することができる。本開示が、米国カリフォルニア州オークランドのFranz,Inc.から市販されているAllegro Common Lispなどの言語でのリスト構造としてのWFFの操作の文脈でシステムおよび方法を説明するが、このシステムおよび方法を、代替の形でのWFFを操作するように動作可能とすることができることにも留意されたい。たとえば、このシステムおよび方法を、そのようなWFFの単純化での改善された効率をもたらすオブジェクトとして表されたWFFを操作するように動作可能とすることができる。
【0021】
本開示では、入力WFF 100(
図1)を、リストとして表すことができ、このリストでは、リスト内の最初の要素を、入力WFF 100のトップレベル演算子とすることができる。本開示の文脈での入力WFF 100は、次のうちの1つを含むことができる。
1.記号TまたはF(それぞれ真および偽を表す)、
2.次のいずれかである述語、
a.ブール述語(B1,B2,…)
b.それぞれそれ自体の有限領域(D(P1),D(P2),…)にわたる等価述語(P1,P2,…)
3.Not(WFF)のように、WFFに適用される否定演算子Not、
4.And(WFF1,WFF2,…)のように、0個以上のWFFに適用される連言演算子And、
5.Or(WFF1,WFF2,…)のように、0個以上のWFFに適用される選言演算子Or。
【0022】
定義により、And()=TおよびOr()=Fであることに留意されたい。論理演算子「And」、「Or」、または「Not」のうちの1つまたは複数を含むWFFを、本明細書では「複合」WFFと称する。他のすべてのWFFを、「原子」WFFと称する。原子WFFは、記号TおよびFを含み、これらを、本明細書では「真の原子」WFFおよび「偽の原子」WFFと称する。原子WFFは、単一のブール述語ならびに「EngineType = Rocket」など、述語をその(有限の)領域内の要素と等価にすることによって形成される「等価」WFFを含むWFFをも含み、ここで、EngineTypeは、述語であり、「Rocket」、「Ramjet」、「Turbojet」その他などの値を有することができる。本開示は、世界が等価述語のそれぞれについて領域値の指定を含む可能世界のセマンティックスの文脈でWFFを説明する。さらに、世界は、各ブール述語(たとえば、B
i)またはその否定(たとえば、Not(B
i))が真であるかどうかに関する指定を含む。たとえば、
P1 = EngineType with Domain{Rocket,Ramjet,Turbojet}
かつ
B1 = HasLiftingBody.
の場合には、複合WFF
And( Or((= EngineType Ramjet),(= EngineType Turbojet)),Not(HasLiftingBody))
は、検討される乗物が揚力物体(LiftingBody)を有しておらず、ラムジェット(Ramjet)またはターボジェット(Turbojet)のいずれかである機関を有する世界のすべてを表す。WFFによって指定される世界のもう1つの例では、次のWFF
Or((= EngineType Ramjet),(= EngineType Turbojet))
は、乗物が揚力物体を有するか否かに関わりなく、検討される乗物がラムジェットまたはターボジェットのいずれかである機関を有する世界のすべてを表す。上で議論したように、原子WFFおよび/または複合WFFを、関係を条件付けるために制約管理システムで使用することができる。たとえば、検討される乗物に適用できる抗力方程式の特定の形を、乗物が揚力物体を有するか否か、乗物の機関のタイプ(たとえば、ロケット、ターボジェット、ラムジェットなど)、および/またはWFFを表すことができる他の要因によって規定することができる。
【0023】
図1を参照すると、方法300のステップ302では、入力WFF 100を単純化することを試みるために古典的プロセッサ14(
図23)内で、入力WFF 100を最初に受け取ることができる。ステップ304は、所定のタイムアウト期間306内に連言標準形(CNF)または選言標準形(DNF)の結果のWFF 104を生成するために古典的プロセッサ14内で1つまたは複数の古典的アルゴリズム16(
図23)を使用することを含むことができる。当技術分野で既知のように、古典的アルゴリズムを使用する結果のWFFへの入力WFF 100の単純化または変換の焦点を、ブール文の充足可能性に合わせることができる。そのような充足可能性を、WFFの変数の割当が真に対するWFF評価をもたらすかどうかの判定に向けることができ、そのような充足可能性は、WFFがトートロジである(すなわち、必ず真である)、WFFが矛盾である(すなわち、絶対に真ではない)、またはWFFが真であることをもたらす変数の割当とWFFが偽であることをもたらす変数の他の割当とがあるという3つのケースを含む可能性がある。
【0024】
上記で示したように、古典的アルゴリズム16(
図1)を使用するWFFの単純化は、計算集中型である可能性がある。これに関して、古典的アルゴリズム16を使用するDNF形140(
図6)またはCNF形142(
図6)での結果のWFF 104(
図1)への入力WFF 100の変換は、残念ながら、変換を実行するためにかなりの時間およびメモリを要求する可能性がある。有利なことに、本明細書で開示される方法300(
図1)では、古典的プロセッサ14(
図1)が所定のタイムアウト期間306内に1つまたは複数の古典的アルゴリズム16を使用して結果のWFF 104を生成できない場合に、入力WFF 100が、式プロセッサ18(
図23)に通信される。タイムアウト期間306の満了は、オペレーティングシステムが、古典的計算プロセスに割り込み、古典的プロセッサ14から式プロセッサ18(
図23)に制御を渡すことができる。その後、式プロセッサ18は、下で説明するように、入力WFF 100を初期ビット配列200に変換し、初期ビット配列200を単純化し、単純化されたビット配列212を戻りWFF 138に変換することができる。
【0025】
より具体的には、
図1で、方法300のステップ302は、式プロセッサ18(
図23)で入力WFF 100を受け取ることを含むことができる。
図23に示されているように、式プロセッサ18は、式コンバータ20、ビット配列シンプリファイヤ22、および/またはビット配列コンバータ24を含むことができる。
図1の方法300のステップ308は、式コンバータ20を使用して入力WFF 100を初期ビット配列200に変換することを含むことができる。下でより詳細に説明するように、初期ビット配列200への入力WFF 100の変換は、それぞれ入力WFF 100が真の原子WFF 148(
図2A)または偽の原子WFF 150(
図2A)である場合の世界の真の配列214(
図2A)または世界の偽の配列216(
図2A)の生成を含むことができる。他のタイプのWFFについて、初期ビット配列200への入力WFF 100の変換は、初期ビット配列200に必要な次元、述語、および領域の判定と、その後の、配列キャッシュ30からの適当な初期ビット配列200の取出、または配列キャッシュ30の検索が正しい構成の初期ビット配列200の回復に失敗する場合の初期ビット配列200の構成とを含むことができる。
【0026】
本明細書で開示されるビット配列を説明するために
図11を参照すると、初期ビット配列200の実施形態の例が示されている。本開示では、ビット配列を、「1」または「0」のいずれかの値を有するビット要素222を有する配列として定義することができる。さらに、ビット配列は、任意の個数の次元を含むことができる。各次元は、異なるサイズを有することができる。ブール述語124について、対応するビット配列次元のサイズは、2である。等価述語126について、ビット配列次元のサイズは、領域の長さと等しい。本開示では、論理ビット配列を、ビット配列に含まれる述語(たとえば、ブールおよび/または等価の)のリストヘのビット配列の各次元の写像を含むビット配列として定義することができる。前に示したように、入力WFF 100(
図1)を、初期ビット配列200によって表すことができる。本開示では、初期ビット配列200を、A[i,j,k …]=1(たとえば、ビット要素値)の場合に、ブール述語および等価述語の値が配列の(i,j,k,…)によって表される世界が真であるというセマンティクスを使用して説明することができる。
【0027】
初期ビット配列200の例を、
図11に示し、
図11は、ブール述語B1(HasLiftingBody)(符号124)と、領域{Rocket,Ramjet,Turbojet}(符号118)にわたる等価述語P1(EngineType)(符号126)とを含む論理ビット配列系列を表し、Rocket、Ramjet、およびTurbojetは、等価述語P1の領域118の領域要素120である。上で述べたセマンティクスに基づいて、初期ビット配列200を、次によって表すことができる。
A[1,1]: HasLiftingBody And EngineType=Rocket
A[2,1]: Not(HasLiftingBody) And EngineType=Rocket
A[1,2]: HasLiftingBody And EngineType=Ramjet
A[2,2]: Not(HasLiftingBody) And EngineType=Ramjet
A[1,3]: HasLiftingBody And EngineType=Turbojet
A[2,3]: Not(HasLiftingBody) And EngineType=Turbojet
ここで、初期ビット配列200内の各ビット要素(たとえば、1または0)(符号222)は、領域{Rocket,Ramjet,Turbojet}にわたるブール述語(HasLiftingBody)および等価述語(EngineType)の6つの可能世界の指定に対応する。
【0028】
図11では、次の入力WFF 100が、初期ビット配列200に対応する6つの可能世界のうちの2つを指定する。
And( Or((= EngineType Ramjet),(= EngineType Turbojet)),Not(HasLiftingBody))
【0029】
図12では、次の入力WFF 100が、初期ビット配列200に対応する6つの可能世界のうちの4つを指定する。
Or((= EngineType Ramjet),(= EngineType Turbojet))
【0030】
了解されるように、
図11および12に示された初期ビット配列200は、入力WFF 100を表す初期ビット配列200の非限定的な実施形態である。本開示では、入力WFF 100を、任意の個数の次元を有する初期ビット配列200によって表すことができ、領域118は、有限の長さを有することができる。
【0031】
本明細書で開示される方法300の
図2A〜2Bを参照して、入力WFF 100を初期ビット配列200に変換する308のステップに含めることができる1つまたは複数の動作を示す。上で示した動作を、入力WFF 100に対して再帰的に実行することができ、初期ビット配列200を構成することができ、述語114(
図11〜12)のリストを、述語114が初期ビット配列200内に現れる順序で生成することができる。たとえば、
図11および12に示された初期ビット配列200について、述語リスト116を、次によって表すことができる。
1. EngineType
2. HasLiftingBody
【0032】
述語リスト116内の各述語114は、それに関連する領域118を有する。たとえば、等価述語126(EngineType)は、領域要素120{Rocket,Ramjet,Turbojet}を含む。ブール述語124(HasLiftingBody)は、領域要素120{True,False}を含む。本開示は、初期ビット配列200の構成およびそれに関連する述語リスト116の生成を容易にする1つまたは複数のルーチンまたは関数を含むことができる。そのようなルーチンを、方法300(
図1)のプログラミング命令内に記述することができ、かつ/またはルーチンを、基礎になるプログラミング言語に含めることができる。次は、初期ビット配列200への入力WFF 100の変換を容易にするためにシステム10(
図23)および方法300(
図1)に含めることができるルーチンまたは機能のうちの1つまたは複数の短い説明を含む。
【0033】
関数「Operator(WFF)」は、任意の入力WFFのトップレベル演算子を返すように構成される。そのような演算子は、ヌル、空集合、True(T)述語およびFalse(nil)述語のnil(または同等物)、ブール述語のブール述語自体、等価述語の=(等価演算子)、ならびに複合WFFの連言演算子、選言演算子、または否定演算子(それぞれ、And、Or、またはNot)のいずれかである。
【0034】
関数「Arg1(WFF)」は、入力WFFの引数またはオペランドのリストの最初の要素を返すように構成される。そのような引数またはオペランドは、True述語、False述語、およびブール述語のnil、等価述語で使用される述語、And演算子、Or演算子、またはNot演算子に続く最初のWFF(たとえば、第1オペランド)、または何もない場合のnilである。
【0035】
関数「Arg2(WFF)」は、入力WFFの引数またはオペランドのリストの2番目の要素を返すように構成される。そのような引数またはオペランドは、True述語、False述語、およびブール述語のnil、等価述語の領域値、And演算子、Or演算子、またはNot演算子に続く2番目のWFF(たとえば、第2オペランド)、または何もない場合のnilである。
【0036】
関数「Position(item,list)」は、任意のリストlistについて、項目itemの最初の出現のリストへのインデックスを返すように構成される。これに関して、「Position(item,list)」は、リスト内の項目の位置を返す。たとえば、Position(d,{a,b,c,d,e,f})=4である。
【0037】
関数「Element(list,index)」は、任意のリストlistについて、リスト内のインデクシングされた項目itemを返すように構成される。これに関して、Element(list,index)は、「Position(item,list)」によって判定されるリスト位置を有する項目の値またはアイデンティティを返す。たとえば、Index({a,b,c,d,e,f},4)=dである。
【0038】
追加のルーチンまたは関数を、本システムおよび本方法を実行するためにプログラミング言語の実施態様に含めることができる。
【0039】
たとえば、関数「BitNot(array)」を、各ビット要素が1から0へおよび0から1へ反転された初期ビット配列を返すために提供することができる。
【0040】
関数「BitAnd(array1,array2)」では、入力配列すなわちarray1およびarray2が、同一の次元を有することを要求される。「BitAnd(array1,array2)」関数は、個々の初期ビット配列のビット要素の「AND」(すなわち、連言)と等しいビット要素を有する、同一次元の配列を返す。たとえば、AND(1,1)=1、AND(1,0)=AND(0,1)=AND(0,0)=0である。
【0041】
関数「BitOr(array1,array2)」では、入力配列すなわちarray1およびarray2が、関数「BitAnd(array1,array2)」について要求されるものに似て、同一の次元を有することを要求される。「BitOr(array1,array2)」関数は、個々の初期ビット配列のビット要素の「OR」と等しいビット要素を有する、同一次元の配列を返す。たとえば、OR(1,1)=OR(1,0)=OR(0,1)=1、OR(0,0)=0である。
【0042】
関数「SetBit(array,indices,value)」は、インデックス「indices」の項目のリストによってインデクシングされる配列「array」のビット要素に、0または1のいずれかである値「value」をセットする。たとえば、2×3初期ビット配列について、「SetBit(array,(2,1),1)」は、「array」の第2行第1列のビット要素(たとえば、
図11〜12の符号222)の値に1をセットする。
【0043】
図2A〜2Bに示されているのは、入力WFF 100を初期ビット配列200に変換するステップ308である。ステップ308は、入力WFF 100のタイプに応じて入力WFF 100の処理をディスパッチする。入力WFF 100は、真または偽の原子WFF 108、原子ブール述語WFF 124、原子等価述語WFF 126、否定演算子(NOT)を含む否定WFF 130、ならびに連言演算子AND 132および選言演算子OR 134(
図2B)を含む複合WFF 136を含むことができる。この方法のステップ308は、入力WFF 100内の述語114を判定するステップ316、述語114の各1つに関連する領域要素120を判定するステップ318、および初期ビット配列200のビット配列次元218(
図11)を判定するステップ320を含む。この方法のステップ322は、内部プログラム(たとえば、「WFF_to_array_internal」)を呼び出すことによって入力WFF 100を処理すること(たとえば、再帰的に)および入力WFF 100に関連するビット配列次元218、述語114、および領域要素118、120を有する初期ビット配列200を返すこと309を含む。
図13は、入力WFF 100を初期ビット配列200に変換する、ステップ308(
図2A〜2B)に関連する動作に対応するトップレベルメソッドの擬似コードリスティング248である。
【0044】
簡単に
図14を参照すると、
図2A〜2Bに示された形で入力WFF 100を初期ビット配列200に再帰的に処理する上で述べた内部プログラム「WFF_to_array_internal」の擬似コードリスティング250が示されている。一般に、内部プログラム「WFF_to_array_internal」は、入力WFF 100が原子WFF 106であるケースを最初に検討するが、
図2A〜2Bに示されているように、真または偽の原子WFF 108、ブール述語WFF 124、等価述語WFF 126、または複合WFF 136を含むことができる。真148または偽150の原子WFF 108について、この方法のステップ324は、それぞれ世界の真の配列214または世界の偽の配列216を返す。
図14の擬似コードリスティング250は、それぞれ項目1aおよび1bに示されているように、真148または偽150の原子WFFを世界の真の配列214および世界の偽の配列216へ変換することを示す。
【0045】
図2A〜2Bでは、入力WFF 100が、単一のブール述語124を含む原子WFF 106である場合について、ステップ326は、
図14の擬似コードリスティング250の項目1cに示されているように、単一のブール述語124を等価述語126に変換する。その後、この方法は、ステップ322で述語を再帰的に処理して、入力WFF 100を初期ビット配列200に変換する。入力WFF 100が原子等価述語126である場合には、入力WFF 100は、上で説明したステップ316、318、320で処理されて、ビット配列次元218ならびにそれに関連する述語114および領域要素120が判定される。ステップ328は、さらに、配列キャッシュ30(
図3)から、等価述語126に関連するビット配列次元218(
図11)、述語114、および領域要素120を有する初期ビット配列200を取り出すことを含む。ステップ328は、下でより詳細に説明するように、配列キャッシュ30内の初期ビット配列200の取出の不在(たとえば、突き止めることの不可能性)の場合に、初期ビット配列200を構成するステップ330を含むことができる。
図14の擬似コードリスティング250の項目2aに示されているように、内部プログラム「WFF_to_array_internal」は、所与の述語、領域要素、およびビット配列次元を有する初期ビット配列200を配列キャッシュ30内で検索し、配列キャッシュ30(
図3)内で初期ビット配列を突き止めることができない場合には、下で説明する
図4に示された方法によって初期ビット配列200を構成する。
【0046】
図2A〜2Bでは、入力WFF 100が、0個以上の原子WFF 106を含む1つの複合WFF 136、選言演算子(OR)もしくは連言演算子(AND)のいずれかに関連する複数の複合WFF 136、または否定演算子に関連する正確に1つの原子WFF 106もしくは複合WFF 136である場合に、この方法のステップ322は、まず、複合WFF 136の各オペランドを再帰的に処理する。これに関して、ステップ322は、原子WFF 106に出会うまで、演算子に関連する複合WFFを再帰的に処理する。この方法は、複合WFF 136の演算子が否定演算子(NOT)130(
図2A)、連言演算子(AND)132(
図2B)、または選言演算子(OR)134(
図2B)のどれであるのかに従って、再帰的に処理されたWFFを組み合わせる。この方法は、再帰的に処理された原子WFF 106の各1つについて1つの初期ビット配列200を返す。組み合わされた初期ビット配列200を、そのビット配列次元218が個々の初期ビット配列200のビット配列次元218(
図11)と等しくなるように処理することができる。
【0047】
たとえば、
図2Aでは、ステップ334は、演算子タイプを判定することを含む。演算子が否定演算子130である場合には、この方法は、WFFがブール述語124であるかどうかを判定する。WFFがブール述語124である場合には、この方法は、それぞれのステップ316、318、および320で、初期ビット配列200の述語114、領域要素120、およびビット配列次元218を判定するステップ316を実行することを含む。その後、この方法は、配列キャッシュ30(
図3)から入手可能な場合に適当に構成された初期ビット配列200を取り出し、あるいは、配列キャッシュ30から入手不能な場合に上で説明したように初期ビット配列200を構成するステップ330を実行するステップ328を実行する。
図2Aでは、WFFがブール述語124ではない場合に、この方法のステップ322は、複合WFF 136を再帰的に処理し、ステップ336では、1から0へおよび0から1へ各ビット要素の値を反転する(図示せず)ことによって結果の初期ビット配列200を否定する。
図14の擬似コードリスティング250の項目2bは、否定される複合WFF 136のケースの処理を示す。
【0048】
図2Bを参照すると、否定されない複合WFF 136のケースについて、演算子が連言演算子132(たとえば、AND)または選言演算子134(たとえば、OR)の場合に、この方法は、組み合わされた初期ビット配列200内のオペランド102の量を判定するステップ338を含む。連言演算子132について、ステップ340は、ビット要素222が個々の初期ビット配列200の連言(「AND」)と等しくなる形で個々の初期ビット配列200のビット要素222を組み合わせることを含む。選言演算子134について、ステップ342は、ビット要素222が個々の初期ビット配列200の選言(「OR」)と等しくなる形で個々の初期ビット配列200のビット要素222を組み合わせることを含む。ステップ344は、
図2A〜2Bで上記のケースのいずれもが有効でない場合にエラーを返すことを含む。
図14に、演算子が連言演算子132(たとえば、AND)または選言演算子134(たとえば、OR)である場合の否定されない複合WFF 136の処理の擬似コードを、項目2cに示す。否定される複合WFFおよび否定されない複合WFFについて、内部プログラム「WFF_to_array_internal」は、複合WFF 136のトップレベル句に対してそれ自体を再帰的に呼び出し、適当な組合せ関数(「BitNot」、「BitOr」、または「BitAnd」)を使用して結果(すなわち、初期ビット配列200)を組み合わせる。
【0049】
図3を参照すると、上で説明した、等価述語126(
図2A)に関連する所与のビット配列次元218、述語114、および領域要素120を有する初期ビット配列200を配列キャッシュ30から取り出すステップ328に含めることができる動作が示されている。ステップ346は、配列キャッシュ30内で初期ビット配列200を検索することを含むことができる。
図15に示されているのは、所与の述語114、領域要素、およびビット配列次元を有する初期ビット配列200を配列キャッシュ30内で検索し、
図3の流れ図に示されているように配列キャッシュ30から初期ビット配列200を取り出すか、
図4の流れ図に示されているように初期ビット配列200を構成するかのいずれかを行うルーチン「GetLeafWffArray」の擬似コードリスティング252である。
【0050】
図4に、初期ビット配列200を構成するステップ330に含めることができる動作を示す。ステップ348は、対応するビット配列次元218(
図11)を有する入力WFF 100(
図1)のトップレベル述語領域を使用して初期ビット配列200を作成することを含むことができる。ステップ350は、初期ビット配列200のすべてのビット要素222に「0」をセットすることを含むことができる。ステップ352は、述語インデックス(たとえば、ビット配列次元)および値インデックス(たとえば、述語領域内の値のオフセット)に沿ってすべてのビット要素222に「1」をセットすることを含むことができる。
図4の方法は、適当に構成された初期ビット配列200を返す。この方法は、所与のビット配列次元218を有し、
図15の擬似コードリスティング252内に示されているように「pred_index」および「value_index」によって指定される世界に対応するビット要素222値(たとえば、1および0)を有する初期ビット配列200を構成する。一実施形態では、構成された初期ビット配列200(
図4)を、ステップ332(
図2B)によって実行されるように、配列キャッシュ30(
図4)に追加することができる。有利なことに、この方法のメモリ要件を、新たに構成された初期ビット配列200を配列キャッシュ30に格納された以前に構成された初期ビット配列200のコレクションに追加することによって、減らすことができる。
【0051】
図4のステップ352を、初期ビット配列200の構成中にそのビット要素222に「1」をセットするルーチンを示す
図17に示された擬似コードリスティング254によって表すことができる。上で説明したように、「bit_array」のビット要素222の「1」の値は、「set_dimension」に関係する述語およびインデックスに関係するその述語の領域要素に関連する世界のすべてに対応する。たとえば、
図16を参照すると、領域、Domain(HasLiftingBody)={”TRUE”,”FALSE”)、Domain(EngineType)={Rocket,Ramjet,Turbojet}を有する述語={HasLiftingBody,EngineType}について、原子WFF、EngineType=Turbojetに対応するビット配列の要素をセットすることが望ましい場合がある。代表的な初期ビット配列200のビット要素222の値に「1」をセットするプロセスは、引数すなわち、2と等しい「set_dimension」(すなわち、述語リスト内の第2の述語に対応する)、3と等しいindex(すなわち、述語の領域内の第3の領域要素に対応する)、{2,3}と等しいdimensions、1と等しい「current_dimension」、および空リストと等しいindicesを用いて、ビット要素222の初期の「0」の値を有する「bit_array」に対して関数「SetArrayDimensionIndex」を呼び出すことを含む。
図17では、初期ビット配列200に「1」の値を割り当てる上で説明したプロセスが、「current_dimension」の値を用いて開始すること、および入力ビット配列の適当な値をセットするためのインデックスと一緒に「current_dimension」の値を再帰的に増分することによって示されている。この形で、初期ビット配列200内の値は、変数indicesによって指定される世界に対応し、この変数indicesは、各再帰呼出で、呼出し側プログラム内で入力WFFによって表される世界を表すindicesの増加するリストに追加される。
【0052】
図5を参照すると、初期ビット配列200を単純化するステップ310に含めることができる動作が示されている。初期ビット配列200は、述語114に関連する複数のビット配列次元218を含むことができる。上で示したように、ステップ310は、モデリングされている入力WFF 100(
図1)を表すのに必要ではない述語114(
図11〜12)を除去し、単純化されたビット配列212を返す。
図5に示されているように、ステップ354は、全般的に、セマンティックス的に冗長なビット配列次元218を除去することによって初期ビット配列200を縮小することを含む。この方法は、ビット配列次元218が縮小可能であるかどうかを判定するために、ビット配列次元218の各1つについて部分配列220のビット要素222(
図2B)を比較するステップ356を含むことができる。部分配列220のビット要素222が等しい場合には、部分配列220に関連する次元を除去することができる。ステップ358は、入力WFF 100を表すのに必要ではない述語114が単純化されたビット配列212から除去されるように、等しいビット要素222を有する部分配列220を有する各ビット配列次元218を初期ビット配列200から除去することを含むことができる。ステップ360は、初期ビット配列200から除去されないビット配列次元218を含む保存された次元インデックス28(
図3)を生成することを含むことができる。ステップ362は、単純化されたビット配列212および保存された次元インデックス28を返すことを含むことができる。
【0053】
ここでビット配列単純化を示すために
図16を参照すると、次の複合WFFに対応する2×3ビット配列が示されている。
Or (And(EngineType=Turbojet, HasLiftingBody), And(EngineType=Turbojet, Not(HasLiftingBody))
【0054】
図16からわかるように、ブール述語(HasLiftingBody)の部分配列220は、(Not(HasLiftingBody))の部分配列220と同一のビット要素222値を有する。同等のビット要素222に起因して、ブール述語の次元を除去することができ、
図16に示されたビット配列は、次のWFFと論理的に同等になる。
EngineType=Turbojet
これは、
図18に示された1次元の単純化されたビット配列212に対応する。
【0055】
図19には、初期ビット配列200(
図5)から次元を除去し、単純化されたビット配列212(
図5)を返すルーチン「SimplifyArray」の擬似コードリスティング256が示されている。「SimplifyArray」ルーチンは、所与の次元内の各インデックスの部分配列220(
図5)がお互いと等しい次元を検索して初期ビット配列200をトラバースする。「SimplifyArray」ルーチンは、そのような次元を除去し、除去されない次元を記録し、呼出し側プログラムが、初期ビット配列200の述語リスト116を使用して、単純化されたビット配列212の述語リスト116(
図11)を構成できるようにする。
図19に示されたルーチンは、1つまたは複数の次元を除去することによって初期ビット配列200を縮小するために実施することのできる多数の再帰ルーチンのうちの1つである。
図19では、「SimplifyArray」の角括弧内で提示される引数は、オプションであり、このルーチンへの再帰呼出中に使用され得る。「SimplifyArray」ルーチンは、ある軸に沿った初期ビット配列の縮小可能性をチェックする関数「dimension−slice」を含むことができる。初期ビット配列が縮小可能である場合には、このルーチンは、複数の値として縮小された配列およびTrueを返すことができる。初期ビット配列が縮小可能ではない場合には、このルーチンは、複数の値として入力ビット配列およびFalseを返すことができる。上で示したように、初期ビット配列の縮小は、初期ビット配列によって表される入力WFF 100の単純化を容易にする。
【0056】
初期ビット配列200の縮小可能性に関するテストを、複数の形のうちの1つで実行することができ、MATALBプログラミング言語に組み込まれた配列に関する次の表記を使用して記述することができる。MATALB構文では、特定の軸次元の「:」項目は、その軸のすべての値を指す。たとえば、Aが2×3行列である場合には、A[2,:]は、行列の第2行を指し、A[2,:]=(A[2,1],A[2,2],A[2,3])である。配列の第k軸が縮小可能であるかどうかをテストするために、本開示のルーチン「CollapseIfPossible」は、j=2,…,Jすなわち第k軸の長さについて、
A[:,…,:,j,:,…,:] = A[:,…,:,1,:,…,:]
をテストし、ここで、添字jは、上の位置kにある。上が真である場合には、このルーチンは、縮小された配列B[:,…,:]=A[:,…,:,1,:,…,:]を返し、ここで、配列Bは、第k軸を除去することによって、Aより1つ少ない次元を有する。「CollapseIfPossible」ルーチンの実際の実施態様は、必要な場合に限って作成される仮説のB配列への行優先添字付けアクセスを使用し、さらに、そのような添字からA内の実際の「1」への写像を使用する。行優先添字は、多次元配列を単一次元であるかのように扱うことを可能にする。たとえば、次元d[1]×d[2]×…×d[n]を有するnランク配列Aを考慮すると、kがAへの行優先添字である、すなわち、A[k]=A[i[1],…,i[n]]である場合には、
k = (i[1]−1)*f[1]+…+(i[n]−1)*f[n],
f[1] = d[2]*…*d[n]
f[2] = d[3]*…*d[n]
f[n−1] = d[n]
f[n] = 1
である。
【0057】
図6を参照すると、単純化されたビット配列212を選言標準形(DNF)140または連言標準形(CNF)142の戻りWFF 138に変換するステップ312に含めることができる1つまたは複数の動作が示されている。この方法は、述語114(
図11)の集合およびそのそれぞれの領域要素120(
図11)を与えられて単純化されたビット配列212を体系的に処理すること、および戻りWFF 138を構成することを含むことができる。この方法は、さらに、単純化されたビット配列212内のビット要素222の総量を判定することを含むことができるステップ364を含むことができる。ステップ366は、1の値を有する単純化されたビット配列212内のビット要素222の量を判定することを含むことができる。ステップ368は、ビット要素222の総量の半分未満が1の値を有する場合に、単純化されたビット配列212を選言標準形(DNF)140の戻りWFF 138に変換することを含むことができる。ステップ372は、DNF WFF 140を返すことを含むことができる。ステップ370は、ビット要素222の総量の少なくとも半分が1の値を有する場合に、単純化されたビット配列212を連言標準形(CNF)142の戻りWFF 138に変換することを含むことができる。ステップ374は、CNF WFF 142を返すことを含むことができる。
【0058】
図20に、述語の集合「predicates_in」および述語の領域要素「domains_in」を与えられて、単純化されたビット配列212(
図6)を戻りWFF 138(
図6)に変換するルーチン「ArrayToWff」の擬似コードリスティング258を示す。
図20の「ArrayToWff」ルーチンは、当初に、選言標準形(DNF)140(
図5)のまたはDNFの否定としての(「not DNF」)戻りWFF 138を判定する。前述のステップ366で示したように、「ArrayToWff」ルーチンは、入力配列内の「1」の値を有するビット要素222(
図6)の量をカウントすることによって、戻りWFF 138を生成すべき形を判定することができる。前述のステップ368で示したように、DNFまたはnot DNFの選択は、「1」ビット要素222の量が単純化されたビット配列212内のビット要素222の総量の半分未満であるかどうかに依存する。
【0059】
図7は、単純化されたビット配列212を選言標準形(DNF)WFF 140に変換するステップ368の流れ図の実施形態である。ステップ368は、単純化されたビット配列212に関連する述語114の量を判定するステップ376を含むことができる。述語114の量が1より多い場合には、この方法は、1の値を有するビット要素222ごとに原子WFF 108(
図3)を作成するステップ378を含むことができる。原子WFF 108(
図2A)の作成は、
図9に示され、下でより詳細に説明されるステップ378で実行される。
図7では、ステップ382は、1の値を有するビット要素222ごとに作成された原子WFF 108の各1つを含む連言WFFを作成すること(たとえば、各原子WFFを一緒に「AND」すること)を含むことができる。ステップ384は、原子WFF 108の連言WFFを含む選言WFFすなわちDNF WFF 140を作成すること(たとえば、各連言WFFを一緒に「OR」すること)を含むことができる。
【0060】
図7では、単純化されたビット配列212に関連する述語114の量が正確に1である場合に、単純化されたビット配列212をDNF WFF 140に変換する方法は、1の値を有するビット要素222ごとに原子WFF 108を作成することを含むステップ378と、1の値を有するビット要素222ごとに作成された原子WFF 108の各1つを含む選言WFFすなわちDNF WFF 140を作成すること(たとえば、各原子WFFを一緒に「OR」すること)を含むステップ384とを含むことができる。
図7では、述語114がない場合に、ステップ386は、ビット要素222の値(たとえば、「1」または「0」)を判定すること、およびステップ388で、ビット要素222が1の値を有する場合に真148の世界WFFを返すことを含む。ステップ390は、ビット要素222が0の値を有する場合に偽150の世界WFFを返すことを含む。
【0061】
図8は、単純化されたビット配列212を連言標準形(CNF)WFF 142に変換する流れ図の実施形態である。この方法のステップ376は、上で説明したように、単純化されたビット配列212に関連する述語114の量を判定することを含むことができる。述語114の量が1より多い場合には、この方法は、0の値を有するビット要素222ごとに否定原子WFF 110を作成するステップ380を含むことができる。否定原子WFF 110の作成は、
図10の流れ図に示され、下でより詳細に説明される。
図8では、ステップ384は、否定原子WFF 110の選言WFFを作成すること(たとえば、各否定原子WFFを一緒に「OR」すること)を含むことができる。ステップ382は、否定原子WFF 110の選言WFFを含む連言WFFすなわちCNF WFF 142を作成すること(たとえば、各選言WFFを一緒に「AND」すること)を含むことができる。
【0062】
図8では、単純化されたビット配列212に関連する述語114の量が正確に1である場合に、単純化されたビット配列212をCNF WFF 142に変換する方法は、0の値を有するビット要素222ごとに否定原子WFF 110を作成することを含むステップ380と、0の値を有するビット要素222ごとに作成された否定原子WFF 110の各1つを含む連言WFFすなわちCNF WFF 142を作成すること(たとえば、各否定原子WFFを一緒に「AND」すること)を含むステップ382とを含むことができる。
図8では、述語114がない場合に、ステップ386は、ビット要素222の値(たとえば、「1」または「0」)を判定することを含む。ステップ388は、ビット要素222が1の値を有する場合に真148の世界WFFを返すことを含む。ステップ390は、ビット要素222が0の値を有する場合に偽150の世界WFFを返すことを含む。
【0063】
図9は、原子WFF 108(
図7)を作成するステップ378の流れ図の実施形態である。この方法は、述語がブール述語124または等価述語126のどちらであるのかを判定するステップ392を含むことができる。述語が等価述語126である場合には、ステップ394は、「(=述語 値)」として原子WFFを返す。述語がブール述語124である場合には、ステップ396は、述語 値=Trueであるかどうかを判定することを含むことができる。述語 値=Trueである場合には、ステップ398は、「(Not 述語)」として原子WFFを返すことを含む。述語 値がTrueではない場合には、ステップ400は、述語114(
図8)として原子WFF 108を返すことを含む。
【0064】
図10は、否定原子WFF 110を作成するステップ380の流れ図の実施形態である。ステップ392は、述語がブール述語124または等価述語126のどちらであるのかを判定することを含むことができる。述語が等価述語126である場合には、ステップ402は、述語114の領域長が2であるかどうかを判定することを含む。述語114(
図8)の領域長が2ではない場合には、ステップ404は、「Not(=述語 値)」として否定原子WFF 110を返す。述語114の領域長が2である場合には、ステップ406は、(=述語 [他の値])として否定原子WFF 110を返す。述語114がブール述語である場合には、ステップ396は、述語 値=Trueであるかどうかを判定することを含む。述語 値=Trueである場合には、ステップ398は、(Not 述語)として否定原子WFF 110を返すことを含む。述語114値がTrueではない場合には、ステップ400は、述語114(
図8)として否定原子WFF 110を返すことを含む。
【0065】
図21は、適用可能な述語および領域を与えられ、True状態を表すのにおよび原子WFF 108(
図7)を生成するのに単純化されたビット配列212(
図7)内の「1」ビット要素222(
図7)を使用する、単純化されたビット配列(「bit_array_in」)を選言標準形(DNF)140(
図7)の戻りWFF 138(
図7)に変換するルーチン「ArrayToDNF」の擬似コードリスティング260である。「ArrayToDNF」ルーチンは、当初に、単純化されたビット配列212が多次元配列であるかどうかを判定するために、述語114(
図7)の総量を判定することができる。そうである場合には、単純化されたビット配列212を、それぞれが原子WFF 108の連言であるより小さいWFFのコレクションの選言としてのDNF WFF 140に変換する。原子WFF 108の生成は、単純化されたビット配列212内の0のビット要素222値に関する領域値に基づく。原子WFF 108の各1つは、各述語114の値および単純化されたビット配列212内のそのビット要素222位置での値を表す。
【0066】
短く
図11を参照すると、2次元ビット配列内のインデックス[2,2]に「1」のビット要素222を与えられて、ビット要素222は、EngineTypeの領域値でのインデックス2に対応する値すなわち「Ramjet」と、HasLiftingBodyの領域値でのインデックス2に対応する値すなわち「False」とを表す。そのような値に対応する原子WFF 108は、
Or(Not(= EngineType Rocket),Not(HasLiftingBody))
である。
【0067】
図11のビット配列の完全なWFFは、
Or(And((= EngineType Ramjet),Not(HasLiftingBody)),And((= EngineType Turbojet),Not(HasLiftingBody)))
である。
【0068】
単一の述語を与えられて、原子WFF 108が、「1」値のビット要素ごとに1つの原子WFF 108の選言として作成される。各原子WFF 108は、上で
図9の記述で説明した形で構成される。述語114が与えられない時には、結果の0次元ビット配列のコンピュータ言語固有表現を調べて、真の世界または偽の世界のいずれかを返すことができる。LISPプログラミング言語では、ビット配列が#0A1と等しい時に、真の世界が返される。LISPプログラミング言語では、ビット配列が#0A0と等しい時に、偽の世界が返される。
【0069】
図22は、適用可能な述語および領域を与えられ、真の状態を表すのにおよび否定原子WFF 110(
図8)を生成するのに単純化されたビット配列212(
図8)内の「0」ビット要素222(
図8)を使用する、単純化されたビット配列(「bit_array_in」)を連言標準形(CNF)142(
図8)の戻りWFF 138(
図8)に変換するルーチン「ArrayToNotDNF」の擬似コードリスティング262である。上で示したように、「ArrayToNotDNF」ルーチンは、当初に、単純化されたビット配列212が多次元配列であるかどうかを判定するために、述語114(
図8)の総量を判定することができる。そうである場合には、単純化されたビット配列212は、それぞれが否定原子WFF 110の選言であるより小さいWFFのコレクションの連言としてCNF WFF 142(
図8)に変換される。否定原子WFF 110の生成は、単純化されたビット配列212内の0のビット要素222値に関する領域値に基づく。
【0070】
図12を参照すると、インデックス[1,1]で「0」のビット要素222を与えられると、これは、EngineTypeの領域値でのインデックス1に対応する値すなわち「Rocket」と、HasLiftingBodyの領域値でのインデックス1に対応する値すなわち「True」とを表す。そのような値に対応する原子WFF 108は、
Or(Not(= EngineType Rocket),Not(HasLiftingBody))
である。
【0071】
図12のビット配列の完全なWFFは、
And(Or(Not(= EngineType Rocket),Not(HasLiftingBody)), Or(Not(= EngineType Rocket),HasLiftingBody))
である。
【0072】
単一の述語について、WFFは、「0」ビット要素ごとに1つの否定原子WFF 110を含む否定原子WFF 110の連言として構築される。述語114が与えられない場合には、結果の0次元ビット配列のコンピュータ言語固有表現を調べて、上で
図11に関して述べたものと同一の真世界または偽世界のいずれかを返すことができる。
【0073】
図23を参照すると、プロセッサベースのシステム10または他の適切なコンピュータシステム上などのコンピュータ実施されるプロセス内で、開示される方法の上で説明したステップまたはステップの任意の組合せを全体的にまたは部分的に実施するシステムのブロック図が示されている。プロセッサベースのシステム10(
図23)は、迅速な設計制約式計算または命題論理式の操作を必要とする任意のアプリケーションをサポートするためにWFFの単純化中に上で説明したステップのうちの1つまたは複数を実施することができる。プロセッサベースのシステム10は、上で説明した動作またはステップのうちの1つまたは複数を実施するためにプロセッサベースのシステム10に供給しまたはこれにロードすることのできるコンピュータ可読プログラム命令72を実行することができる。非限定的な例で、プロセッサベースのシステム10および/またはコンピュータ可読プログラム命令72は、制約管理システム12(
図23)内での使用のためなどの完全論理式(WFF)の単純化を容易にすることができる。
【0074】
図23のブロック図は、入力WFF 100(
図1)を入力WFF 100の初期ビット配列200(
図1)表現に変換し、入力WFF 100を表現するのに必要ではない述語114(
図1)を除去するために初期ビット配列200を単純化し、単純化されたビット配列212を最小の標準形(すなわち、DNFまたはCNF)の戻りWFF 138(
図1)に変換することのできる、有利な実施形態でのプロセッサベースのシステム10を示す。
図23に示された実施形態では、プロセッサベースのシステム10は、1つまたは複数のコンポーネントの間のデータの転送を容易にするためにそのようなコンポーネントに通信的に結合されたデータ通信パス50(たとえば、データリンク)を含むことができる。通信パス50は、1つもしく複数のデータバスまたはプロセッサベースのシステム10のコンポーネントおよびデバイスの間のデータの転送を容易にする任意の他の適切な通信パスを含むことができる。
【0075】
非限定的な実施形態では、コンポーネントは、プロセッサ52、メモリデバイス54、不揮発性ストレージデバイス56、通信デバイス60、入出力デバイス58、およびディスプレイデバイス62(
図23)のうちの1つまたは複数を含むことができる。このシステムは、さらに、古典的プロセッサ14および式プロセッサ18を含むことができる。式プロセッサ18は、式コンバータ20、ビット配列シンプリファイヤ22、ビット配列コンバータ24、ビット配列コンストラクタ26、配列キャッシュ30、および保存された次元インデックス28を含むことができる。上で示したように、古典的プロセッサ14を、所定のタイムアウト期間306(
図1)以内に1つまたは複数の古典的アルゴリズム16(
図1)を使用して入力WFF 100の単純化を試みるように構成することができる。古典的プロセッサ14を、結果のWFF 104またはその不在を式プロセッサ18に通信するように構成することができる。
【0076】
式プロセッサ18を、入力WFF 100(
図1)を初期ビット配列200(
図1)に変換するように構成することができる。式コンバータ20を、入力WFF 100内の述語114(
図2A)を判定し、述語114の各1つに関連する領域要素120(
図2A)を判定し、述語114および領域要素120に対応する初期ビット配列200のビット配列次元218(
図2A)を判定するように構成することができる。これに関して、原子WFF 108を、世界の真の配列214(
図2A)および世界の偽の配列216(
図2A)のうちの1つを含む初期ビット配列200に変換するように式コンバータ20を構成することができる。式コンバータ20を、さらに、ブール述語124に関連する初期ビット配列200のビット配列次元218と述語114と領域要素120とを判定し、配列キャッシュ30(
図3)から、ブール述語124を表す初期ビット配列200を取り出すように構成することができる。ビット配列コンストラクタ26は、配列キャッシュ30の検索が適当な構成を有する初期ビット配列200を発見できない場合に、初期ビット配列200を構成することができる。式コンバータ20を、さらに、原子WFF 106(
図2A)の各1つの初期ビット配列200を返し、否定演算子130(
図2A)、連言演算子132(
図2B)、および選言演算子134(
図2B)のうちの少なくとも1つに基づいて初期ビット配列200を組み合わせるように構成することができる。
【0077】
ビット配列シンプリファイヤ22は、モデリングされつつある入力WFF 100(
図1)を表すのに必要ではない述語114(
図5)を除去することによって、初期ビット配列200を単純化することができる。これに関して、ビット配列シンプリファイヤ22を、ビット配列次元218(
図5)のうちの少なくとも1つを除去することによって初期ビット配列200を縮小するように構成することができる。ビット配列シンプリファイヤ22を、さらに、ビット配列次元218の各1つの部分配列220のビット要素222を比較し、等しいビット要素222(
図5)を有する部分配列220(
図5)を有する各ビット配列次元218を初期ビット配列200から除去するように構成することができる。さらに、ビット配列シンプリファイヤ22は、初期ビット配列200から除去されないビット配列次元218を含む保存された次元インデックス28(
図5)を生成することができる。
【0078】
ビット配列コンバータ24は、単純化されたビット配列212(
図6)を、選言標準形(DNF)140(
図6)または連言標準形(CNF)142(
図6)の戻りWFF 138(
図6)に変換することができる。一実施形態では、ビット配列コンバータ24は、単純化されたビット配列212内のビット要素222(
図6)の総量に対する、1の値を有する単純化されたビット配列212内のビット要素222の量を判定することができる。ビット配列コンバータ24は、ビット要素222の総量の半分未満が1の値を有する場合に、単純化されたビット配列212をDNF形140(
図6)の戻りWFF 138(
図6)に変換することができる。その代わりに、ビット配列コンバータ24は、ビット要素222の総量の少なくとも半分が1の値を有する場合に、単純化されたビット配列212をCNF形142(
図6)の戻りWFF 138(
図6)に変換することができる。ビット配列コンバータ24を、
図6〜10および/または
図21〜22に示され、上で説明された動作のうちの1つまたは複数を実行するように構成することができる。
【0079】
引き続き
図23を参照すると、入力WFF 100(
図1)の初期ビット配列200(
図1)表現に入力WFF 100を変換し、述語114(
図1)を除去するために初期ビット配列200を単純化し、単純化されたビット配列212を戻りWFF 138(
図1)に変換する、上で説明されたステップのうちの任意の1つの結果を、入出力デバイス58に送ることができる。入出力デバイス58を、ディスプレイデバイス62に通信的に結合することができ、このディスプレイデバイス62を、WFF変換および単純化プロセスの結果を表示するように構成することができる。ディスプレイデバイス62を、WFF変換および単純化プロセスの実施の進行状況および/または結果を表示するように構成することができる。さらに、ディスプレイデバイス62を、データ依存制約管理システム12(
図23)内で実施されるトレード研究の結果を表示するように構成することができる。
【0080】
一実施形態では、プロセッサベースのシステム10は、メモリデバイス54にインストールできるコンピュータ可読プログラム命令72の命令を実行する1つまたは複数のプロセッサ52を含むことができる。代替案では、プロセッサ52は、複数の一体化されたプロセッサコアを有するマルチプロセッサコアを含むことができる。さらに、プロセッサ52は、チップ上に一体化されたメインプロセッサおよび1つまたは複数の副プロセッサを含むことができる。プロセッサ52は、複数の類似して構成されたプロセッサを有するメニープロセッサシステムを含むこともできる。
【0081】
引き続き
図23を参照すると、プロセッサベースのシステム10は、さらに、揮発性または不揮発性のストレージデバイス56のうちの1つまたは複数を含むことができる1つまたは複数のメモリデバイス54を含むことができる。しかし、メモリデバイス54は、
図4に示されたプロセス中に構成される初期ビット配列200などのデータを格納する配列キャッシュ30などの任意のハードウェアデバイスを含むことができる。たとえば、メモリデバイス54は、通信パス50内に含めることができるインターフェースおよび/または一体化されたメモリコントローラハブのランダムアクセスメモリまたはキャッシュを含むことができる。メモリデバイス54を、さまざまな異なるタイプのデータ、コンピュータ可読コードもしくはコンピュータ可読プログラム命令72、または任意の他のタイプの情報のうちの任意の1つを永久的におよび/または一時的に格納するように構成することができる。不揮発性ストレージデバイス56を、フラッシュメモリデバイス、ハードドライブ、光ディスク、ハードディスク、磁気テープ、または長期ストレージに関する任意の他の適切な実施形態を含むがこれに限定されないさまざまな構成で提供することができる。さらに、不揮発性ストレージデバイス56は、リムーバブルハードドライブなどのリムーバブルデバイスを含むことができる。
【0082】
プロセッサベースのシステム10は、さらに、プロセッサベースのシステム10に接続できるコンポーネントの間のデータの転送を容易にするために、1つまたは複数の入出力デバイス58を含むことができる。入出力デバイス58を、プロセッサベースのシステム10に直接におよび/または間接に結合することができる。入出力デバイス58は、キーボード、マウス、ジョイスティック、タッチスクリーン、およびプロセッサベースのシステム10へのデータの入力のための任意の他の適切なデバイスなどの周辺デバイスによってユーザ入力を容易にすることができる。入出力デバイス58は、さらに、プロセッサベースのシステム10の出力を表すデータを転送する出力デバイスを含むことができる。たとえば、入出力デバイス58は、プロセッサベースのシステム10によって処理されたデータの結果を表示するコンピュータモニタまたはコンピュータスクリーンなどのディスプレイデバイス62を含むことができる。入出力デバイス58は、オプションで、プロセッサベースのシステム10によって処理された情報のハードコピーを印刷するプリンタまたはファックス機を含むことができる。
【0083】
引き続き
図23を参照すると、プロセッサベースのシステム10は、コンピュータネットワーク内のおよび/または他のプロセッサベースのシステムとのプロセッサベースのシステム10の通信を容易にする1つまたは複数の通信デバイス60を含むことができる。コンピュータネットワークまたは他のプロセッサベースのシステムとのプロセッサベースのシステム10の通信を、無線手段によるものおよび/またはハードワイヤ接続によるものとすることができる。たとえば、通信デバイス60は、プロセッサベースのシステム10とコンピュータネットワークとの間の無線通信またはケーブル通信を可能にするネットワークインターフェースコントローラを含むことができる。通信デバイス60は、モデムおよび/もしくはネットワークアダプタまたはデータを送信し受信するさまざまな代替デバイスのうちの任意の1つを含むこともできる。
【0084】
入力WFF 100(
図1)の最小の標準形の戻りWFF 138(
図1)への変換および単純化について上で説明した方法論の動作のうちの1つまたは複数を、コンピュータ可読プログラム命令72を使用して、プロセッサ52によって、ならびに/または式プロセッサ18、式コンバータ20、ビット配列シンプリファイヤ22、ビット配列コンバータ24、およびビット配列コンストラクタ26のうちの1つもしくは複数によって、実行することができる。コンピュータ可読プログラム命令72は、コンピュータ使用可能プログラムコードおよびコンピュータ可読プログラムコードを含むことができるプログラムコードを含むことができる。コンピュータ可読プログラム命令72を、プロセッサ52によって読み取り、実行することができる。コンピュータ可読プログラム命令72は、プロセッサ52が、入力WFF 100を戻りWFF 138に単純化することに関連する上で説明した実施形態の1つまたは複数の動作を実行することを可能にすることができる。
【0085】
引き続き
図23を参照すると、コンピュータ可読プログラム命令72は、プロセッサベースのシステム10の動作させる命令を含むことができ、さらに、アプリケーションおよびプログラムを含むことができる。コンピュータ可読プログラム命令72を、式プロセッサ18、式コンバータ20、ビット配列シンプリファイヤ22、ビット配列コンバータ24、および/またはビット配列コンストラクタ26による実行のためにメモリデバイス54および/または不揮発性ストレージデバイス56のうちの1つまたは複数に含め、かつ/またはロードすることができる。上で示したように、メモリデバイス54および/または不揮発性ストレージデバイス56のうちの1つまたは複数を、通信パス50を介して
図23に示された残りのコンポーネントのうちの1つまたは複数に通信的に結合することができる。
【0086】
コンピュータ可読プログラム命令72を、有形のまたは非有形の、過渡的なまたは非過渡的なコンピュータ可読媒体66に含めることができ、プロセッサ52による実行のためにプロセッサベースのシステム10にロードしまたは転送することができる。コンピュータ可読プログラム命令72およびコンピュータ可読媒体66は、コンピュータプログラム製品64を構成する。一実施形態では、コンピュータ可読媒体66は、コンピュータ可読記憶媒体68および/またはコンピュータ可読信号媒体70を含むことができる。
【0087】
コンピュータ可読記憶媒体68は、ドライブにロードできる光ディスクおよび磁気ディスク、フラッシュメモリデバイス、またはハードドライブなどのストレージデバイスへのデータの転送のための他のストレージデバイスもしくは他のストレージハードウェアを含むがこれに限定されない、さまざまな異なる実施形態を含むことができる。コンピュータ可読記憶媒体68を、プロセッサベースのシステム10にノンリムーバブルにインストールすることができる。コンピュータ可読記憶媒体68は、任意の適切な記憶媒体を含むことができ、限定なしに、半導体システムまたは伝搬媒体を含むことができる。これに関して、コンピュータ可読記憶媒体68は、電子媒体、磁気媒体、光媒体、電磁媒体、および赤外線媒体を含むことができる。たとえば、コンピュータ可読記憶媒体68は、磁気テープ、コンピュータディスケット、ランダムアクセスメモリ、および読取り専用メモリを含むことができる。光ディスクの非限定的な実施形態の例は、コンパクトディスク読取り専用メモリ、書換可能コンパクトディスク、およびディジタルビデオディスクを含む。
【0088】
コンピュータ可読信号媒体70は、コンピュータ可読プログラム命令72を含むことができ、電磁信号および光信号を含むがこれに限定されないさまざまなデータ信号構成で実施され得る。そのようなデータ信号を、無線手段またはハードワイヤ手段によるものを含む任意の適切な通信リンクによって送信することができる。たとえば、ハードワイヤ手段は、光ファイバケーブル、同軸ケーブル、信号線、および無線手段または物理手段によってデータを送信する任意の他の適切な手段を含むことができる。
【0089】
引き続きさらに
図23を参照すると、コンピュータ可読信号媒体70は、プロセッサベースのシステム10内での使用のための不揮発性ストレージまたは他の適切なストレージデバイスもしくはメモリデバイスへのコンピュータ可読プログラム命令72のダウンロードを容易にすることができる。たとえば、コンピュータ可読記憶媒体68内に含まれるコンピュータ可読プログラム命令72を、コンピュータネットワークを介して別のシステムのサーバコンピュータまたはクライアントコンピュータからプロセッサベースのシステム10にダウンロードすることができる。
【0090】
プロセッサベースのシステム10のさまざまな異なる実施形態の任意の1つを、コンピュータ可読プログラム命令72を実行できる任意のハードウェアデバイスまたはシステムを使用して実施することができる。たとえば、プロセッサ52は、1つまたは複数の特定の機能を実行するように構成されたハードウェアユニットを含むことができ、ここで、その機能を実行するコンピュータ可読プログラム命令72を、メモリデバイス54に事前にロードすることができる。
【0091】
一実施形態では、プロセッサ52は、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス、または1つもしくは複数の特定の機能もしくは動作を実行するように構成された任意の他のハードウェアデバイスを含むことができる。たとえば、プログラマブル論理デバイスを、入力WFF 100(
図1)を戻りWFF 138(
図1)に単純化する方法論に関する動作のうちの1つまたは複数を実行するように一時的にまたは永久的にプログラムすることができる。プログラマブル論理デバイスは、限定なしに、プログラマブル論理アレイ、プログラマブルアレイ論理、フィールドプログラマブル論理アレイ、およびフィールドプログラマブルゲートアレイ、ならびに任意の他の適切な論理デバイスを含むことができる。一実施形態では、コンピュータ可読プログラム命令72を、1つもしくは複数のプロセッサ52によって、および/またはプロセッサ52と通信する1つもしくは複数のハードウェアユニットを含む他のデバイスによって、動作させることができる。コンピュータ可読プログラム命令72のある部分を、プロセッサ52によって走行させ、コンピュータ可読プログラム命令72の他の部分を、ハードウェアユニットによって走行させることができる。
【0092】
下記は、上のテキストおよび図面で開示された例示の態様、変形、実例、および例である。一態様では、複雑な完全論理式(WFF)を単純化する方法であって、式プロセッサ18内で入力WFF 100を受け取り、式コンバータ20を用いて、入力WFF 100を初期ビット配列200に変換すること、ビット配列シンプリファイヤ22を用いて、入力WFF 100を表すのに必要ではない述語114を初期ビット配列200から除去することによって、初期ビット配列200を単純化されたビット配列212に単純化すること、およびビット配列コンバータ24を用いて、単純化されたビット配列212を連言標準形142または選言標準形140の戻りWFF 138に変換することを実行するステップと、式プロセッサ18を用いて、戻りWFF 138を返すステップとを含む方法を開示する。1つの変形形態では、入力WFF 100を初期ビット配列200に変換するステップは、入力WFF 100内の述語114を判定すること、述語114の各1つに関連する領域要素120を判定すること、述語114および領域要素120に対応する初期ビット配列200のビット配列次元218を判定すること、およびビット配列次元218ならびにそれに関連する述語114および領域要素120を有する初期ビット配列200を返すために入力WFF 100を処理することを含む。別の変形形態では、入力WFF 100は、真148または偽150の原子WFFであり、初期ビット配列200を返すために入力WFF 100を処理するステップは、真148または偽150の原子WFFについて、それぞれの世界の真の配列214または世界の偽の配列216を返すことを含む。
【0093】
1つの実例では、入力WFF 100は、ブール述語124または等価述語126を含む原子WFF 106であり、初期ビット配列200を返すために入力WFF 100を処理するステップは、原子WFFがブール述語124である場合に、ブール述語124を等価述語126に変換すること、等価述語126について、ビット配列次元218ならびにそれに関連する述語114および領域要素120を判定すること、配列キャッシュ30から、等価述語126に関連するビット配列次元218、述語114、および領域要素120を有する初期ビット配列200を取り出すこと、および配列キャッシュ30からの初期ビット配列200の取出の不在時に初期ビット配列200を構成することを含む。もう1つの実例では、入力WFF 100は、複合WFF 136であり、初期ビット配列200を生成するために入力WFF 100を処理するステップは、原子WFF 106に出会うまで、複合WFF 136を再帰的に処理すること、再帰的に処理された原子WFF 148、150の各1つについて初期ビット配列200を返すこと、および否定演算子130、連言演算子132、および選言演算子134のうちの少なくとも1つに基づいて初期ビット配列200を組み合わせることを含む。もう1つの実例では、初期ビット配列200は、述語114に関連する複数のビット配列次元218を有し、初期ビット配列200を単純化するステップは、セマンティックス的に冗長なビット配列次元218を除去することによって初期ビット配列200を縮小させることを含む。さらにもう1つの実例では、ビット配列次元218は、ビット要素を有する部分配列220を含み、初期ビット配列200を縮小させるステップは、ビット配列次元218の各1つについて部分配列220のビット要素222を比較すること、等しいビット要素222を有する部分配列220を有する各ビット配列次元218を初期ビット配列200から除去すること、初期ビット配列200から除去されないビット配列次元218を含む保存された次元インデックス28を生成すること、および単純化されたビット配列212および保存された次元インデックス28を返すことを含む。
【0094】
一例では、単純化されたビット配列212は、ビット要素からなり、単純化されたビット配列212を戻りWFF 138に変換するステップは、単純化されたビット配列212内のビット要素222の総量を判定すること、1の値を有する単純化されたビット配列212内のビット要素222の量を判定すること、ビット要素222の総量の半分未満が1の値を有する場合に、単純化されたビット配列212を選言標準形140のWFFに変換すること、およびビット要素222の総量の少なくとも半分が1の値を有する場合に、単純化されたビット配列212を連言標準形142の戻りWFF 138に変換することを含む。もう1つの例では、この方法は、式プロセッサ18内で入力WFF 100を受け取る前に、古典的プロセッサ14内で、1つまたは複数の古典的アルゴリズムを使用して入力WFF 100を処理することによって所定のタイムアウト期間内に結果のWFF 104を処理するステップと、結果のWFF 104またはその不在を式プロセッサ18に通信するステップと、結果のWFF 104の不在の場合に式プロセッサ18内で入力WFF 100を受け取るステップとをさらに含む。
【0095】
一態様では、設計制約式計算をサポートする方法であって、所定の時間期間内に結果の完全論理式(WFF)104を生成するために1つまたは複数の古典的アルゴリズムを使用して少なくとも1つの入力WFFを、古典的プロセッサ14を用いて処理するステップと、結果のWFF 104またはその不在を式プロセッサ18に通信するステップと、式プロセッサ18内で古典的プロセッサ14から入力WFF 100を受け取り、式コンバータ20を用いて入力WFF 100を初期ビット配列200に変換すること、ビット配列シンプリファイヤ22を用いて、入力WFF 100を表すのに必要ではない述語114を除去し、単純化されたビット配列212をもたらすことによって初期ビット配列200を単純化すること、ビット配列コンバータ24を用いて、単純化されたビット配列212を連言標準形142または選言標準形140の戻りWFF 138に変換すること、および戻りWFF 138を返すことを実行するステップとを含む方法を開示する。
【0096】
もう1つの態様では、設計制約式計算をサポートするプロセッサベースのシステムであって、入力完全論理式WFFを初期ビット配列200に変換するように構成された式コンバータ20と、入力WFF 100を表すのに必要ではない述語114を初期ビット配列200から除去することによって、初期ビット配列200を単純化されたビット配列212に単純化するように構成されたビット配列シンプリファイヤ22と、単純化されたビット配列212を連言標準形142または選言標準形140の戻りWFF 138に変換するように構成されたビット配列コンバータ24とを含むシステムを開示する。1つの変形形態では、式コンバータ20は、入力WFF 100内の述語114を判定し、述語114の各1つに関連する領域要素120を判定し、述語114および領域要素120に対応する初期ビット配列200のビット配列次元218を判定するように構成される。別の変形形態では、入力WFF 100は、真148または偽150の原子WFFであり、式コンバータ20は、真148または偽150の原子WFFを、0次元で世界の真の配列214または世界の偽の配列216のそれぞれの1つを含む初期ビット配列200に変換するように構成される。もう1つの変形形態では、このシステムは、1つまたは複数の初期ビット配列200を含む配列キャッシュ30と、ブール述語124または等価述語126を含む入力WFF 100と、ブール述語124を等価述語126に変換し、ビット配列次元218ならびに等価述語126に関連する述語114および領域要素120を判定し、配列キャッシュ30から、等価述語126を表す初期ビット配列200を取り出すように構成された式コンバータ20とをさらに含む。さらにもう1つの変形形態では、このシステムは、配列キャッシュ30内での初期ビット配列200の不在の場合に初期ビット配列200を構成するように構成されたビット配列コンストラクタ26をさらに含む。
【0097】
1つの実例では、入力WFF 100は、少なくとも1つの演算子によって関連付けられる複数の原子WFF 148、150を含む複合WFF 136であり、式コンバータ20は、原子WFF 148、150のうちの各1つの初期ビット配列200を返し、否定演算子130、連言演算子132、および選言演算子134のうちの少なくとも1つに基づいて初期ビット配列200を組み合わせるように構成される。もう1つの実例では、初期ビット配列200は、述語114に関連する複数のビット配列次元218を有し、ビット配列シンプリファイヤ22は、ビット配列次元218のうちの少なくとも1つを除去することによって初期ビット配列200を縮小させるように構成される。さらにもう1つの実例では、ビット配列次元218は、ビット要素を有する部分配列220を含み、ビット配列シンプリファイヤ22は、ビット配列次元218の各1つについて部分配列220のビット要素222を比較し、等しいビット要素222を有する部分配列220を有する各ビット配列次元を初期ビット配列200から除去するように構成される。一例では、このシステムは、単純化されたビット配列内のビット要素222の総量に対する1の値を有する単純化されたビット配列212内のビット要素222の量を判定し、ビット要素222の総量の半分未満が1の値を有する場合に、単純化されたビット配列212を選言標準形140のWFFに変換し、ビット要素222の総量の少なくとも半分が1の値を有する場合に、単純化されたビット配列212を連言標準形142の戻りWFF 138に変換するように構成されたビット配列コンバータ24をさらに含む。もう1つの例では、このシステムは、入力WFF 100を受け取り、1つまたは複数の古典的アルゴリズムを使用して所定のタイムアウト期間内に結果のWFF 104を判定するように構成された古典的プロセッサ14をさらに含み、古典的プロセッサ14は、結果のWFF 104またはその不在を式プロセッサ18に通信するように構成され、式プロセッサ18は、古典的プロセッサ14からの結果のWFF 104の不在の場合に入力WFF 100を受け取るように構成される。
【0098】
有利なことに、入力WFFを単純化する、本明細書で開示されるシステムおよび方法を、上で示したようにデータ依存制約ネットワーク内の条件プラニングで実施することができる。これに関して、入力WFFを単純化する、本明細書で開示されるシステムおよび方法を、データ依存制約ネットワークの一部である入力変数のユーザ指定の集合から出力変数のユーザ指定の集合の値を計算するための条件計算プランを作成するプロセスで実施することができる。有利なことに、条件計算プランを作成するプロセスは、伝統的な条件プラニングアルゴリズムによって要求されるプラニングと計算との混合を回避する。そのようなプロセスを使用する計算プランの判定は、識別できる待ち時間をほとんどまたは全く伴わずに、比較的迅速である。時間の節約を、設計者が有利に使用して、トレード研究中により大きくより複雑な設計空間を探査することができる。
【0099】
前述の説明および関連する図面で提示される教示の利益を有する、本開示が関連する技術分野における通常の技量を有するものは、本開示の多数の修正形態および他の実施形態を思い浮かべるであろう。本明細書で説明される実施形態は、例示的であることを意図され、限定的または網羅的であることは意図されていない。本明細書で特定の用語が使用されるが、それらの用語は、包括的で説明的な意味でのみ使用され、限定のためのものではない。