古典的なアインシュタイン/ゼブラ パズルは次の形式で与えられます。
同じ道に色の違う家が5軒並んでいるとします。各家には異なる国籍の男性が住んでいます。人は皆、好きな飲み物、好きなタバコのブランドを持ち、特定の種類のペットを飼っています。
The Englishman lives in the red house.
The Swede keeps dogs.
The Dane drinks tea.
The green house is just to the left of the white one.
The owner of the green house drinks coffee.
The Pall Mall smoker keeps birds.
The owner of the yellow house smokes Dunhills.
The man in the center house drinks milk.
The Norwegian lives in the first house.
The Blend smoker has a neighbor who keeps cats.
The man who smokes Blue Masters drinks bier.
The man who keeps horses lives next to the Dunhill smoker.
The German smokes Prince.
The Norwegian lives next to the blue house.
The Blend smoker has a neighbor who drinks water.
The question to be answered is: Who keeps fish?
タスクは、パズル内の 5 人の人物がイギリス人、スウェーデン人、デンマーク人、ノルウェー人、ドイツ人、およびキープであると仮定して、これらのステートメントを一次論理の一連の閉じた式として表現することです。 (X,Y) は、X がペット Y を飼っていることを意味します。これらは後でプロローグに変換されます。
私の質問は、ステートメントを正しい方法で変換しようとしているかどうかです。今、私は次のようなものを持っています:
color(X, red) → lives(englishman, X)
keep(swede, dog)
drinks(dane, tea)
color(X, red) ∧ color(Y, green) → leftof(X, Y)
color(X, green) ∧ lives(Y, X) → drinks(Y, coffee)
smokes(X, pallmall) → keep(X, birds)
color(X, yellow) ∧ lives(Y, X) → smokes(Y, dunhills)
これは正しいですか、それとも私が試した他の方法に似ているはずです:
house(X) ∧ color(X, red) → lives(englishman, X)
dog(X) → keep(swede, X)
tea(X) → drinks(dane, X)
house(X) ∧ house(Y) ∧ color(X, green) ∧ color(Y, white) → leftof(X, Y)
house(X) ∧ color(X, green) ∧ lives(Y, X) ∧ coffee(Z) → drinks(Y, Z)
pallmalls(X) ∧ smokes(Y, X) ∧ birds(Z) → keep(Y, Z)
house(X) ∧ color(X, yellow) ∧ lives(Y, X) ∧ dunhills(Z) → smokes(Y, Z)
私も次のようなことを試みました:
lives(englishman, redhouse)
keep(swede, dogs)
drinks(dane, tea)
leftof(greenhouse, whitehouse)
lives(X, greenhouse) → drinks(X, coffee)
smokes(X, pallmall) → keep(X, birds)
lives(X, yellowhouse) → smokes(X, dunhills)
最初のものが最も正しいと思いますが、よくわかりません。また、一次論理でセンターやネイバーなどを表現する方法もわかりません。これらのどれかが正しいに近いですか?
編集:おそらく正しいと思われる解決策を思いつきました。CLOSED式と書かれていることに気づいたので、次のようにしました。
lives(englishman, red)
keep(swede, dogs)
drinks(dane, tea)
leftof(green, white)
∃X lives(X, green) ∧ drinks(X, coffee)
∃X smokes(X, pallmalls) ∧ keep(X, birds)
∃X lives(X, yellow) ∧ smokes(X, dunhills)
∃X position(X, 3) ∧ drinks(X, milk)
position(norwegian, 1)
∃X,Y smokes(X, blend) ∧ neighbor(X, Y) ∧ smokes(Y, dunhill)
∃X smokes(X, bluemasters) ∧ drinks(X, bier)
∃X,Y keep(X, horses) ∧ neighbor(X, Y) ∧ smoke(Y, dunhill)
smokes(german, prince)
∃X neighbor(norwegian, X) ∧ lives(X, blue)
∃X,Y smokes(X, blends) ∧ neighbor(X,Y) ∧ drinks(Y, water)
これは正しい方法ですか?どんな助けでも大歓迎です。