1 / 36

Prolog for Dummies

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

misu
Télécharger la présentation

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

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

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

  7. Terms Terms represent individuals • Constants • Variables • Compound terms • E.g. paris, X, plus(2,3), plus(2,plus(3,4)) • Infix notation: 2+3

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

  9. Logic Programs • A logic program is a set of clauses: • facts • rules • The program is used to answer queries.

  10. Facts • A fact is an expression of the form: A. where A is an atomic formula. • Examples: edge(a, X). parent(adam, bill).

  11. Interpretation Facts • Consider a fact A. • Declarative (logical) reading: For all variables, A is true. • Procedural (operational) reading: A is solved.

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

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

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

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

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

  17. ?- B1,...,Bm,A2,...,An. Ground SLD-Resolution ?- A1,A2,...,An. A1 :- B1,...,Bm. where A1 :- B1,...,Bm is an instantiated program clause.

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

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

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

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

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

  23. 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!!!

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

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

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

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

  28. . . a a . b b c [] c List Notation .(a, .(b, .(c, [])))

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

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

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

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

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

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

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

  36. a b Example Negation on_top(X) :- \+ blocked(X). blocked(X) :- on(Y, X). on(a, b). %---------------------------- ?- on_top(a). yes

More Related