4

ここに画像の説明を入力

for each私にはあまり意味が分からないので、ループの説明を得ることができますか? 特に、STANDARDIZE-APART() と最後の 2 行目は何をするのでしょうか?

これはFOL_BC_ASK(KB,[p1...,pn|REST(goals)],COMPOSE(@',@)) U ans

4

1 に答える 1

7

r は知識ベースの FOL 文です。

特に、FOL 文には量指定子と変数が含まれる場合があります。

どの FOL 文にも、このアルゴリズムが作用する CNF (Conjunctive Normal Form) (ホーン節も同様) のようなさまざまな形式の単純化された形式があります。CNF スタイルの簡略化は、特定の限定された一連の演算子に制限され、通常、元のステートメントと比較して拡張されたステートメントになります (場合によっては大幅に長くなります)。CNF は量指定子を使用しませんが、変数は使用できます。

数量詞は、「for-all」(普遍的) と「there-exists」(存在的) の演算子です。各量指定子は、変数 (または変数のリスト) と、導入された (リスト内の) 変数が量化される単一の (サブ) ステートメントを取ります。これらの変数は、(量化された式の) 1 つのサブ ステートメントのスコープに対してだけですが、バインドされていると言われます。したがって、量指定子は暗黙のうちに新しいスコープ (変数の) を導入します

CNF は、明示的に表現された量指定子を許可しておらず、変数の複数または個別のスコープを提供していません! したがって、量指定子を削除するだけでなく、変数のスコープも削除する (または単一のスコープに折りたたむ) 必要があります。(スコープは非常に簡単に削除できるため、最初にこれを行います。)

単一のステートメントに複数の量指定子が含まれている場合、FOL では、同じ変数名が互いに素なスコープを持つ量指定子で再利用されることは完全に許容されます。したがって、次の単一の (ただし複合的な) ステートメントは、FOL で受け入れられるものです。

(there-exists(x) (Father(x,Joe))) AND (there-exists(x) (Mother(x,Joe)))

つまり、ジョーの父親である x と、ジョーの母親である x (別の x) がいるということです。

上記のステートメントでは、変数 x が 2 回導入されていますが、その 2 つの異なる用途は実際には無関係です! ただし、x は 2 回使用されるため、このステートメントを読み取って解釈するか、操作して変換するときは、2 つの別個のスコープを認識しておく必要があります (そうしないと、変換が同等にならないことがあります)。これは、一般的にあらゆる FOL ステートメントに当てはまります。つまり、一般的な FOL ステートメントの解釈と操作の目的でスコープを認識する必要があることを意味します。

次のステートメントは、論理的な観点からは同等ですが、x を 2 回使用していません。

(there-exists(x) (Father(x,Joe))) AND (there-exists(y) (Mother(y,Joe)))

(変換された) ステートメントが重複する変数を持たないことを保証する場合 (つまり、互いに素なスコープで同じ変数名が 2 回使用されないこと)、数量化の 2 つの使用によって導入された 2 つの別個のスコープを考慮する必要がなくなります。そのようなステートメントの変数のスコープは 1 つだけであると効果的に考えることができます。これが STANDARDIZE-APART の分離性の本質です。スコープ間の変数が重複しないようにすることで (それぞれに一意の名前を付けることで)、1 つのステートメント内で複数のスコープを個別に考慮する必要がなくなります (複数の数量詞)。

(2 つのプロシージャ、メソッド、またはステートメント ブロックを 1 つにマージした場合、Java で同じことを行います。競合しないように、選択した変数名がそれらの間で一意であることを確認する必要があります。)

STANDARIZE-APART は CNF への変換を行っています。これには、複数のスコープを 1 つに折りたたむ必要があり、量指定子を削除する必要があります (また、"and"、"or"、"いいえ")。

次のように、skolem 関数を優先して存在量指定子が削除されます。2 次 (および高次) ロジックでは、関数を量化できます (たとえば、f() ... のような there-exists(f))。ただし、1 次ロジックでは、関数を定量化することはできません。しかし、FOL では関数を定量化することはできませんが、関数を使用することはできます。FOLでは、関数は単に存在すると想定されています. (CNF および horn-clause フォームも、関数の仮定された存在を尊重します。) スコーレム化は、存在量化された変数 (サブステートメントに現れる場所) が、新しく作成され、適切にパラメーター化された関数 (そのような存在する量指定子の置換ごとに新しい関数が作成され、指定されたパラメーターは、他の囲んでいる量指定子のコンテキストと関係がある必要があります)。この新しく導入された関数は、存在量指定子を必要とせずに存在すると単純に想定されます。存在量化された変数の使用を (新しい関数を優先して) 削除したので、存在量化演算子自体を省略して、変更された sub ステートメントだけを保持することができます。

全称量指定子はステートメントの最も外側 (スコープ) に昇格され、単純に削除できます (1) スコープが折りたたまれているため、(2) 存在する量指定子が存在しないため (それらはスコーレム化によって既に削除されているため)、 (3) さまざまな CNF/ホーン形式では、すべての変数が普遍的な量化を持つと単純に想定されているためです。


統合とは、同じ関係 R に関する 2 つの (そうでなければ別々の) 情報を組み合わせた場合にわかっていることを検討する構成手法です。情報の断片は、関係に対する変数パラメーターと定数パラメーターの形式を取ります。標準化とは異なり、統一は常に成功するとは限りません。つまり、常により多くの情報が明らかになるとは限りません。


最後の行は、バック チェーン検索の次のレベルのバック ワード チェーンの再帰的な呼び出しです。ここでは、対処された 1 つの目標 (たとえば、CNF ステートメント) が結果のサブ目標に置き換えられます。対処するということは、統合が成功したことを意味し、統合が成功したということは、検索エンジンの状態が少なくとも名目上は進歩したことを意味し、この進歩はさらなる検索調査 (別のレベル) に値します。

于 2012-10-14T16:46:16.300 に答える