-
18-09-2019 - |
質問
(実際の) 応用は何ですか? 統一?現実世界のどこで実際に使用されているのでしょうか?
私は、それが実際に何についてのものなのか、そしてなぜそれが人工知能の一部として考えられているのかという全体的な考えを理解できませんでした。
解決
統一とは本質的に次のプロセスです 置換. 。「双方向マッチング」と呼ばれるものを見たことがあります。
Prolog、他の論理プログラミング言語、および書き換えロジックに直接基づく言語 (モード, エラン, 、etc...) は、自由 (論理) 変数が用語/値にバインドされるメカニズムです。Concurrent Prolog では、これらの変数は通信チャネルとして解釈されます。
IMO、これを理解するより良い方法は、数学の例をいくつか挙げることです(たとえば、AI のサブ分野である自動定理証明研究の文脈では、統合は基本的な重要なメカニズムでした、またはそうです)。での別の使用法 型推論アルゴリズム)。以下の例は、以下のコンテキストから抜粋したものです。 計算機代数システム (CAS):
最初の例:
集合 Q とそれに対する 2 つの二項演算 * と + が与えられた場合、次の場合、 * は + に対して左分配です。
X * (Y + Z) = (X * Y) + (X * Z) |1|
これは 書き換えルール (一連の書き換えルールは 書き換えシステム).
この書き換えルールを特定のケースに適用したい場合は、次のようにします。
a * (1 + b) |2|
私たちは 統一する (統合アルゴリズムを介して) この項 |2| は、 左側 (左)of | 1 |そして、私たちはこの(意図的に些細な)代替を持っています( 最も一般的なユニファイア, むぐ):
{X/a, Y/1, Z/b} |3|
ここで、| 3 |を適用しますに 右側 (右肩|1| の)、最終的には次のようになります。
(a * 1) + (a * b)
これは単純でしたが、統合によって何ができるかを理解するために、もう少し複雑な例を示します。
2 番目の例:
この書き換えルールを考慮すると、次のようになります。
log(X,Y) + log(X,Z) => log(X,Y*Z) |4|
それを次の方程式に当てはめます。
log(e,(x+1)) + log(e,(x-1)) = k |5|
(左 | 5 |統一します 左 |4|) なので、これが得られます むぐ:
{X/e, Y/(x+1), Z/(x-1)} |6|
X と x は 2 つの異なる変数であることに注意してください。ここでは、2 つの変数 X と Y があり、これらは 2 つに一致します。 複合用語, 、(x+1) および (x-1) であり、単純な値や変数ではありません。
これを応用してみます むぐ, 、 |6| 、へ 右肩 | 4 |次に、これを| 5 |に戻します。したがって、次のようになります。
log(e,(x+1)*(x-1)) = k |7|
等々。
(私が間違いを犯していないことを祈ります。そうしないと、初心者がさらに混乱する可能性があります。)
他のヒント
統一は型推論するにおける重要なメカニズムです。事実上、この文脈での統一が大幅にあなたの指の摩耗を軽減します。
プロローグに、例えば、ルールを満たす変数の値を見つけるために、統一を使用しています - 参照。私は、任意の他の人と経験を持っていないけれども、それは、一般的に論理的なプログラミング言語で、一般的な手法です期待しています。
統一が1の変数は、他の値と一致することが許可されていますが、2つの構造体をこするパターンマッチング、のようなものです。
あなたは、通常の言語で関数を呼び出すたび、統一の最も単純な形式で行われます。呼び出し側は引数を持ち、呼び出し先は、パラメータがあります。パラメータは、引数「にバインド」され、そしてそれは、関数のインスタンス化を生成します。
統一の別の簡単なフォームでは、マッチングのための正規表現を使用する場合は、コマンドプロンプトで、たとえばあなたはすべてのファイル名一部と一致しませんがdir x*y*.z*
を言うかもしれないです。
人工知能は、通常、ロジック内の文の形で、知識のコーパスから推論をシミュレートしようとする、推論エンジンを利用するのが好き。愚かな例を選ぶには、forall(x)(man(x) implies mortal(x))
のように、「すべての人が死を免れている」ことを「知っている」かもしれません。あなたが質問をするならば、mortal(Sam)?
として、あなたは新しい質問を取得するためのルールとそれを統一することができ、「サム死ぬべきである」「サムは男です」man(Sam)?
希望に役立ちます。