in_room(banana).
in_room(chair).
in_room(monkey).
dexterous(monkey).
tall(chair).
~(close_to(banana,floor)).
can_move(monkey,chair,banana).
can_climb(monkey,chair).

can_reach(X,Y):-dexterous(X), close_to(X,Y).

close_to(X, banana):-get_on(X,Y), under(Y,banana), tall(Y).
close_to(Z,floor):-in_room(X),in_room(Y),in_room(Z),can_move(X,Y,Z).
under(Y,Z):-in_room(X), in_room(Y), in_room(Z), can_move(X,Y,Z).

get_on(X,Y):-can_climb(X,Y).




