animal(X) :- bird(X).     % all birds are animals
animal(X) :- mammal(X).   % all mammals are animals
animal(X) :- snake(X).    % all snakes are animals

bird(X) :- robin(X).      % all robins are birds
bird(X) :- eagle(X).      % all eagles are birds

mammal(X) :- cat(X).      % all cats are mammals

snake(X) :- wormsnake(X). % all worm snakes are snakes

fears(X,Y) :- bird(X), snake(Y).   % birds are affraid of snakes
fears(X,Y) :- mammal(X), snake(Y). % mammals are affraid of snakes

eats(X,Y) :- eagle(X), snake(Y).   % eagles eat snakes
eats(X,Y) :- eagle(X), robin(Y).   % eagles eat robins
eats(X,Y) :- snake(X), cat(Y).     % snakes eat cats
eats(X,Y) :- snake(X), robin(Y).   % snakes eat robins
eats(X,Y) :- cat(Y), robin(Y).     % cats eat robins

robin(opus).
eagle(flier).
wormsnake(slyth).
cat(bill).
