% People: april, bethany, colin, dave, elsie
% Fruits: apple, banana, cherry, durian
% Facts vary based on functions being tested :P
person(april).
person(bethany).
person(colin).
person(dave).
person(elsie).
fruit(apple).
fruit(banana).
fruit(cherry).
fruit(durian).
eats(april, apple).
eats(april, banana).
eats(april, cherry).
eats(april, durian).
eats(bethany, apple).
eats(bethany, banana).
eats(bethany, cherry).
eats(bethany, durian).
eats(colin, cherry).
eats(dave, apple).
eats(dave, cherry).
someone_eats(Y) :- person(X), eats(X, Y).
everyone_eats(Y) :- findall(X, eats(X, Y), Z), findall(X, person(X), Z).
everyone_eats_all([]).
everyone_eats_all([H|T]) :- everyone_eats(H), everyone_eats_all(T).
eats_something(X) :- fruit(Y), eats(X, Y).
eats_everything(X) :- findall(Y, eats(X, Y), Z), findall(Y, fruit(Y), Z).
somebody_eats_some_food :- person(X), eats(X, _).
everyone_eats_every_food :- findall(X, fruit(X), F), everyone_eats_all(F).
~MRG