
INPUT TEXT:
Every person has a bike.
If a person has a house then he has a car.
If a person has a bike then he does not have a dog.
If a person does not have a dog and has a car then he does not have a cat.
John is a person and has a house.
Mary is a person and has a cat.

RULES:
-group([pred_mod(have,A,gv(0),[]),object(gv(0),dog,countable,na,eq,1)]) <- [group([pred_mod(have,A,gv(4),[]),object(gv(4),bike,countable,na,eq,1)]), object(A,person,countable,na,eq,1)].
-group([pred_mod(have,A,gv(1),[]),object(gv(1),cat,countable,na,eq,1)]) <- [group([pred_mod(have,A,gv(3),[]),object(gv(3),car,countable,na,eq,1)]), object(A,person,countable,na,eq,1), -group([pred_mod(have,A,gv(0),[]),object(gv(0),dog,countable,na,eq,1)])].
group([pred_mod(have,A,gv(4),[]),object(gv(4),bike,countable,na,eq,1)]) <- [object(A,person,countable,na,eq,1)].
group([pred_mod(have,A,gv(3),[]),object(gv(3),car,countable,na,eq,1)]) <- [pred_mod(have,A,B,[]), object(A,person,countable,na,eq,1), object(B,house,countable,na,eq,1)].
group([pred_mod(have,named('Mary'),gv(1),[]),object(gv(1),cat,countable,na,eq,1)]).
pred_mod(have,named('John'),v(0),[]).
object(named('John'),'John',named,na,eq,1).
object(named('John'),person,countable,na,eq,1).
object(named('Mary'),'Mary',named,na,eq,1).
object(named('Mary'),person,countable,na,eq,1).
object(v(0),house,countable,na,eq,1).

SIMPLE RULES:
-group([have(A,gv(0),[]),dog(gv(0))]) <- [group([have(A,gv(4),[]),bike(gv(4))]), person(A)].
-group([have(A,gv(1),[]),cat(gv(1))]) <- [group([have(A,gv(3),[]),car(gv(3))]), person(A), -group([have(A,gv(0),[]),dog(gv(0))])].
group([have(A,gv(4),[]),bike(gv(4))]) <- [person(A)].
group([have(A,gv(3),[]),car(gv(3))]) <- [have(A,B,[]), person(A), house(B)].
group([have(named('Mary'),gv(1),[]),cat(gv(1))]).
have(named('John'),v(0),[]).
person(named('John')).
person(named('Mary')).
house(v(0)).

ANSWERSET #1:
-group([pred_mod(have,named('John'),gv(0),[]),object(gv(0),dog,countable,na,eq,1)]).
-group([pred_mod(have,named('John'),gv(1),[]),object(gv(1),cat,countable,na,eq,1)]).
-group([pred_mod(have,named('Mary'),gv(0),[]),object(gv(0),dog,countable,na,eq,1)]).
group([pred_mod(have,named('John'),gv(3),[]),object(gv(3),car,countable,na,eq,1)]).
group([pred_mod(have,named('John'),gv(4),[]),object(gv(4),bike,countable,na,eq,1)]).
group([pred_mod(have,named('Mary'),gv(1),[]),object(gv(1),cat,countable,na,eq,1)]).
group([pred_mod(have,named('Mary'),gv(4),[]),object(gv(4),bike,countable,na,eq,1)]).
pred_mod(have,named('John'),v(0),[]).
object(named('John'),'John',named,na,eq,1).
object(named('John'),person,countable,na,eq,1).
object(named('Mary'),'Mary',named,na,eq,1).
object(named('Mary'),person,countable,na,eq,1).
object(v(0),house,countable,na,eq,1).

ANSWERTEXT #1:
Mary is a person.
John is a person.
John has a house.
Mary has a bike.
Mary has a cat.
John has a bike.
John has a car.
It is false that John has a dog.
It is false that John has a cat.
It is false that Mary has a dog.

