私は次の一階述語論理式を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)を導き出すことはできません)。これはクラークスの定理の結果です。
より良い解決策があるかどうか誰かが知っていますか?ありがとう!