5

私は次の一階述語論理式をPrologに入れる方法を見つけようとしています:

(p(0) or p(1)) and not (p(0) and p(1)) 

これは、クエリに対して次のように応答する必要があることを意味します。

?- p(0)
Yes.
?- p(1)
Yes.
?- p(0),p(1).
No. 

私は論理式を翻訳しようとしました:

(p(0) or p(1)) and not (p(0) and p(1)) <=>
(not p(0) -> p(1)) and (p(0) -> not p(1)) <=>
p(0) <-> not p(1) 

クラークスの補完(if-halfsを与えることで、すべての定義理論を論理プログラムに入れることができると述べています)を使用すると、次のようになります。

p(0) :- not p(1). 

残念ながら、この結果として得られる理論は健全であり(誤った情報を導き出すことはありません)、完全ではありません(たとえば、p(1)を導き出すことはできません)。これはクラークスの定理の結果です。

より良い解決策があるかどうか誰かが知っていますか?ありがとう!

4

4 に答える 4

3

Prologでは、とが両方とも成功した場合、p(0)失敗p(1)するp(0),p(1)ことはありません。

つまり、独自の小さな通訳を作成し、その目標とルールを表す方法を考案し、その中で次のような質問をする必要があります。

?- is_true( (p(0),p(1)) ).
于 2012-09-28T20:46:50.723 に答える
3

これは微妙ですが、実際には間違っています。p(0)が含まれることを期待するべきではありません。含意は、p(0)が理論のすべてのモデルで真であることを要求します。しかし、この理論には2つのモデル{p(1)}と{p(0)}があります。

これは、文献で広く研究されています。あなたが正しく指摘したように、クラークの完成はこれらのケースを処理するのに失敗します。さらに悪いことに、SLDNFは次の無限再帰に分類されます。

p(0) :- not p(1). 
p(1) :- not p(0).

これはあなたの理論の明確な条項への最も適切な翻訳です。

さまざまなセマンティクスの定義についてのポインタは割愛しますが、迅速で実用的な解決策が必要な場合は、回答セットプログラミングに切り替えることをお勧めします。

これが私のお気に入りのソルバーへのリンクです(ガイドも素晴らしく、自己完結型です): http ://www.cs.uni-potsdam.de/clasp/

楽しみ!

于 2012-10-01T15:54:16.697 に答える
2

「ターゲット」ロジックで名前付き用語の導入が許可されている場合は、ダミーのt/0を実装できます。

t :- p(0), p(1), !, fail.
t :- p(0).
t :- p(1).

両方ある場合

p(0).
p(1).

t/0は失敗します。

于 2012-09-28T14:14:26.360 に答える
2

論理的には、すでに命題論理では、(A v B)|-Aには従わず、(A v B)|-Bにも従いません。〜(A&B)を追加しても、状況は変わりません。

問題は、クラークの完了または他の何かがデフォルト情報を追加できるかどうかです。これにより、最終的にT|-AおよびT|-Bが得られます。しかし、論理的には、T |-A&Bが得られます。

ですから、通常の設定では、あなたがやりたいことは不可能だと思います。

さよなら

PS:通常ではない設定は、たとえば、懐疑的な結果の関係ではなく、信頼できる結果の関係を使用することです。懐疑的な結果の関係は次のとおりです。

T |- A iff forall M (if M |- T then M |- A)

信憑性のある結果の関係は次のとおりです。

T |~ A iff exists M (M |- T and M |- A)

T |〜AとT |〜Bを持つことは可能ですが、T |〜A&Bを持つことはできません。デフォルト情報のないあなたの(A v B)&〜(A&B)はすでにそのような理論です。

PSS:Prologsの基盤は懐疑的な推論ですが、Prologシステムを信頼できる推論のために悪用する方法はいくつかあります。秘訣は、アイデンティティT |〜A =〜(T |-〜A)を使用することです。

しかし、これをあなたの例に適用する前に、Prologで論理和を表す問題を解決する必要があります。いくつかの論理和は、次のアイデンティティと仮説的な推論によって実現できます。

(A v B -> C) == (A -> C) & (B -> C)
于 2012-09-29T18:20:13.880 に答える