36
Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Embed Size (px)

Citation preview

Page 1: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Prolog for Dummies

Ulf NilssonDept of Computer and Information ScienceLinköping University

Page 2: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Logic programs

A logic program describes individualsand relations between individuals

(or properties of individuals). The program is used to answer

queries about the world describedin the program.

Page 3: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Relations

Adam is a parent of BillParis is the capital of France5 is greater than 2 plus 2X times 1 is equal to XX is a subset of Y5 is the maximum of 2 and 5There is an edge from a to b

Page 4: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Properties

Adam is a parentAdam is maleX plus 1 is non-zeroParis is a capitalGrass is greenThe music was loud

Page 5: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Queries

Who is the father of Bill?Is there an edge from a to b?Which town is a capital?Who is male?

Page 6: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Language primitives

Constantsadam, paris, 5, 3.14, [], ´Adam’, ...

VariablesX, Y, List, _12, _, ...

Function symbolsplus/2, +/2, f/1, ...

Predicate symbolscapital/2, greater/2, non_zero/1, >/2, ...

Page 7: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Terms

Terms represent individuals

ConstantsVariablesCompound terms

E.g. paris, X, plus(2,3), plus(2,plus(3,4))Infix notation: 2+3

Page 8: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Atomic formulas

Atomic formulas describe relations:

If p is a predicate letter of arity n and t1,...,tn are terms then p(t1,...,tn) is an atomic formula.

E.g. capital(paris,france) greater(X,2)Infix notation: X > 2

Page 9: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Logic Programs

A logic program is a set of clauses: facts rules

The program is used to answer queries.

Page 10: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Facts

A fact is an expression of the form:A.

where A is an atomic formula.

Examples:edge(a, X).

parent(adam, bill).

Page 11: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Interpretation Facts

Consider a fact A.

Declarative (logical) reading:For all variables, A is true.

Procedural (operational) reading:A is solved.

Page 12: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Rules

A rule is an expression of the form:A0 :- A1, ... , An.

where each Ai is an atomic formula.

Examples: path(X,Y) :- edge(X,Y).

father(X,Y) :- parent(X,Y), male(X).

Page 13: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Interpretation Rules

Consider a rule A0 :- A1, ... , An.

Declarative (logical) reading:For all variables, A0 if A1 and...and An.

Procedural (operational) reading:To solve A0, first solve A1, then A2 etc.

Page 14: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Example

gp(X,Y) :- p(X,Z), p(Z,Y).

p(X,Y) :- f(X,Y).p(X,Y) :- m(X,Y).

f(adam,bill).f(bill,carl).m(anne,bill).

Page 15: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Queries

A query is an expression of the form:?- A1, ..., An.

where n=0,1,2,... and A1, ..., An are atomic formulas.

Examples:?- father(X, bill).

?- parent(X, bill), male(X).

Page 16: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Interpretation Queries

Consider a query ?- A1, ... , An.

Declarative (logical) reading:Are there variables such that A1 and...and

An?

Procedural (operational) reading:First solve A1, then A2 etc

Page 17: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Ground SLD-Resolution

?- A1,A2,...,An.

?- B1,...,Bm,A2,...,An.

A1 :- B1,...,Bm.

whereA1 :- B1,...,Bm is an instantiated program clause.

Page 18: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

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

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

father(adam,bill).mother(anne,bill).

A Derivation

?- parent(adam,bill)

?- father(adam,bill)

?- true

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

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

father(adam,bill).mother(anne,bill).

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

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

father(adam,bill).mother(anne,bill).

Page 19: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

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

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

father(adam,bill).mother(anne,bill).

Another Derivation

?- parent(anne,bill)

?- mother(anne,bill)

?- true

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

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

father(adam,bill).mother(anne,bill).

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

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

father(adam,bill).mother(anne,bill).

Page 20: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Full SLD-Resolution

?- A1,A2,...,An.

?- A1= B0, B1,...,Bm,A2,...,An.

B0 :- B1,...,Bm.

where:

• B0 :- B1,...,Bm is a renamed program clause.

?- (B1,...,Bm,A2,...,An).

• is a solution to the equation A1 = B0.

Page 21: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

?- X=X1, bill=Y1, father(X1,Y1). ?- father(X,bill).

Yet Another Derivation

?- parent(X,bill).

parent(X1,Y1) :- father(X1,Y1).father(adam,bill).

?- X=adam, bill=bill. ?- true.

Answer: X=adam

Page 22: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

And Another One...

?- gp(X,Y).

gp(X1,Y1) :- p(X1,Z1),p(Z1,Y1).

?- X=X1, Y=Y1, p(X1,Z1), p(Z1,Y1).?- p(X,Z1), p(Z1,Y).

p(X2,Y2) :- f(X2,Y2).

?- X=X2, Z1=Y2, f(X2,Y2), p(Z1,Y).?- f(X,Z1), p(Z1,Y).

f(adam,bill).

?- X=adam,Z1=bill, p(Z1,Y).?- p(bill,Y).

X=adam

p(X3,Y3) :- f(X3,Y3).

?- bill=X3, Y=Y3, f(X3,Y3).?- f(bill,Y).

f(bill,carl).?- bill=bill, Y=carl.?- true.

Y=carl

Page 23: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

And a Failed One...

?- gp(X,Y).

gp(X1,Y1) :- p(X1,Z1),p(Z1,Y1).

?- X=X1, Y=Y1, p(X1,Z1), p(Z1,Y1).?- p(X,Z1), p(Z1,Y).

p(X2,Y2) :- f(X2,Y2).

?- X=X2, Z1=Y2, f(X2,Y2), p(Z1,Y).?- f(X,Z1), p(Z1,Y).

f(bill,carl).

?- X=bill,Z1=carl, p(Z1,Y).?- p(carl,Y).

X=bill

p(X3,Y3) :- f(X3,Y3).

?- carl=X3, Y=Y3, f(X3,Y3).?- f(carl,Y).

?- fail.FAILURE!!!

Page 24: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

?- true.Y=carl

?- p(bill,Y).

X=adam

SLD-Tree

?- gp(X,Y).

?- f(bill,Y). ?- m(bill,Y).

?- fail.

?- p(X,Z),p(Z,Y).

?- f(X,Z),p(Z,Y).

?- p(carl,Y).

?- f(carl,Y).?- m(carl,Y).

?- fail. ?- fail.

?- m(X,Z),p(Z,Y).

?- f(bill,Y). ?- m(bill,Y).

?- true.Y=carl

?- fail.

?- p(bill,Y).

X=anne

Page 25: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Example

/* or(In1, In2, Out) */or(0, 0, 0).or(0, 1, 1).or(1, 0, 1).or(1, 1, 1).

/* nand(In1, In2, Out) */nand(X, Y, Z) :-

and(X, Y, Tmp),inv(Tmp, Z).

/* inv(In, Out) */inv(0, 1).inv(1, 0).

/* and(In1, In2, Out) */and(0, 0, 0).and(0, 1, 0).and(1, 0, 0).and(1, 1, 1).

Page 26: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Database

lecturer(Lecturer,Course) :- course(Course,_,Lecturer,_).

duration(Course,Length) :- course(Course,time(_,S,F),_,_), plus(S,Length,F).

teaches(Lect,Day) :- course(_, time(Day,_,_), Lect, _). occupied(Room,Day,Time) :- course(_,time(Day,S,F),_,Room), S =< Time, Time =< F.

% Databasecourse(logic, time(monday, 8, 10), dave, a12)....

Page 27: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Recursion

path(Node,Node).path(Node1,Node3) :-

edge(Node1,Node2),path(Node2,Node3).

edge(a,b).edge(a,c).edge(b,d).edge(c,d).edge(d,e).edge(f,g).

a

b

c

d

e

f

g

Page 28: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

a

b

c

.

[]

.

.

c

b

a

List Notation

.(a, .(b, .(c, [])))

Page 29: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

More On List Notation

The empty list: []A non-empty list: .(X,Y) or [X|Y]

Syntactic Sugar:[b] instead of [b|[]] and .(b, [])[a,b] instead of [a|[b]] and [a|[b|[]]][a,b|X] instead of [a|[b|X]]

Page 30: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

List manipulation

list([ ]).list([X|Xs]) :- list(Xs).

member(X,[X|Xs]).member(X,[Y|Ys]) :- member(X,Ys).

append([ ],Ys,Ys).append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs).

Page 31: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

List Manipulation

% reverse(A, B)% B is A in reverse orderreverse([ ],[ ]).reverse([X|Xs],Zs) :- reverse(Xs,Ys), append(Ys,[X],Zs).

% Alternative versionreverse(Xs,Ys) :- reverse(Xs,[ ],Ys).

reverse([ ],Ys,Ys).reverse([X|Xs],Acc,Ys) :- reverse(Xs,[X|Acc],Ys).

Page 32: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Insertion Sort

% sort(A,B)% B is a sorted version of Asort([X|Xs],Ys) :- sort(Xs,Zs), insert(X,Zs,Ys).sort([ ],[ ]).

% insert(A,B,C)% if B is a sorted list, then C is sorted% and contains all elements in B plus Ainsert(X,[ ],[X]).insert(X,[Y|Ys],[Y|Zs]) :- X > Y, insert(X,Ys,Zs).insert(X,[Y|Ys],[X,Y|Ys]) :- X =< Y.

Page 33: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Binary Trees

% binary_tree(A)% A is a binary treebinary_tree(void).binary_tree(tree(Element,Left,Right)) :-

binary_tree(Left), binary_tree(Right).

% tree_member(A,B)% A is a node in the tree Btree_member(X,tree(X,_,_)).tree_member(X,tree(_,Left,_)) :- tree_member(X,Left).tree_member(X,tree(_,_,Right)) :- tree_member(X,Right).

Page 34: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Built In Predicates

setof(X, p(X), S)~ S is the set of all X such that p(X)

bagof(X, p(X), B)~ B is the sequence of all X such that p(X)

findall(X, p(X), B)B is the sequence of all X such that p(X)

Page 35: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Negation

Prolog contains a weak form of negationcalled “negation as failure”.

Written: \+ p(a)A query ?- \+ p(a) succeeds if the

query ?- p(a) fails finitely.Robust only when the goal contains

no variables. (Use only as a test!)

Page 36: Prolog for Dummies Ulf Nilsson Dept of Computer and Information Science Linköping University

Example Negation

on_top(X) :- \+ blocked(X).blocked(X) :- on(Y, X).on(a, b).

%----------------------------?- on_top(a).yes

b

a