0% found this document useful (0 votes)
16 views

Lecture 1 - Introduction to Prolog

Uploaded by

karimterelbr
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views

Lecture 1 - Introduction to Prolog

Uploaded by

karimterelbr
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 31

Prolog

Programming for Artificial Intelligence

Third edition 2001

Ivan Bratko

Addision Wesley

1
Part 1 The Prolog Language

Chapter 1
Introduction to Prolog
(Programming in Logic)

2
Introduction to PROLOG
 In PROLOG, predicate expressions consist of the
predicate name, followed by zero or more
arguments enclosed in parentheses, separated by
commas.
 Example: father(Ali, Ahmad) means that Ali is
the father of Ahmad

3
General Organization of a PROLOG
System

4
PROLOG Continued
 Programs consist of facts and rules in the
general form of goals.
 General form: p:- p1, p2, …, pN
p is called the rule’s head and the pi
represents the subgoals
 Example:
parent(X,Y) :- father(X,Y)
X is the parent of Y if X is the father of Y

5
PROLOG Continued
• Examples of PROLOG predicates and
comments preceded by semicolons:

6
Defining relations by facts
 Given
The tree
a whole
defined
family
by the
tree
Prolog program:

parent( pam,tombob). % Pam is a parent of Bob


pam
parent( tom, bob).
parent( tom, liz).
parent(bob
bob, ann). liz
parent( bob, pat).
parent( pat, jim).
ann pat

jim

7
Defining relations by facts
 Questions (Queries):
 Is Bob a parent of Pat? pam tom

 ?- parent( bob, pat).

 ?- parent( liz, pat). bob liz


 ?- parent( tom, ben).

ann pat
 Who is Liz’s parent?
 ?- parent( X, liz).
jim

 Who are Bob’s children?


 ?- parent( bob, X).

8
Defining relations by facts
pam tom
 Questions:
 Who is a parent of whom?
bob liz
 Find X and Y such that X

is a parent of Y.
ann pat
 ?- parent( X, Y).

 Who is a grandparent of jim

Jim? X

 ?- parent( Y, jim),
parent
parent( X, Y). Y grandparent

parent
jim
9
Defining relations by facts
tom
 Questions: pam

 Who are Tom’s grandchildren?


 ?- parent( tom, X), bob liz

parent( X, Y).
ann pat
 Do Ann and Pat have a
common parent?
jim
 ?- parent( X, ann),

parent( X, pat).

10
Defining relations by facts
 It is easy in Prolog to define a relation.
 The user can easily query the Prolog system about
relations defined in the program.
 A Prolog program consists of clauses. Each clause
terminates with a full stop.
 The arguments of relations can be
 Atoms: concrete objects or constants such as tom, pat
 Variables: general objects such as X and Y
 Questions to the system consist of one or more goals.
 An answer to a question can be either positive
(succeeded) or negative (failed).
 If several answers satisfy the question then Prolog will find
as many of them as desired by the user.

11
Defining relations by rules
 Facts:
 female( pam). % Pam is female
 female( liz).
 female( ann).
 female( pat). pam tom
 male( tom). % Tom is male
 male( bob).
 male( jim). bob liz

 Define the “offspring()” relation: ann pat


 Fact: offspring( liz, tom).
 Rule: offspring( Y, X) :- parent( X, Y).
 For all X and Y, jim
Y is an offspring of X if
X is a parent of Y.
12
Defining relations by rules
 Rules have:
 A condition part (body)
 the right-hand side of the rule
 A conclusion part (head)
 the left-hand side of the rule

 Example:
 offspring( Y, X) :- parent( X, Y).
 The rule is general in the sense that it is
applicable to any objects X and Y.
 A special case of the general rule:
 offspring( liz, tom) :- parent( tom, liz).
X
 ?- offspring( liz, tom).
 ?- offspring( X, Y). parent offspring

Y
13
Defining relations by rules
 Define the “mother” relation:
 mother( X, Y) :- parent( X, Y), female( X).
 For all X and Y,
X is the mother of Y if
X is a parent of Y and
X is a female.

female
X

parent mother

14
Defining relations by rules
 Define the “grandparent” relation:
 grandparent( X, Z) :-
parent( X, Y), parent( Y, Z).

parent

Y grandparent

parent

15
Defining relations by rules
 Define the “sister” relation:
 sister( X, Y) :-
parent( Z, X), parent( Z, Y),
female(X).
 For any X and Y,
X is a sister of Y if
(1) both X and Y have the same parent, and
(2) X is female.
 ?- sister( ann, pat). Z
 ?- sister( X, pat). parent
parent
 ?- sister( pat, pat).
 Pat is a sister to herself?!
X Y
female
sister

16
Defining relations by rules
 To correct the “sister” relation:
 sister( X, Y) :-
parent( Z, X), parent( Z, Y),
female(X),
different( X, Y).
 different (X, Y) is satisfied if and only if X and Y
are not equal. (Please try to define this function)

parent parent

X Y
female
sister

17
Defining relations by rules
 Prolog clauses consist of
 Head
 Body: a list of goal separated by commas (,)

 Prolog clauses are of three types:


 Facts:
 declare things that are always (logically) true
 facts are clauses that have a head and the empty
body
 Rules:
 declare things that are true depending on a given
condition
 rules have the head and the (non-empty) body
 Questions (Queries):
 the user can ask the program what things are true
 questions only have the body

18
Defining relations by rules
 A variable can be substituted by another object.

 Variables are assumed to be universally quantified


and are read as “for all”.
 For example:

hasachild( X) :- parent( X, Y).


can be read in two ways:
(a) For all X and Y,
if X is a parent of Y then X has a child.
(b) For all X,
X has a child if there is some Y such that X
is a parent of Y.

19
Recursive rules
 Define the “predecessor()” relation

X X

parent predecessor parent


Y
Y1

parent predecessor
X
Y2
parent
Y predecessor parent
Z
parent
Z
20
Recursive rules
 Define the “predecessor” relation
predecessor( X, Z):- parent( X, Z).
predecessor( X, Z):-
parent( X, Y), predecessor( Y, Z).
X

 For all X and Z, parent


X is a predecessor of Z if Y1
there is a Y such that
(1) X is a parent of Y and predecessor

(2) Y is a predecessor of Z.
predecessor
:
 ?- predecessor( pam, X).

21
Recursive rules
mother(
% FigureX,1.8
Y) The
:- family program.
parent( X, Y),
parent(
female(pam,
X). bob).
parent( tom, bob).
parent( tom, liz).
grandparent( X, Z) :-
parent(
parent(bob,
X, Y),
ann).
parent(
parent(bob,
Y, Z).
pat).
parent( pat, jim).
sister( X, Y) :-
female(
parent(pam).
Z, X),
female(
parent(liz).
Z, Y),
female(
female(ann).
X),
female(
X \= Y.pat).
male( tom).
male( bob). X, Z) :- % Rule pr1
predecessor(
male(
parent(
jim).
X, Z).

predecessor(
offspring( Y, X)
X, :-
Z) :- % Rule pr2
parent( X, Y),
Y).
predecessor( Y, Z).

22
Recursive rules
 Procedure:
 In figure 1.8, there are two “predecessor relation”
clauses.
predecessor( X, Z) :- parent( X, Z).
predecessor( X, Z) :- parent( X, Y), predecessor( Y, Z).
 Such a set of clauses is called a procedure.

 Comments:
/* This is a comment */
% This is also a comment

23
Trace and Notrace
| ?- trace.
The debugger will first creep -- showing everything
(trace) …
(15 ms) yes X = bob
{trace} Z = jim
1 1 Redo: predecessor(bob,jim) ?
| ?- predecessor( X, Z). 3 2 Redo: predecessor(pat,jim) ?
1 1 Call: predecessor(_16,_17) ? 4 3 Call: parent(pat,_144) ?
2 2 Call: parent(_16,_17) ? 4 3 Exit: parent(pat,jim) ?
2 2 Exit: parent(pam,bob) ? …
1 1 Exit: predecessor(pam,bob) ? 4 3 Fail: parent(jim,_17) ?
4 3 Call: parent(jim,_144) ?
X = pam 4 3 Fail: parent(jim,_132) ?
Z = bob ? ; 3 2 Fail: predecessor(jim,_17) ?
1 1 Redo: predecessor(pam,bob) ? 1 1 Fail: predecessor(_16,_17) ?
2 2 Redo: parent(pam,bob) ?
2 2 Exit: parent(tom,bob) ? (266 ms) no
1 1 Exit: predecessor(tom,bob) ? {trace}
X = tom | ?- notrace.
Z = bob ? ; The debugger is switched off

yes

24
How Prolog answers questions
 To answer a question, Prolog tries to satisfy all the goals.
 To satisfy a goal means to demonstrate that the goal is true,
assuming that the relations in the program is true.
 Prolog accepts facts and rules as a set of axioms, and the
user’s question as a proved theorem.
 Example:
 Axioms: All men are fallible.
john is a man.
 Theorem: john is fallible.
 For all X, if X is a man then X is fallible.
fallible( X) :- man( X).
man( john).
 ?- fallible( john).

25
How Prolog answers questions
predecessor( X, Z) :- parent( X, Z). % Rule pr1
predecessor( X, Z) :- parent( X, Y), % Rule pr2
predecessor( Y, Z).
parent( pam, bob).
parent( tom, bob).
 ?- predecessor( tom, pat). parent( tom, liz).
 How does the Prolog system actually parent( bob, ann).
parent( bob, pat).
find a proof sequence? parent( pat, jim).
 Prolog first tries that clause which appears first in the

program. (rule pr1)


pam tom  Now, X= tom, Z = pat.

 The goal predecessor( tom, pat) is then replaced by

bob liz
parent( tom, pat).
 There is no clause in the program whose head matches

the goal parent( tom, pat).


ann pat  Prolog backtracks to the original goal in order to try an

alternative way (rule pr2).


jim
26
How Prolog answers questions
predecessor( X, Z) :- parent( X, Z). % Rule pr1
predecessor( X, Z) :- parent( X, Y), % Rule pr2
predecessor( Y, Z).
parent( pam, bob).
parent( tom, bob).
 ?- predecessor( tom, pat). parent( tom, liz).
 Apply rule pr2, X = tom, Z = pat, parent( bob, ann).
parent( bob, pat).
but Y is not instantiated yet. parent( pat, jim).
 The top goal predecessor( tom, pat) is replaced by two

goals:
pam tom  parent( tom, Y)
 predecessor( Y, pat)

bob liz  The first goal matches one of the facts. (Y = bob)

 The remaining goal has become

ann pat predecessor( bob, pat)


 Using rule pr1, this goal can be satisfied.

 predecessor( bob, pat) :- parent( bob, pat)


jim
27
How Prolog answers questions
predecessor( tom, pat)

By rule pr1 By rule pr2

parent( tom, Y)
parent( tom, pat)
predecessor( Y, pat)

no By fact
Y = bob parent( tom, bob)
 The top goal is
satisfied when a path predecessor( bob, pat)
is found from the root
node to a leaf node By rule pr1
parent( pam, bob). labeled ‘yes’.
parent( tom, bob).  The execution of
parent( tom, liz). parent( bob, pat)
parent( bob, ann). Prolog is the searching
parent( bob, pat). for such path.
parent( pat, jim). yes
predecessor( X, Z) :- parent( X, Z). % Rule pr1
predecessor( X, Z) :- parent( X, Y), % Rule pr2
predecessor( Y, Z).
derivation diagrams
28
predecessor( X, Z) :- parent( X, Z). % Rule pr1

Trace predecessor( X, Z) :- parent( X, Y), % Rule pr2


predecessor( Y, Z).

parent( pam, bob). predecessor( tom, pat)


parent( tom, bob).
parent( tom, liz).
parent( bob, ann). By rule pr1 By rule pr2
parent( bob, pat).
parent( pat, jim). parent( tom, Y)
parent( tom, pat)
predecessor( Y, pat)

no By fact
Y = bob
parent( tom, bob)
| ?- predecessor( tom, pat).
1 1 Call: predecessor(tom,pat) ? predecessor( bob, pat)
2 2 Call: parent(tom,pat) ?
2 2 Fail: parent(tom,pat) ?
2 2 Call: parent(tom,_79) ? By rule pr1
2 2 Exit: parent(tom,bob) ?
3 2 Call: predecessor(bob,pat) ? parent( bob, pat)
4 3 Call: parent(bob,pat) ?
4 3 Exit: parent(bob,pat) ?
yes
3 2 Exit: predecessor(bob,pat) ?
1 1 Exit: predecessor(tom,pat) ?
derivation diagrams
true ?

29
Goal Searching in PROLOG
• Example Rules:

• PROLOG is queried to determine whether


Ann is the ancestor of John:
:- ancestor(ann, john)
30
Declarative and Procedural meaning of
programs
 Two levels of meaning of Prolog programs:
 The declarative meaning
 concerned only with the relations defined by the program

 determines what will be the output of the program

 The programmer should concentrate mainly on the

declarative meaning and avoid being distracted by the


executional details.
 The procedural meaning
 determines how this output is obtained

 determines how the relations are actually evaluated by

the Prolog system


 The procedural aspects cannot be completely ignored by

the programmer for practical reasons of executional


efficiency.

31

You might also like