意外とすっきりした解答が得られたので。
意外とすっきりした解答が得られたので。
/*帽子は何色?論理的思考力を持つ3人の正直者 a, b, c に、5つの帽子(赤×3, 白×2)のうち3つを1つずつ被せる。どの人も、他2人の帽子の色を知っている(∵見えている)が、自身の帽子の色は知らない。出題者「あなたの帽子の色は?」a「……わかりません。」出題者「あなたの帽子の色は?」b「……わかりません。」出題者「あなたの帽子の色は?」――さて、c の帽子の色は?% 出展('数学ガール ゲーデルの不完全性定理', page: 16).% (同値な問題だが、文字数圧縮のため問題文は書き直した。)*/insert(E, Set, [E|Set]).insert(E, [X|Set0], [X|Set]) :- insert(E, Set0, Set).部分集合([], X).部分集合([H|L], R) :- insert(H, R0, R), 部分集合(L, R0).不確定(X, Cond) :- % 条件 Cond を満たす変数 X は一意に存在しないsetof(X, Cond, L), \+(length(L, 1)).?- _hats = [赤, 赤, 赤, 白, 白], % 簡単のためA = 赤, B = 赤, (C = 赤 ; C = 白),% 部分集合([A, B, C], _hats),% a には自身の帽子の色 ASelf が確定できない不確定(ASelf, 部分集合([ASelf, B, C], _hats)),% a には自身の帽子の色 ASelf が確定できないことが分かっていても、% b には自身の帽子の色 BSelf が確定できない不確定(BSelf, (部分集合([A, BSelf, C], _hats),不確定(ASelf2, 部分集合([ASelf2, BSelf, C], _hats)))).% A = 赤, B = 赤, C = 赤