人間にとって明らかな非常に単純なステートメントを証明するためにprover9を使用しようとしましたが、幸いなことにそれを機能させることはできません。次のシナリオがあります。
% Three boys - Dan, Louise and Tom have t-shirts in three diffrent colors
% (white, yellow and green) and with three different patterns: (giraffe, camel and
% panda). Dan has the t-shirt with giraffe, Louise has the yelow one and Tom has
% not the white t-shirt. The boy with the yellow one has not the one with camel
% pattern. Task:
% Represent exercise with classical boolean statements and using
% resolution algorithm answer the question: "who has the t-shirt with the camel pattern?"
formulas(sos).
% (pattern(Dan, Giraffe) & pattern(Louise, Panda) & pattern(Tom, Camel))
% | (pattern(Dan, Giraffe) & pattern(Louise, Camel) & pattern(Tom, Panda))
% | (pattern(Dan, Panda) & pattern(Louise,Giraffe) & pattern(Tom, Camel))
% | (pattern(Dan, Panda) & pattern(Louise, Camel) & pattern(Tom, Giraffe))
% | (pattern(Dan, Camel) & pattern(Louise, Panda) & pattern(Tom, Giraffe))
% | (pattern(Dan, Camel) & pattern(Louise, Giraffe) & pattern(Tom, Panda)).
% This does not works, unfortunately
(pattern(Dan, Giraffe) & pattern(Louise, Panda) & pattern(Tom, Camel))
| (pattern(Dan, Giraffe) & pattern(Louise, Camel) & pattern(Tom, Panda)).
% This works
(color(Dan, White) & color(Louise, Yellow) & color(Tom, Green))
| (color(Dan, White) & color(Louise, Green) & color(Tom, Yellow))
| (color(Dan, Yellow) & color(Louise,White) & color(Tom, Green))
| (color(Dan, Yellow) & color(Louise, Green) & color(Tom, White))
| (color(Dan, Green) & color(Louise, Yellow) & color(Tom, White))
| (color(Dan, Green) & color(Louise, White) & color(Tom, Yellow)).
pattern(Dan, Giraffe).
color(Louise, Yellow).
-color(Tom,White).
all x (color(x,Yellow) -> -pattern(x,Camel)).
end_of_list.
formulas(goals).
pattern(Tom,Camel). % Our solution
% pattern(Louise, Panda).
end_of_list.
- そして 2. 式は、制約なしですべての可能性を書き留めることです - 単純な順列 3! (ダンがキリンを飼っていることを知っていても、2つの可能性を書き留めることができます). 追加の or ステートメントを追加して問題を修正するべきではありませんが、既存の証明を遮断するべきではありませんが、現在の解決策にはなりません。3. ステートメント (pattern(Dan, Girrafe) は事実上、不必要な可能性を切り捨てます (それなしでは、どのプログラムが正しい解を見つけます)。
私がprover9をうまく使っていないのか、単に私の問題(または古典的なブールステートメントでの表現)で何かを見落としているのか、私にはわかりません。何が間違っている可能性がありますか?