2

真実維持システム (TMS) は、特定の知識ベースに特定の結論をもたらす推論の正当化を格納します。

良い例は次のようになります (これはプロローグではありません)。

∀ X good_student(X) ∧ M study_hard(X) → study_hard (X)
∀ Y party_person(Y)  → ¬study_hard (Y)
good_student(pat)

これを実装する方法がまったくわかりません。モーダル演算子 M (と一致する) を具体的に表す方法がわかりません。明らかに、述語 good_student/1、study_hard/1、および party_person/1 を作成できます。study_hard/1 から good_student および ¬study_hard へのリンクも、私が迷っているところです。

これは私の質問につながります:プロローグでこのようなものを実装する方法を知っている人はいますか?

前もって感謝します。

4

1 に答える 1

1

Prolog が First Order ロジックのサブセットをサポートしていることはご存知でしょう。任意の論理文は使用できません。句でさえも、明確な句は使用できません。そのプログラムでは、サポートされていないものが 2 つあります。句の先頭の否定とモーダル演算子です。Mが私が理解しているものである場合、それはあなたのコメントからのものであり、それは失敗としての否定です。\+Prolog では、デフォルトの否定 (または)として無料で使用できますnot。頭の中で否定するには、次の 2 つの方法があります。

  1. 論理変換を使用して、明確な句で構成される論理的に等価な理論を導き出すことを試みることができます。私は今これを試すのが面倒ですが、試してみてください。
  2. 頭の中で否定を使いたいと思ったのはあなたが初めてではありません。それに対処するさまざまなフレームワークがあります。Abductive Logic Programming システムは、整合性制約を処理でき、その否定と、他のモーダル演算子の使用を無料で提供できます。さらに良いことに、Answer Set Programming を試してみてください。多くの ASP ソルバーがプログラムを処理できます。

幸運を。

于 2012-11-21T16:45:04.367 に答える