
% =============================================================
% 1. A-BOX: FACTS (Individuals, Class Membership, and Properties)
% =============================================================

person(fred).
person(joe).
person(kevin).
person(mick).
person(minnie).
organization(umu_cs).
activity(studying).
activity(researching).
pet(fluffy).
pet(rex).

works_for(fred, umu_cs).
works_for(joe, umu_cs).
works_for(kevin, umu_cs).
doing_activity(fred, researching).
doing_activity(joe, studying).
has_pet(fred, fluffy).
has_pet(mick, rex).
has_degree(kevin, phd).
has_degree(joe, msc).
has_degree(fred, phd).
is_friend_of(fred, joe).
is_friend_of(kevin, mick).

is_male(fred).
is_male(joe).
is_male(kevin).
is_female(minnie).
has_expertise(fred, asp).
has_expertise(kevin, owl).


% =============================================================
% 2. T-BOX: TAXONOMY & MONOTONIC RULES
% =============================================================

researcher(X) :- works_for(X, umu_cs), has_degree(X, phd).
student(X) :- works_for(X, umu_cs), has_degree(X, msc).
employee(X) :- works_for(X, Y), organization(Y).
staff_member(X) :- researcher(X).
is_friend_of(X, Z) :- is_friend_of(X, Y), is_friend_of(Y, Z).
highly_educated(X) :- has_degree(X, phd).
highly_educated(X) :- has_degree(X, msc).
pet_owner(X) :- has_pet(X, Y), pet(Y).

% =============================================================
% 3. NON-MONOTONIC RULES
% =============================================================

is_available(X) :- staff_member(X), not is_busy(X).
is_busy(X) :- doing_activity(X, researching).
distracted(X) :- person(X), not concentrating(X).
concentrating(X) :- doing_activity(X, researching), has_expertise(X, asp).
collaborator(X, Y) :- is_friend_of(X, Y), works_for(X, umu_cs), works_for(Y, umu_cs).

% Integrity Constraint
:- is_available(X), is_busy(X).
