プロローグの推論力を使って、次のような問題を解決したい。プロローグのバイナリロジック
犯行現場では、ある日、警官が3人、a、b、cを捕まえました。警察は彼らを尋問定住する場合:
i) a says I am innocent
ii) b says a is criminal
iii) c says I am innocent.
ITSは
i) Exactly one person speaks true.
ii) Exactly one criminal is there.
犯罪者であることが知られて誰?一階述語論理で問題上、モデルに :引数は、私たちが書くことができる刑事 とき C/1は述語で考えてみましょうがtrueを返す:
(not(c(a)),c(c)) ; (c(c),c(a)).
c(a); c(b); c(c).
(not(c(a)),not(c(b))) ; (not(c(a)),not(c(c))) ; (not(c(b)),not(c(c))).
プロローグでは上記の文をモデル化した後、私は照会します:
?-c(X).
it should return:
X=c.
But error I got:
"No permission to modify static procedure `(;)/2'"
あなたは任意の公式を書いていますが、PrologはHornの公式、つまり '' 'fact'''や' 'head: - goal1、goal2、goal3.'''の形式しか受け入れません。また、あなたが人物「c」と述語「c」を持っていることはかなり混乱しています。 –
はlambda.xy.x @私はNL1を記述しようとしています: は、FOLで を "正確に1つ、Bの間で、cは真話す": 「(ない(犯罪者(a))は、犯罪者(C) );(犯罪者(c)、犯罪者(a))。 およびNL2: 「a、b、cのうちのちょうど1つは、FOLにおいて であり、犯罪者(a);犯罪者(b);犯罪者(犯罪者(b)))、((犯罪者(a))ではなく、(犯罪者(c))ではない) 意味を同じにしながら構文的に正しいプロローグプログラムになるように、ホーン式でこれをどのように表現できますか? – user2976975
あなたはそれをうまく動作しない式を直接変換しようとしています(例えば、述語犯罪者(X)が1つの解決策しか持たないようにするには、 "犯罪者(X) Y、X)、犯罪者(Y)」)。@topologicalsortは、あなたの状態空間を明示的にすることによって、あなたを正しい方向に向けています。 –