
INPUT TEXT:
If there is a cephalopod then it is a mollusk.
If there is a nautilus then it is a cephalopod.
Mollusk-Rule: If there is a mollusk then it is a shellbearer.
Cephalopond-Rule: If there is a cephalopod then it is not a shellbearer.
Nautilus-Rule: If there is a nautilus then it is a shellbearer.
Molly is a mollusk.
Sophie is a cephalopod.
Natalie is a nautilus.
Nautilus-Rule overrides Cephalopond-Rule.
Cephalopond-Rule overrides Mollusk-Rule.
Nautilus-Rule overrides Mollusk-Rule.

RULES:
group([object(A,mollusk,countable,na,eq,1)]) <- [group([object(A,cephalopod,countable,na,eq,1)])].
group([object(A,cephalopod,countable,na,eq,1)]) <- [object(A,nautilus,countable,na,eq,1)].
group([object(named('Molly'),mollusk,countable,na,eq,1)]).
group([object(named('Sophie'),cephalopod,countable,na,eq,1)]).
object(named('Molly'),'Molly',named,na,eq,1).
object(named('Natalie'),'Natalie',named,na,eq,1).
object(named('Natalie'),nautilus,countable,na,eq,1).
object(named('Sophie'),'Sophie',named,na,eq,1).
'Cephalopond-Rule':: -group([object(A,shellbearer,countable,na,eq,1)]) <- [group([object(A,cephalopod,countable,na,eq,1)])].
'Mollusk-Rule':: group([object(A,shellbearer,countable,na,eq,1)]) <- [group([object(A,mollusk,countable,na,eq,1)])].
'Nautilus-Rule':: group([object(A,shellbearer,countable,na,eq,1)]) <- [object(A,nautilus,countable,na,eq,1)].
overrides('Nautilus-Rule','Cephalopond-Rule').
overrides('Cephalopond-Rule','Mollusk-Rule').
overrides('Nautilus-Rule','Mollusk-Rule').

SIMPLE RULES:
mollusk(A) <- [cephalopod(A)].
cephalopod(A) <- [nautilus(A)].
mollusk(named('Molly')).
cephalopod(named('Sophie')).
nautilus(named('Natalie')).
'Cephalopond-Rule':: -shellbearer(A) <- [cephalopod(A)].
'Mollusk-Rule':: shellbearer(A) <- [mollusk(A)].
'Nautilus-Rule':: shellbearer(A) <- [nautilus(A)].
overrides('Nautilus-Rule','Cephalopond-Rule').
overrides('Cephalopond-Rule','Mollusk-Rule').
overrides('Nautilus-Rule','Mollusk-Rule').

ANSWERSET #1:
-group([object(named('Sophie'),shellbearer,countable,na,eq,1)]).
group([object(named('Molly'),mollusk,countable,na,eq,1)]).
group([object(named('Molly'),shellbearer,countable,na,eq,1)]).
group([object(named('Natalie'),cephalopod,countable,na,eq,1)]).
group([object(named('Natalie'),mollusk,countable,na,eq,1)]).
group([object(named('Natalie'),shellbearer,countable,na,eq,1)]).
group([object(named('Sophie'),cephalopod,countable,na,eq,1)]).
group([object(named('Sophie'),mollusk,countable,na,eq,1)]).
object(named('Molly'),'Molly',named,na,eq,1).
object(named('Natalie'),'Natalie',named,na,eq,1).
object(named('Natalie'),nautilus,countable,na,eq,1).
object(named('Sophie'),'Sophie',named,na,eq,1).

ANSWERTEXT #1:
Natalie is a nautilus.
Sophie is a mollusk.
Sophie is a cephalopod.
Natalie is a shellbearer.
Natalie is a mollusk.
Natalie is a cephalopod.
Molly is a shellbearer.
Molly is a mollusk.
It is false that Sophie is a shellbearer.

