統一の(実用的な)アプリケーションは何ですか?実世界のどこで実際に使われているのでしょうか?
それが実際に何であるか、そしてなぜそれが人工知能の一部と見なされるのかについての全体的な考えを理解することができませんでした。
統一の(実用的な)アプリケーションは何ですか?実世界のどこで実際に使われているのでしょうか?
それが実際に何であるか、そしてなぜそれが人工知能の一部と見なされるのかについての全体的な考えを理解することができませんでした。
統合は本質的に置換のプロセスです。「双方向マッチング」と呼ばれるのを見たことがあります。
Prolog、他の論理プログラミング言語、および書き換え論理に直接基づく言語(Maude、Elanなど)では、自由な(論理)変数が用語/値にバインドされるメカニズムです。Concurrent Prologでは、これらの変数は通信チャネルとして解釈されます。
IMO、それを理解するためのより良い方法は、数学からのいくつかの例を使用することです(たとえば、自動定理証明者の研究、AIのサブフィールドのコンテキストでは、統合は基本的な主要なメカニズムでした;型推論アルゴリズムでの別の使用)。以下の例は、数式処理システム(CAS)のコンテキストから取られています。
最初の例:
セットQと2つの二項演算*および+が与えられた場合、*は左になります-次の場合は+に分配されます:
X * (Y + Z) = (X * Y) + (X * Z) |1|
これは書き換えルールです(書き換えルールのセットは書き換えシステムです)。
この書き換えルールを特定のケースに適用する場合は、次のように言います。
a * (1 + b) |2|
この項|2|を(統合アルゴリズムを介して)| 1 |の左側(lhs)で統合します。そして、この(意図的に些細な)置換(最も一般的なユニファイア、mgu)があります:
{X/a, Y/1, Z/b} |3|
ここで、|3|を適用します | 1 |の右側(rhs )に、最後に次のようになります。
(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|のlhsを|4|のlhsに統合する)、したがって、このmguがあります:
{X/e, Y/(x+1), Z/(x-1)} |6|
Xとxは2つの異なる変数であることに注意してください。ここでは、単純な値や変数ではなく、 2つの複合項(x + 1)と(x-1)に一致する2つの変数XとYがあります。
このmgu、| 6 |を、|4|のrhsに適用します。次に、これを|5|に戻します。だから私たちは持っています:
log(e,(x+1)*(x-1)) = k |7|
等々。
(私が間違いを犯さなかったことを願っています。そうしないと、新生児をさらに混乱させる可能性があります。)
統合は型推論の重要なメカニズムです。実際には、このコンテキストでの統合により、指の摩耗が大幅に減少します。
たとえば、Prologは統合を使用して、ルールを満たす変数の値を検索します。例については、この説明を参照してください。他の人との経験はありませんが、一般的に論理プログラミング言語の典型的な手法だと思います。
統合はパターンマッチングのようなもので、2つの構造をこすり合わせて、一方の変数がもう一方の値と一致するようにします。
最も単純な形式の統合は、通常の言語で関数を呼び出すたびに発生します。呼び出し元には引数があり、呼び出し先にはパラメーターがあります。パラメータは引数に「バインド」されており、関数のインスタンス化を生成します。
統一のもう1つの単純な形式は、一致に正規表現を使用する場合です。たとえば、コマンドプロンプトで、dir x*y*.z*
すべてではないが一部のファイル名に一致すると言う場合があります。
人工知能は、推論エンジンを利用して、通常はロジック内のステートメントの形式で、知識のコーパスから推論をシミュレートしようとするのが好きです。愚かな例を選ぶために、あなたはのように「すべての人が死ぬ」ことを「知っている」かもしれませんforall(x)(man(x) implies mortal(x))
。次に、「サムは死ぬ」という質問をmortal(Sam)?
すると、それをルールと統合して、「サムは男ですか」という新しい質問を取得できます。man(Sam)?
お役に立てば幸いです。