Facts, Rules & Queries

4.1 Facts

A fact states an unconditional truth:

likes is the functor (predicate name), 2 its arity — written likes/2.

likes(mary, wine).
likes(john, mary).
capital(france, paris).
age(peter, 7).

4.2 Rules

Head :- Body. — "Head is true if Body is true".

Multiple clauses = alternatives (logical OR):

happy(X) :- likes(X, wine).                         % single condition
friends(X, Y) :- likes(X, Y), likes(Y, X).          % , means AND
can_drive(X) :- age(X, A), A >= 18.
fun(X) :- red(X) ; car(X).                           % ; means OR (prefer separate clauses)
animal(X) :- dog(X).
animal(X) :- cat(X).

4.3 Queries

?- likes(mary, wine).          % yes/no question
true.
?- likes(mary, X).             % what does mary like?
X = wine.
?- likes(X, Y).                % all pairs
?- friends(john, mary).

4.4 Logical reading vs procedural reading

grandparent(X, Z):- parent(X, Y), parent(Y, Z). Declarative: for all X, Y, Z: if X is a parent of Y and Y is a parent of Z, then X is a grandparent of Z.

Procedural: to prove grandparent(X, Z), first prove parent(X, Y), then prove parent(Y, Z).

4.5 Clauses, predicates, programs

Clause: a fact or a rule.

Predicate (procedure): all clauses with the same name/arity.

Program: a set of predicates.

foo/1 and foo/2 are different predicates.

4.6 Horn clauses & the closed-world assumption

Prolog clauses are Horn clauses (at most one positive literal). Prolog uses the closed-world assumption: anything not provable is considered false.