特許第6180739号(P6180739)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ザ・ボーイング・カンパニーの特許一覧

特許6180739論理式の迅速な管理のためのシステムおよび方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6180739
(24)【登録日】2017年7月28日
(45)【発行日】2017年8月16日
(54)【発明の名称】論理式の迅速な管理のためのシステムおよび方法
(51)【国際特許分類】
   G06F 17/10 20060101AFI20170807BHJP
   G06F 17/50 20060101ALI20170807BHJP
【FI】
   G06F17/10 Z
   G06F17/50 604D
【請求項の数】14
【外国語出願】
【全頁数】37
(21)【出願番号】特願2013-2191(P2013-2191)
(22)【出願日】2013年1月10日
(65)【公開番号】特開2013-210997(P2013-210997A)
(43)【公開日】2013年10月10日
【審査請求日】2015年12月8日
(31)【優先権主張番号】13/422,335
(32)【優先日】2012年3月16日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】500520743
【氏名又は名称】ザ・ボーイング・カンパニー
【氏名又は名称原語表記】The Boeing Company
(74)【代理人】
【識別番号】100109726
【弁理士】
【氏名又は名称】園田 吉隆
(74)【代理人】
【識別番号】100101199
【弁理士】
【氏名又は名称】小林 義教
(72)【発明者】
【氏名】ファーティグ, ケネス ダブリュ.
(72)【発明者】
【氏名】レディ, スダカー ワイ.
(72)【発明者】
【氏名】リギンス, ブルース
【審査官】 田中 幸雄
(56)【参考文献】
【文献】 特開2012−194833(JP,A)
【文献】 特開2010−148118(JP,A)
【文献】 米国特許出願公開第2010/0088257(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
G06F 17/50
(57)【特許請求の範囲】
【請求項1】
複雑な完全論理式WFFを単純化するコンピュータ実行方法であって、
式プロセッサ(18)内で入力WFF(100)を受け取るステップであって、前記入力WFF(100)は、
i)真の原子、
ii)偽の原子、
iii)ブール述語、および/または
iv)等価述語
のうちの1つ以上、および
i)否定演算子、
ii)連言演算子、および/または
iii)選言演算子
のうちの0個以上により成っている、ステップと
式コンバータ(20)を用いて、前記入力WFF(100)を、前記入力WFF(100)の全体を表現する初期ビット配列(200)に変換すること
ビット配列シンプリファイヤ(22)を用いて、前記初期ビット配列(200)において、前記入力WFF(100)を表現するために不要である冗長な1以上の述語に対応する次元を除去することによって、前記初期ビット配列(200)を単純化されたビット配列(212)に単純化することおよび
ビット配列コンバータ(24)を用いて、前記単純化されたビット配列(212)を連言標準形(142)または選言標準形(140)の戻りWFF(138)に変換することを実行するステップと、
前記式プロセッサ(18)を用いて、前記戻りWFF(138)を返すステップと、を含み、
前記方法は、トレード研究において、データ依存制約ネットワークの一部である入力変数のユーザ指定の集合から出力変数のユーザ指定の集合の値を計算するための条件計算プランにおいて実行される、方法。
【請求項2】
前記入力WFF(100)を前記初期ビット配列(200)に変換する前記ステップは、
前記入力WFF(100)内の述語(114)を特定すること、
前記述語(114)の各1つに関連する次元の要素(120)を特定すること、
前記述語(114)および前記次元の要素(120)に対応する前記初期ビット配列(200)のビット配列次元(218)を特定すること、および
前記ビット配列次元(218)ならびにそれに関連する前記述語(114)および前記次元の要素(120)を有する前記初期ビット配列(200)を返すために前記入力WFF(100)を処理することを含み、
前記入力WFF(100)は、好ましくは、真の原子WFF(148)および偽の原子WFF(150)のうちの1つであり、
前記初期ビット配列(200)を返すために前記入力WFF(100)を処理する前記ステップは、好ましくは、
前記真の原子WFF(148)または偽の原子WFF(150)に対して、真のみを表す0次元の配列(214)または偽のみを表す0次元の配列(216)をそれぞれ返す、請求項1に記載の方法。
【請求項3】
前記入力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)を構成することを含む、請求項2に記載の方法。
【請求項4】
前記入力WFF(100)は、複合WFF(136)であり、
前記初期ビット配列(200)を返すために前記入力WFF(100)を処理する前記ステップは、
前記処理の結果として原子WFF(106)が得られるまで、前記複合WFF(136)を再帰的に処理すること、
前記再帰的処理の結果として得られた前記原子WFF(148、150)の各1つについて初期ビット配列(200)を返すこと、および
否定演算子(130)、連言演算子(132)、および選言演算子(134)のうちの少なくとも1つに基づいて前記初期ビット配列(200)を組み合わせることを含む、請求項3に記載の方法。
【請求項5】
前記ビット配列次元(218)、ビット要素を有する部分配列(220)が存在し
前記初期ビット配列(200)を単純化させる前記ステップは、
前記ビット配列次元(218)の各1つについて前記部分配列(220)の前記ビット要素(222)を比較すること、
等しいビット要素(222)を有する部分配列(220)を有する各ビット配列次元(218)を前記初期ビット配列(200)から除去すること、
前記初期ビット配列(200)から除去されないビット配列次元(218)を含む保存された次元インデックス(28)を生成すること、および
単純化されたビット配列(212)および前記保存された次元インデックス(28)を返すことを含む、請求項2から4のいずれか一項に記載の方法。
【請求項6】
前記単純化されたビット配列(212)は、ビット要素からなり、
前記単純化されたビット配列(212)を前記戻りWFF(138)に変換する前記ステップは、
前記単純化されたビット配列(212)内の前記ビット要素(222)の総量を判定すること、
1の値を有する前記単純化されたビット配列(212)内の前記ビット要素(222)の量を判定すること、
前記ビット要素(222)の前記総量の半分未満が1の値を有する場合に、前記単純化されたビット配列(212)を前記選言標準形(140)の前記WFFに変換すること、および
前記ビット要素(222)の前記総量の少なくとも半分が1の値を有する場合に、前記単純化されたビット配列(212)を前記連言標準形(142)の前記戻りWFF(138)に変換することを含む、請求項1から5のいずれか一項に記載の方法。
【請求項7】
前記式プロセッサ(18)内で前記入力WFF(100)を受け取る前に、古典的プロセッサ(14)内で、1つまたは複数の古典的アルゴリズムを使用して前記入力WFF(100)を処理することによって所定のタイムアウト期間内に結果のWFF(104)を処理するステップと、
前記結果のWFF(104)またはそれがないことを前記式プロセッサ(18)に通信するステップと、
前記結果のWFF(104)がない場合に前記式プロセッサ(18)内で前記入力WFF(100)を受け取るステップと、をさらに含
前記古典的アルゴリズムは前記入力WFF(100)の前記連言標準形または前記選言標準形を判定するためのアルゴリズムである、請求項1から6のいずれか一項に記載の方法。
【請求項8】
設計制約式計算をサポートするプロセッサベースのシステムであって、
全論理式(WFF)である入力WFF(100)、前記入力WFF(100)の全体を表現する初期ビット配列(200)に変換するように構成された式コンバータ(20)と、
前記初期ビット配列(200)において、前記入力WFF(100)を表現するために不要である冗長な1以上の述語に対応する次元を除去することによって、前記初期ビット配列(200)を単純化されたビット配列(212)に単純化するように構成されたビット配列シンプリファイヤ(22)と、
前記単純化されたビット配列(212)を連言標準形(142)または選言標準形(140)の戻りWFF(138)に変換するように構成されたビット配列コンバータ(24)と、を含み、
前記入力WFF(100)は、
i)真の原子、
ii)偽の原子、
iii)ブール述語、および/または
iv)等価述語
のうちの1つ以上、および
i)否定演算子、
ii)連言演算子、および/または
iii)選言演算子
のうちの0個以上により成っており、
前記プロセッサベースのシステムは、トレード研究において、データ依存制約ネットワークの一部である入力変数のユーザ指定の集合から出力変数のユーザ指定の集合の値を計算するための条件計算プランの入力WFFを単純化するように構成されている、システム。
【請求項9】
前記式コンバータ(20)は、前記入力WFF(100)内の前記述語(114)を特定し、前記述語(114)の各1つに関連する次元の要素(120)を特定し、前記述語(114)および前記次元の要素(120)に対応する前記初期ビット配列(200)のビット配列次元(218)を特定するように構成され、
前記入力WFF(100)は、好ましくは、真の原子WFF(148)および偽の原子WFF(150)のうちの1つであり、
前記式コンバータ(20)は、好ましくは、前記真の原子WFF(148)または前記偽の原子WFF(150)を、真のみを表す0次元の配列(214)および偽のみを表す0次元の配列(216)のそれぞれの1つを含む初期ビット配列(200)に変換するように構成される、請求項8に記載のシステム。
【請求項10】
1つまたは複数の初期ビット配列(200)を含む配列キャッシュ(30)と、
ブール述語(124)または等価述語(126)を含む前記入力WFF(100)と、
前記ブール述語(124)を等価述語(126)に変換し、ビット配列次元(218)ならびに前記等価述語(126)に関連する前記述語(114)および前記次元の要素(120)を特定し、前記配列キャッシュ(30)から、前記等価述語(126)を表す初期ビット配列(200)を取り出すように構成された前記式コンバータ(20)と、をさらに含み、任意に、
前記配列キャッシュ(30)内に前記初期ビット配列(200)がない場合に前記初期ビット配列(200)を構成するように構成されたビット配列コンストラクタ(26)と、をさらに含む、請求項8または9に記載のシステム。
【請求項11】
前記入力WFFは、少なくとも1つの演算子に関連する2つ以上の原子WFFを含む複合WFFであり、
前記式コンバータは、前記原子WFFのうちの各1つに対して初期ビット配列を返すように構成され、否定演算子、連言演算子、および選言演算子のうちの少なくとも1つに基づいて前記初期ビット配列を組み合わせるように構成される、請求項10に記載のシステム。
【請求項12】
前記初期ビット配列(200)は、前記述語(114)に関連する複数のビット配列次元(218)を有し、
前記ビット配列シンプリファイヤ(22)は、前記ビット配列次元(218)のうちの少なくとも1つを除去することによって前記初期ビット配列(200)を単純化させるように構成され、
前記ビット配列次元、ビット要素を有する部分配列(220)が存在し
前記ビット配列シンプリファイヤ(22)は、前記ビット配列次元(218)の各1つについて前記部分配列(220)の前記ビット要素(222)を比較し、等しいビット要素(222)を有する部分配列を有する各ビット配列次元を前記初期ビット配列(200)から除去するように構成される、請求項9から11のいずれか一項に記載のシステム。
【請求項13】
ビット配列コンバータ(24)であって、
前記単純化されたビット配列(212)内のビット要素(222)の総量に対する1の値を有する前記単純化されたビット配列(212)内の前記ビット要素(222)の量を判定し、
前記ビット要素(222)の前記総量の半分未満が1の値を有する場合に、前記単純化されたビット配列(212)を前記選言標準形(140)の前記WFFに変換し、
前記ビット要素(222)の前記総量の少なくとも半分が1の値を有する場合に、前記単純化されたビット配列(212)を前記連言標準形(142)の前記戻りWFF(138)に変換するように構成された、ビット配列コンバータ(24)をさらに含む、請求項8から12のいずれか一項に記載のシステム。
【請求項14】
前記入力WFF(100)を受け取るように構成され、1つ以上の古典的アルゴリズムを用いて所定のタイムアウト期間内に結果のWFF(104)を判定するように構成された古典的プロセッサ(14)をさらに含み、
前記古典的プロセッサ(14)は、前記結果のWFFおよびその欠如を式プロセッサ(18)に伝えるように構成され、
前記式プロセッサ(18)は、前記古典的プロセッサから結果のWFF(104)を受け取らなかったときに、前記入力WFF(100)を受け取るように構成されており
前記古典的アルゴリズムは前記入力WFF(100)の前記連言標準形または前記選言標準形を判定するためのアルゴリズムである、請求項8から13に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、全般的には、命題論理式または完全論理式の操作に関する。
【背景技術】
【0002】
航空機または宇宙打上用ロケットなどの乗物の概念設計は、通常、多数のシステム構成および基準が考慮され得る設計トレードオフ研究またはトレード研究の組を伴う。最適設計に達するためには、乗物の性能、コスト、信頼性、および複数の分野にまたがるさまざまな他の要因の観点からさまざまな候補設計概念を評価することが望ましい。候補設計概念の評価を、制約ネットワークなどの計算手順で実施することができ、この制約ネットワークでは、当技術分野で既知のように、制約ネットワーク内の複数の変数の間の数学的関係が、関連する独立変数の値を与えられて、制約ネットワークによって決定される、変数のうちの任意の1つの値の計算を可能にする。設計トレード研究では、候補設計概念の評価が、設計変数、性能変数、およびコスト変数の間の制約を表す大量の代数方程式を伴う場合がある。
【0003】
トレード研究応用のための制約ネットワークの古典的実施態様では、代数方程式の組は静的であり、すべての方程式が常に満足される。さらに、代替の計算方法が、航空機の空力抵抗を判定する次の表現のように、選択された方程式に組み込まれる。
dragPlane=If(CanardIsPresent,dragBody_CanardAttached(FuselageSize)+dragCanard(CanardSize),dragBody_NoCanard(FuselageSize))
【0004】
残念ながら、上に示した表現のように方程式に計算方法を組み込むことは、多数の異なる構成を組み込んだ複雑系のモデラについて扱いにくいものになる可能性がある。さらに、方程式に計算方法を組み込むことは、計算フローの逆転を必要とする、あるタイプのトレード研究の実行を妨げる可能性がある。
【0005】
方程式に計算方法を組み込むことに対する代替案は、任意の所与の方程式の適用可能性を、同一の制約ネットワークによって決定される計算状態に依存するものにすることである。制約ネットワークモデリングの重要なプロパティは、計算パス内の制約集合の数値解からの計算プラニング(すなわち、所与のトレード研究の実行中の、計算ステップの順序付けられたシーケンスまたはネットワークを介する計算パスの決定)の分離である。計算パスのプラニングのそのような分離は、システム設計者にトレード研究中の比較的迅速なフィードバックを与えるために必須である。これは、システム設計者が、トレード研究中にさまざまな設計空間を探査することを可能にする。
【0006】
各方程式の適用可能性が、静的ではなく、データ依存である場合には、そのようなデータ依存性をモデリングする有効な技法は、命題形式または完全論理式(WFF)を各方程式に結び付けることであり、このWFFは、ネットワーク内のデータに依存し、WFFが真と評価される場合に方程式が所与の状況で適用可能であることを意味する。これに関して、各WFFは、そのWFFが真である世界の集合を定義する真値を有する。
【0007】
データ依存ネットワーク内の計算プランを、計算ステップの順序付けられたシーケンスとしてモデリングすることもできる。そのような配置では、各計算ステップは、命題形式またはWFFを関連付けられ、このWFFは、ネットワーク内のデータおよび前の計算ステップで計算された結果に依存し、WFFが真と評価される場合には、計算ステップが所与の状況で評価されることを意味する。各計算ステップに関連付けられたWFFは、解かれる必要がある方程式に関連するWFFに対する和集合演算子、共通部分演算子、および差分演算子の異なる組合せによって入手することができる。そのようなWFFは、制約ネットワーク内のどの変数が独立であり、そのような命題WFFの迅速な操作および組合せを必要とするのかに依存して非常に複雑になる可能性がある。他のWFFの組合せを介して入手されるWFFは、トレード研究中の効率的な計算のために単純化を必要とする。これに関して、WFFの組合せを単純化されない状態のまま残すことは、数千個の方程式を伴う比較的大きいネットワーク内でWFFがさらに組み合わされる時に、メモリサイズの爆発をもたらす可能性がある。さらに、WFFが、例外なく偽のWFFに単純化される時には、計算プラン生成手順は、制約ネットワークの不必要な分岐を枝刈りすることができ、これによって、コンパクトで効率的な計算プランを作ることができる。
【0008】
そのようなWFF単純化プロセスは、有限だが大きい領域にわたる大量の述語を有する論理式に適用される時に、極端に計算集中型になる可能性がある。WFFの連言標準形またはWFFの選言標準形を判定する古典的アルゴリズムは、計算結果を比較的短い時間期間(たとえば、数分)でシステム設計者に与えるのに不適当である。WFFの単純化は、好ましくは、計算時間を減らし、異なる設計トレードを検討し、調査するためにシステム設計者が使用できる時間の長さを増やすために、できる限りすばやく実行される。完全論理式を単純化する時間の長さの削減は、さらに、より大きくより複雑な設計空間を調査する能力をシステム設計者に与えることができる。
【0009】
たとえば、超音速飛翔体の概念設計では、制約管理プラニングアルゴリズムが、多数の所望のトレード研究のうちの1つのプラニング中に大量の述語への多数の参照を含む多数のWFFを単純化するために必要である。例のWFFは、10個から15個までの述語のみを有することができ、各述語は、2個から20個までの可能な値を有する。そのようなWFFは、構文的に、類似するスケールである深さを伴って同一の述語を5回から10回参照することができる(たとえば、And(Or(And Or(P1=−p11,P2=p21…)…Or(And(P1=p13,Or(Not(P1=p13)…)))))など)。残念ながら、古典的アルゴリズムを使用する連言標準形または選言標準形へのそのようなWFFの単純化は、一実施態様で10分から30分までの計算時間を必要とする。古典的アルゴリズムを使用するWFFの単純化の計算時間の比較的長い期間は、異なる設計トレードを検討し、調査するために設計者が使用可能な時間を直接に減らす。
【発明の概要】
【発明が解決しようとする課題】
【0010】
上からわかるように、当技術分野には、制約ネットワークなどの論理依存システムで完全論理式を単純化するのに必要な時間の長さを減らすシステムおよび方法の必要がある。
【課題を解決するための手段】
【0011】
論理依存システムでの論理式の単純化に関連する上で示した必要は、本開示によって対処され、軽減され、本開示は、一実施形態で、制約ネットワークでの計算プラニングのプロセスをサポートできる、完全論理式(WFF)を単純化する方法を提供する。一実施形態では、この方法は、式プロセッサ内で入力完全論理式(WFF)を受け取るステップを含むことができる。この方法は、式コンバータを用いて、入力WFFを初期ビット配列に変換することをさらに含むことができる。さらに、この方法は、ビット配列シンプリファイヤを用いて、入力WFFを表すのに必要ではない述語を初期ビット配列から除去することによって、初期ビット配列を単純化されたビット配列に単純化することを含むことができる。単純化されたビット配列を、ビット配列コンバータによって戻りWFFに変換することができる。この方法は、式プロセッサを用いて、戻りWFFを返すことを含むことができる。
【0012】
さらなる実施形態では、所定の時間期間内に結果のWFFを生成するために1つまたは複数の古典的アルゴリズムを使用してデータ依存制約管理システムの少なくとも1つの入力WFFを古典的プロセッサを用いて処理するステップを含む、迅速な設計制約式計算をサポートする方法を開示する。この方法は、結果のWFFまたはその不在を式プロセッサに通信することをさらに含むことができる。さらに、この方法は、式コンバータを用いて入力WFFを初期ビット配列に変換することを含むことができる。さらに、この方法は、ビット配列シンプリファイヤを用いて、入力WFFを表すのに必要ではない述語を初期ビット配列から除去することによって、初期ビット配列を単純化されたビット配列に単純化することを含むことができる。単純化されたビット配列を、ビット配列コンバータによって戻りWFFに変換することができる。この方法は、式プロセッサを用いて、戻りWFFを返すことを含むことができる。
【0013】
迅速な設計制約式計算をサポートするシステムをも開示する。このシステムは、所定の時間期間内に結果のWFFを生成するために1つまたは複数の古典的アルゴリズムを使用して入力WFFを処理するように構成され得る古典的プロセッサを含むことができる。古典的プロセッサを、結果のWFFまたは結果のWFFの不在をプロセッサの外部に通信するように構成することができる。このシステムは、古典的プロセッサに結合され、入力WFFを初期ビット配列に変換し、入力WFFを表すのに必要ではない述語を初期ビット配列から除去することによって、初期ビット配列を単純化されたビット配列に単純化し、単純化されたビット配列を戻りWFFに変換するように構成された式プロセッサを含むことができる。
【0014】
上で議論した特徴、機能、および利益を、本開示のさまざまな実施形態で独立に達成することができ、あるいは、他の実施形態で組み合わせることができ、そのさらなる詳細を、次の説明および図面を参照して知ることができる。
【0015】
本開示の上記および他の特徴は、図面を参照する時により明白になり、図面では、同様の符号が、終始同様の部分を指す。
【図面の簡単な説明】
【0016】
図1】まずタイムアウト期間内に古典的アルゴリズムを使用して入力完全論理式(WFF)を単純化することを試みること、タイムアウト期間を過ぎた場合に、入力WFFを初期ビット配列に変換すること、初期ビット配列を単純化すること、および単純化されたビット配列を戻りWFFに変換することによって入力WFFを単純化する方法を示す流れ図である。
図2A】入力WFFを初期ビット配列に変換する方法に含めることができる1つまたは複数の動作を示す流れ図である。
図2B】入力WFFを初期ビット配列に変換する方法に含めることができる1つまたは複数の動作を示す流れ図である。
図3】配列キャッシュから初期ビット配列を取り出す方法に含めることができる1つまたは複数の動作を示す流れ図である。
図4】初期ビット配列を構成する方法に含めることができる1つまたは複数の動作を示す流れ図である。
図5】初期ビット配列を単純化する方法に含めることができる1つまたは複数の動作を示す流れ図である。
図6】単純化されたビット配列を戻りWFFに変換する方法に含めることができる1つまたは複数の動作を示す流れ図である。
図7】単純化されたビット配列を選言標準形(DNF)WFFに変換する方法に含めることができる1つまたは複数の動作を示す流れ図である。
図8】単純化されたビット配列を連言標準形(CNF)WFFに変換する方法に含めることができる1つまたは複数の動作を示す流れ図である。
図9】原子WFFを作成する方法に含めることができる1つまたは複数の動作を示す流れ図である。
図10】否定の原子WFFを作成する方法に含めることができる1つまたは複数の動作を示す流れ図である。
図11】本明細書で開示されるシステムおよび方法を使用して生成できる初期ビット配列の実施形態を示す図であり、初期ビット配列は、ブール述語および等価述語を含み、それに関連する6つの可能世界のうちの2つを表す、入力WFFに対応することができる。
図12】ブール述語に関連する6つの可能世界のうちの4つおよび等価述語に関連する領域要素を表す入力WFFに対応する初期ビット配列のさらなる実施形態を示す図である。
図13図2A〜2Bに示された方法に従って入力WFFを初期ビット配列に変換するトップレベルルーチンを示す擬似コードリスティングである。
図14】入力WFFを初期ビット配列に変換する図2A〜2Bに示された方法を実施するルーチンを示す擬似コードリスティングである。
図15】配列キャッシュから初期ビット配列を取り出す図3に示された方法を実施するルーチンを示す擬似コードリスティングである。
図16図4に示された方法を使用して構成できる初期ビット配列の実施形態を示す図であり、この方法は、図15および17に示された擬似コードリスティングによって表されるルーチンを使用して実行することができる。
図17】初期ビット配列を構成する図4に示された方法で実施できるルーチンを示す擬似コードリスティングである。
図18図15の初期ビット配列の単純化された版を示す図であり、この単純化されたビット配列を、図5に示された方法を使用して単純化することができる。
図19】初期ビット配列を単純化する図5に示された方法で実施できるルーチンを示す擬似コードリスティングである。
図20】単純化されたビット配列を戻りWFFに変換する図6に示された方法を実施するルーチンを示す擬似コードリスティングである。
図21】単純化されたビット配列を選言標準形の戻りWFFに変換する図7に示された方法を実施するルーチンを示す擬似コードリスティングである。
図22】単純化されたビット配列を連言標準形の戻りWFFに変換する図8に示された方法を実施するルーチンを示す擬似コードリスティングである。
図23】入力WFFを単純化する方法の1つまたは複数の動作を実施するプロセッサベースのシステムの実施形態を示すブロック図である。
【発明を実施するための形態】
【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)またはその否定(たとえば、Not(B))が真であるかどうかに関する指定を含む。たとえば、

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】
前述の説明および関連する図面で提示される教示の利益を有する、本開示が関連する技術分野における通常の技量を有するものは、本開示の多数の修正形態および他の実施形態を思い浮かべるであろう。本明細書で説明される実施形態は、例示的であることを意図され、限定的または網羅的であることは意図されていない。本明細書で特定の用語が使用されるが、それらの用語は、包括的で説明的な意味でのみ使用され、限定のためのものではない。
【符号の説明】
【0100】
10 システム
12 データ依存制約管理システム
14 古典的プロセッサ
16 古典的アルゴリズム
18 式プロセッサ
20 式コンバータ
22 ビット配列シンプリファイヤ
24 ビット配列コンバータ
26 ビット配列コンストラクタ
28 保存された次元インデックス
30 配列キャッシュ
50 データ通信パス
52 プロセッサ
54 メモリデバイス
56 不揮発性ストレージデバイス
58 入出力デバイス
60 通信デバイス
62 ディスプレイデバイス
64 コンピュータプログラム製品
66 コンピュータ可読媒体
68 コンピュータ可読記憶媒体
70 コンピュータ可読信号媒体
72 コンピュータ可読プログラム命令
100 入力WFF
102 オペランド
104 結果のWFF
106 原子WFF
108 真または偽の原子WFF
110 否定原子WFF
114 述語
116 述語リスト
118 領域
120 領域要素
124 ブール述語
126 等価述語
130 否定演算子
132 連言演算子
134 選言演算子
136 複合WFF
138 戻りWFF
140 選言標準形(DNF)
142 連言標準形(CNF)
148 真の原子WFF
150 偽の原子WFF
200 初期ビット配列
212 単純化されたビット配列
214 世界の真の配列
216 世界の偽の配列
218 ビット配列次元
220 部分配列
222 ビット要素
248 擬似コードリスティング
250 擬似コードリスティング
252 擬似コードリスティング
254 擬似コードリスティング
256 擬似コードリスティング
258 擬似コードリスティング
260 擬似コードリスティング
262 擬似コードリスティング
300 方法
306 所定のタイムアウト期間
図1
図2A
図2B
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23