[net.lang.prolog] Zebra correction

bts (04/11/83)

	From: PEREIRA@SRI-AI.ARPA
	Subject: Zebra puzzle fix

Yes, I'm afraid there was one goal missing in my translation of
condition 14, which should be

% 14. The Norwegian lives next to the blue house.

condition(14,[C1,C2]) :-
   man_of(C1,norwegian), position_of(C1,P1),
   house_of(C2,blue), position_of(C2,P2), next_to(P1,P2).
args(14,[_,_]).

However, when I used this revised condition, there were no solutions!
A quick investigation revealed that the culprits were conditions 10
and 11:

% 10. The man who smokes Chesterfields lives in the house next to the
%     man with the fox.

condition(10,[C1,C2]) :-
   smoke_of(C1,chesterfields), position_of(C1,P1),
   pet_of(C2,fox), position_of(C2,P2), single_next_to(P1,P2).
args(10,[_,_]).

% 11. Kools are smoked in the house next to the house where the horse
%    is kept.

condition(11,[C1,C2]) :-
   smoke_of(C1,kools), position_of(C1,P1),
   pet_of(C2,horse), position_of(C2,P2), single_next_to(P1,P2).
args(11,[_,_]).

My translation (correctly) incorporates the pressuposition associated
with the singular article "the", that "the house next to X"
pressuposes there is only one house next to X, and therefore X is
either the leftmost or the rightmost house. To get a solution, I had
to relax this, replacing 'single_next_to' by 'next_to'. Then I got the
result

Zebra = japanese,
Water = norwegian,
All = [c(englishman,red,snails,milk,winston,middle),
	c(japanese,green,zebra,coffee,parliaments,rightmost),
	c(ukranian,blue,horse,tea,chesterfields,left),
	c(spaniard,ivory,dog,orange_juice,lucky_strike,right),
	c(norwegian,yellow,fox,water,kools,leftmost)]

My conclusion is that the problem statement is incorrect, because
it uses the definite article "the" where it should use an indefinite
article.

Fernando

-------