3

Prologではどんな文章が表現できないのかしら?私は一般的な論理プログラミングを研究してきましたが、一階述語論理は、Prologが基づいている明確な論理(ホーン節)と比較してより表現力があることを学びました。頭を動かすのは難しいテーマです。

したがって、たとえば、次の文を表現できます。

For all cars, there does not exist at least 1 car without an engine

もしそうなら、表現できない他の文章はありますか?そうでない場合、なぜですか?

4

4 に答える 4

4

Prolog を使用すると、否定 ( ) を使用して文を簡単に表現できます\+

例えば:

car(bmw).
car(honda).
...
car(toyota).

engine(bmw, dohv).
engine(toyota, wenkel).

no_car_without_engine:-
  \+(
    car(Car),
    \+(engine(Car, _))
  ).

no_car_without_engine/0すべての車にエンジンがあれば手順は成功し、それ以外の場合は失敗します。

于 2012-09-11T15:32:01.303 に答える
3

Prologで最も問題のある定義は、左再帰的な定義です。のような定義

g(X) :- g(A), r(A,X).

Prologの検索アルゴリズムが原因で、失敗する可能性が最も高くなります。これは、単純な深さ優先探索であり、無限大以上まで実行されます。

ただし、ホーン節の一般的な問題は、ホーン節が最大で1つの正の要素を持つように定義されていることです。そうは言っても、これらの条件に限定された条項を見つけることができます。たとえば、次のようになります。

A ∨ B

結果として、のような事実∀ X: cat(X) ∨ dog(X)を直接表現することはできません。それらを回避する方法があり、そのようなステートメントを許可する方法があります(以下を参照)。

読み物:

  • これらのスライド(p。3)は、Prologを使用して作成できない文の例を示しています。

  • この作品(p。10)では、ホーン節とその意味についても説明し、「無効な」ホーン節を許可する方法を紹介しています。

于 2012-09-11T20:26:40.577 に答える
2

Prolog はプログラミング言語であり、自然言語インターフェースではありません。

あなたが示した文は非常に複雑な方法で表現されているため、理解するのに苦労しました. 事実上、理解できる方法でそれを表現するために苦労したグスブロに感謝しなければなりません. しかし、彼はプログラミング言語が自然言語に適用されたときに生じる知識表現の問題、または一次論理の単純な否定さえも完全に無視しましこれらの問題は非常に緊急であるため、選択された言語はしばしば「重要ではない」と認識されます。

プログラミングに関して言えば、Prolog には O(1) (一定時間) 線形データ構造 (つまり配列) にアクセスする機能がありません。たとえば、O(1) の配列要素へのアクセスを必要とする QuickSort は、効率的な方法で実装できません。

しかし、それにもかかわらず、チューリング完全な言語であることには価値があります。そして、Prolog で表現できないステートメントはありません

于 2012-09-11T16:11:34.920 に答える
0

ですから、一階論理で表現できる節論理で表現できない文を探しています。

厳密に言えば、節論理が FOL の制限であるという理由だけで、たくさんあります。ですから、それは定義上真実です。ただし、できることは、FOL 文の任意のセットを、等価ではないが優れた特性を持つロジック プログラムに書き直すことができるということです。したがって、たとえば、pが理論の結果であるかどうかを知りたい場合は、変換された論理プログラムを同等に使用できます。

他の回答に関するいくつかのメモ:

  1. プロローグの否定 (\+) は失敗としての否定であり、一次論理否定ではありません
  2. Prolog はプログラミング言語です。正しく指摘されているように、代わりに節論理について話すべきです。
  3. 左再帰は問題ありません。別の選択ルールやその他の推論メカニズムを簡単に使用できます。
于 2012-09-21T10:02:44.167 に答える