1.1.2 Knowledge Base 2

Here is KB2, our second knowledge base:

playsAirGuitar(mia)  :- listensToMusic(mia).
playsAirGuitar(yolanda) :- listensToMusic(yolanda).
listensToMusic(yolanda):- happy(yolanda).

KB2 contains two facts, listensToMusic(mia) and happy(yolanda). The last three items are rules.

Rules state information that is conditionally true of the domain of interest. For example, the first rule says that Mia plays air guitar if she listens to music, and the last rule says that Yolanda listens to music if she if happy. More generally, the :- should be read as ``if'', or ``is implied by''. The part on the left hand side of the :- is called the head of the rule, the part on the right hand side is called the body. So in general rules say: if the body of the rule is true, then the head of the rule is true too. And now for the key point: if a knowledge base contains a rule head :- body, and Prolog knows that body follows from the information in the knowledge base, then Prolog can infer head.

This fundamental deduction step is what logicians call modus ponens.

Let's consider an example. We will ask Prolog whether Mia plays air guitar:

?- playsAirGuitar(mia).

Prolog will respond ``yes''. Why? Well, although playsAirGuitar(mia) is not a fact explicitly recorded in KB2, KB2 does contain the rule

playsAirGuitar(mia) :- listensToMusic(mia).

Moreover, KB2 also contains the fact listensToMusic(mia). Hence Prolog can use modus ponens to deduce that playsAirGuitar(mia).

Our next example shows that Prolog can chain together uses of modus ponens. Suppose we ask:

?- playsAirGuitar(yolanda).

Prolog would respond ``yes''. Why? Well, using the fact happy(yolanda) and the rule

listensToMusic(yolanda):- happy(yolanda), 

Prolog can deduce the new fact listensToMusic(yolanda). This new fact is not explicitly recorded in the knowledge base --- it is only implicitly present (it is inferred knowledge). Nonetheless, Prolog can then use it just like an explicitly recorded fact. Thus, together with the rule

playsAirGuitar(yolanda) :- listensToMusic(yolanda) 

it can deduce that playsAirGuitar(yolanda), which is what we asked it. Summing up: any fact produced by an application of modus ponens can be used as input to further rules. By chaining together applications of modus ponens in this way, Prolog is able to retrieve information that logically follows from the rules and facts recorded in the knowledge base.

The facts and rules contained in a knowledge base are called clauses. Thus KB2 contains five clauses, namely three rules and two facts. Another way of looking at KB2 is to say that it consists of three predicates (or procedures). The three predicates are:


The happy predicate is defined using a single clause (a fact). The listensToMusic and playsAirGuitar predicates are each defined using two clauses (in both cases, two rules). It is a good idea to think about Prolog programs in terms of the predicates they contain. In essence, the predicates are the concepts we find important, and the various clauses we write down concerning them are our attempts to pin down what they mean and how they are inter-related.

One final remark. We can view a fact as a rule with an empty body. That is, we can think of facts as ``conditionals that do not have any antecedent conditions'', or ``degenerate rules''.

Patrick Blackburn, Johan Bos and Kristina Striegnitz
Version 1.2.5 (20030212)