Advertisement
1 / 36

Prolog for Dummies PowerPoint PPT Presentation


  • 950 Views
  • Uploaded on 21-06-2012
  • Presentation posted in: General

Prolog for Dummies. Ulf Nilsson Dept of Computer and Information Science Linköping University. Logic programs. A logic program describes individuals and relations between individuals (or properties of individuals). The program is used to answer queries about the world described - PowerPoint PPT Presentation

Download Presentation

Prolog for Dummies

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Prolog for dummies

Prolog for Dummies

Ulf Nilsson

Dept of Computer and Information Science

Linköping University


Logic programs

Logic programs

A logic program describes individuals

and relations between individuals

(or properties of individuals).

The program is used to answer

queries about the world described

in the program.


Relations

Relations

  • Adam is a parent of Bill

  • Paris is the capital of France

  • 5 is greater than 2 plus 2

  • X times 1 is equal to X

  • X is a subset of Y

  • 5 is the maximumof 2 and 5

  • There is an edge from a to b


Properties

Properties

  • Adam is a parent

  • Adam is male

  • X plus 1 is non-zero

  • Paris is a capital

  • Grass is green

  • The music was loud


Queries

Queries

  • Who is the father of Bill?

  • Is there an edge from a to b?

  • Which town is a capital?

  • Who is male?


Language primitives

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, ...


Terms

Terms

Terms represent individuals

  • Constants

  • Variables

  • Compound terms

  • E.g. paris, X, plus(2,3), plus(2,plus(3,4))

  • Infix notation: 2+3


Atomic formulas

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


Logic programs1

Logic Programs

  • A logic program is a set of clauses:

    • facts

    • rules

  • The program is used to answer queries.


Facts

Facts

  • A fact is an expression of the form:

    A.

    where A is an atomic formula.

  • Examples:

    edge(a, X).

    parent(adam, bill).


Interpretation facts

Interpretation Facts

  • Consider a fact A.

  • Declarative (logical) reading:

    For all variables, A is true.

  • Procedural (operational) reading:

    A is solved.


Rules

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).


Interpretation rules

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.


Example

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).


Queries1

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).


Interpretation queries

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


Ground sld resolution

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

Ground SLD-Resolution

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

A1 :- B1,...,Bm.

where

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


A derivation

?- father(adam,bill)

?- true

A Derivation

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).

parent(X,Y) :-

father(X,Y).

parent(X,Y) :-

mother(X,Y).

father(adam,bill).

mother(anne,bill).

?- parent(adam,bill)


Another derivation

?- mother(anne,bill)

?- true

Another Derivation

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).

parent(X,Y) :-

father(X,Y).

parent(X,Y) :-

mother(X,Y).

father(adam,bill).

mother(anne,bill).

?- parent(anne,bill)


Full sld resolution

B0 :- B1,...,Bm.

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

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

where:

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

  • q is a solution to the equation A1 = B0.

Full SLD-Resolution

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


Yet another derivation

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

?- father(X,bill).

?- X=adam, bill=bill.

?- true.

Answer: X=adam

Yet Another Derivation

?- parent(X,bill).

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

father(adam,bill).


And another one

X=adam

?- p(bill,Y).

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

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

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

?- true.

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

?- f(bill,Y).

?- bill=bill, Y=carl.

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

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

Y=carl

And Another One...

?- gp(X,Y).

f(bill,carl).

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

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

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

f(adam,bill).


And a failed one

X=bill

?- p(carl,Y).

?- fail.

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

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

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

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

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

?- f(carl,Y).

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

And a Failed One...

?- gp(X,Y).

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

f(bill,carl).

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

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

FAILURE!!!


Sld tree

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

X=anne

X=adam

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

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

?- p(bill,Y).

?- p(bill,Y).

?- p(carl,Y).

?- f(carl,Y).

?- m(carl,Y).

?- f(bill,Y).

?- m(bill,Y).

?- f(bill,Y).

?- m(bill,Y).

?- fail.

?- fail.

?- true.

Y=carl

?- fail.

?- true.

Y=carl

?- fail.

SLD-Tree

?- gp(X,Y).


Example1

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).


Database

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.

% Database

course(logic, time(monday, 8, 10), dave, a12).

...


Recursion

b

d

f

a

c

e

g

Recursion

edge(a,b).

edge(a,c).

edge(b,d).

edge(c,d).

edge(d,e).

edge(f,g).

path(Node,Node).

path(Node1,Node3) :-

edge(Node1,Node2),

path(Node2,Node3).


List notation

.

.

a

a

.

b

b

c

[]

c

List Notation

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


More on list notation

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]]


List manipulation

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).


List manipulation1

List Manipulation

% reverse(A, B)

% B is A in reverse order

reverse([ ],[ ]).

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

% Alternative version

reverse(Xs,Ys) :- reverse(Xs,[ ],Ys).

reverse([ ],Ys,Ys).

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


Insertion sort

Insertion Sort

% sort(A,B)

% B is a sorted version of A

sort([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 A

insert(X,[ ],[X]).

insert(X,[Y|Ys],[Y|Zs]) :- X > Y, insert(X,Ys,Zs).

insert(X,[Y|Ys],[X,Y|Ys]) :- X =< Y.


Binary trees

Binary Trees

% binary_tree(A)

% A is a binary tree

binary_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 B

tree_member(X,tree(X,_,_)).

tree_member(X,tree(_,Left,_)) :- tree_member(X,Left).

tree_member(X,tree(_,_,Right)) :- tree_member(X,Right).


Built in predicates

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)


Negation

Negation

  • Prolog contains a weak form of negation

    called “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!)


Example negation

a

b

Example Negation

on_top(X) :- \+ blocked(X).

blocked(X) :- on(Y, X).

on(a, b).

%----------------------------

?- on_top(a).

yes