%%% This is the zebra problem. assign(support_list,[f]). axiom_list(sprfn). %%% if person(P) then lives(P,1);lives(P,2);lives(P,3);lives(P,4);lives(P,5). lives(P,1) :- person(P), not(lives(P,2)), not(lives(P,3)), not(lives(P,4)), not(lives(P,5)). %%% uniqueness. false :- house(H), lives(english,H), lives(spaniard,H). false :- house(H), lives(english,H), lives(norwegian,H). false :- house(H), lives(english,H), lives(ukranian,H). false :- house(H), lives(english,H), lives(japanese,H). false :- house(H), lives(spaniard,H), lives(norwegian,H). false :- house(H), lives(spaniard,H), lives(ukranian,H). false :- house(H), lives(spaniard,H), lives(japanese,H). false :- house(H), lives(norwegian,H), lives(ukranian,H). false :- house(H), lives(norwegian,H), lives(japanese,H). false :- house(H), lives(ukranian,H), lives(japanese,H). %%% if person(P) then drinks(P,orange);drinks(P,coffee);drinks(P,tea);drinks(P,milk);drinks(P,water). drinks(P,orange) :- person(P), not(drinks(P,coffee)), not(drinks(P,tea)), not(drinks(P,milk)), not(drinks(P,water)). %%% uniqueness. false :- drink(H),drinks(english,H),drinks(spaniard,H). false :- drink(H),drinks(english,H),drinks(norwegian,H). false :- drink(H),drinks(english,H),drinks(ukranian,H). false :- drink(H),drinks(english,H),drinks(japanese,H). false :- drink(H),drinks(spaniard,H),drinks(norwegian,H). false :- drink(H),drinks(spaniard,H),drinks(ukranian,H). false :- drink(H),drinks(spaniard,H),drinks(japanese,H). false :- drink(H),drinks(norwegian,H),drinks(ukranian,H). false :- drink(H),drinks(norwegian,H),drinks(japanese,H). false :- drink(H),drinks(ukranian,H),drinks(japanese,H). %%% if person(P) then smokes(P,kools);smokes(P,chest);smokes(P,gold);smokes(P,lucky);smokes(P,parl). smokes(P,kools) :- person(P), not(smokes(P,chest)), not(smokes(P,gold)), not(smokes(P,lucky)), not(smokes(P,parl)). %%% uniqueness. false :- cigarette(H),smokes(english,H),smokes(spaniard,H). false :- cigarette(H),smokes(english,H),smokes(norwegian,H). false :- cigarette(H),smokes(english,H),smokes(ukranian,H). false :- cigarette(H),smokes(english,H),smokes(japanese,H). false :- cigarette(H),smokes(spaniard,H),smokes(norwegian,H). false :- cigarette(H),smokes(spaniard,H),smokes(ukranian,H). false :- cigarette(H),smokes(spaniard,H),smokes(japanese,H). false :- cigarette(H),smokes(norwegian,H),smokes(ukranian,H). false :- cigarette(H),smokes(norwegian,H),smokes(japanese,H). false :- cigarette(H),smokes(ukranian,H),smokes(japanese,H). %%% if person(P) then owns(P,dog);owns(P,snails);owns(P,horse);owns(P,fox);owns(P,zebra). owns(P,dog) :- person(P), not(owns(P,snails)), not(owns(P,horse)), not(owns(P,fox)), not(owns(P,zebra)). %%% uniqueness. false :- animal(H),owns(english,H),owns(spaniard,H). false :- animal(H),owns(english,H),owns(norwegian,H). false :- animal(H),owns(english,H),owns(ukranian,H). false :- animal(H),owns(english,H),owns(japanese,H). false :- animal(H),owns(spaniard,H),owns(norwegian,H). false :- animal(H),owns(spaniard,H),owns(ukranian,H). false :- animal(H),owns(spaniard,H),owns(japanese,H). false :- animal(H),owns(norwegian,H),owns(ukranian,H). false :- animal(H),owns(norwegian,H),owns(japanese,H). false :- animal(H),owns(ukranian,H),owns(japanese,H). %%% if house(H) then color(H,red);color(H,yellow);color(H,blue);color(H,green);color(H,ivory). color(H,red) :- house(H), not(color(H,yellow)), not(color(H,blue)), not(color(H,green)), not(color(H,ivory)). %%% uniqueness. false :- color(H),color(1,H),color(2,H). false :- color(H),color(1,H),color(3,H). false :- color(H),color(1,H),color(4,H). false :- color(H),color(1,H),color(5,H). false :- color(H),color(2,H),color(3,H). false :- color(H),color(2,H),color(4,H). false :- color(H),color(2,H),color(5,H). false :- color(H),color(3,H),color(4,H). false :- color(H),color(3,H),color(5,H). false :- color(H),color(4,H),color(5,H). person(english). person(spaniard). person(norwegian). person(ukranian). person(japanese). house(1). house(2). house(3). house(4). house(5). color(red). color(green). color(yellow). color(ivory). color(blue). cigarette(parl). cigarette(lucky). cigarette(kools). cigarette(gold). cigarette(chest). drink(tea). drink(orange). drink(water). drink(milk). drink(coffee). animal(dog). animal(zebra). animal(snails). animal(horse). animal(fox). %%% Constraints. %%% the englishman lives in the red house. color(H,red) :- house(H), lives(english,H). %%% the spaniard owns dog. owns(spaniard,dog). %%% the norwegian lives in the first house. lives(norwegian,1). %%% kools are smoked in the yellow house. color(H,yellow) :- person(P), smokes(P,kools), house(H), lives(P,H). %%% chesterfields are smoked next to where the fox is kept. next(H1,H2) :- person(P1),owns(P1,fox),house(H1),lives(P1,H1),person(P2),smokes(P2,chest),house(H2),lives(P2,H2). %%% the norwegian lives next to the blue house. color(H2,blue) :- house(H1),lives(norwegian,H1),house(H2),next(H1,H2). %%% the old gold smoker owns snails. owns(P,snails) :- person(P),smokes(P,gold). %%% the lucky strike smoker drinks orange juice. drinks(P,orange) :- person(P),smokes(P,lucky). %%% the ukranian drinks tea. drinks(ukranian,tea). %%% the japanese smokes parliaments. smokes(japanese,parl). %%% the kools smoker lives next to where the horse is kept. next(H1,H2) :- person(P1),smokes(P1,kools),house(H1),lives(P1,H1),person(P2),owns(P2,horse),house(H2),lives(P2,H2). %%% coffee is drunk in the green house. color(H,green) :- person(P),drinks(P,coffee),house(H),lives(P,H). %%% the green house is to the immediate right of the ivory house. left(H2,H1) :- house(H1),color(H1,green),house(H2),color(H2,ivory). %%% milk is drunk in the middle house. lives(P,3) :- person(P),drinks(P,milk). %%% axioms for next. next(X,Y) :- left(X,Y). next(X,Y) :- left(Y,X). left(X,Y) :- next(X,Y),not(left(Y,X)). left(1,2). left(2,3). left(3,4). left(4,5). false :- left(1,1). false :- left(2,1). false :- left(3,1). false :- left(4,1). false :- left(5,1). false :- left(2,2). false :- left(3,2). false :- left(4,2). false :- left(5,2). false :- left(1,3). false :- left(3,3). false :- left(4,3). false :- left(5,3). false :- left(1,4). false :- left(2,4). false :- left(4,4). false :- left(5,4). false :- left(1,5). false :- left(2,5). false :- left(3,5). false :- left(5,5). %%% negation of goal. false :- drinks(norwegian,water), drinks(ukranian,tea), drinks(japanese,coffee), drinks(english,milk), drinks(spaniard,orange), owns(norwegian,fox), owns(ukranian,horse), owns(japanese,zebra), owns(english,snails), owns(spaniard,dog), smokes(norwegian,kools), smokes(ukranian,chest), smokes(japanese,parl), smokes(english,gold), smokes(spaniard,lucky), lives(norwegian,1), lives(ukranian,2), lives(japanese,5), lives(english,3), lives(spaniard,4), color(1,yellow), color(2,blue), color(3,red), color(4,ivory), color(5,green). end. end_of_input.