montrealer(jane). smart(jane). nerd(jane). drinks(jane,coffee). montrealer(bob). nerd(bob). drinks(bob,sprite). owns(teapot,ted). reader(ted). reader(mary). reader(helen). fatherof(mary,ted). drinks(helen,sprite). hasdrug(tea,caffiene). hasdrug(tea,tannin). hasdrug(tea,theobromine). hasdrug(coffee,caffiene). hasdrug(coffee,oil). hasdrug(quat,foo). hasdrug(sprite,sugar). stimulant(caffiene). % stimulant(theobromine). goodstudent(X) :- awakeinclass(X), csstudent(X). csstudent(X) :- smart(X), (adventurous(X) ; sensible(X)). adventurous(X) :- ( montrealer(X) ; rockclimber(X) ). awakeinclass(X) :- drinks(X,Y) , hasdrug(Y,Z), stimulant(Z). smart(X) :- not(rockclimber(X)), reader(X). drinks(X,coffee) :- owns(espressomachine,X). drinks(X,tea) :- owns(teapot,X). owns(What,Person) :- owns(What,fatherof(Person,Father)).