defining relations by rules
Our example program can be easily extended in many interested ways. Let us first add the information on the sex of the people that occur in the parent relation.
female(pam). male(tom). male(bob). …
– explain: These relations are unary relations. A binary relation like parent defines a relation between pairs of objects.
Let us introduce the mother relation.
we can define mother relation in a similar way as the parent relation. e.g. mother(pam,bob).
However, imagine we had a large database of people. Then the mother relation can be defined much more elegantly by making use of the fact that it can be logically derived from already known relations parent and female.
mother(X,Y) :- parent(X,Y),female(X). – explain: The Prolog symbol “:-” is read as “if”. This clause can also be read as: “For all X and Y, if X is a parent of Y and X is female then X is the mother of Y.”
Prolog clauses such as these are called rules. The difference between rules and facts is: a fact is always, unconditionally true. rules specify things that are true if some condition is satisfied.
rules have a condition part (body) and a conclusion part (head). If the condition part ‘parent(X,Y), female(X)’ is true then a logical consequence of this is mother(X,Y).
There is no fact about mother in the program. The only way to consider this question is to apply the rule about mother.
mother(pam,bob) :-parent(pam,bob),female(pam). The condition part has become: parent(pam,bob),female(pam). Now the Prolog tries to find out whether the condition part is true. So the initial goal: mother(pam,bob) has been replaced with the goal: parent(pam,bob),female(pam)
illustrates the sister relation:
For all X and Y , X is a sister of Y if (1) both X and Y have the same parent, and (2) X is a female. It can be translated into Prolog as: sister(X,Y) :-parent(Z,X),parent(Z,Y),female(X).
There is a question. If you ask the Prolog: ?-sister(X,pat) Prolog will find out two answers, X = ann; X=pat. So Pat is a sister of herself ?!
Actually, this mistake can be easily to explain. Our rule about sister does not mention that X and Y should be different if they are to be sisters. As this is not required Prolog assumes that X and Y can be the same, and wll as a consequence find that any female who has a parent is a sister of herself. To correct this mistake, we can state this as X =Y. sister(X,Y) :- parent(Z,X),parent(Z,Y),female(X),X=Y.
|