Prolog Programming. 2 DATA STRUCTURES IN PROLOG PROGRAMMING TECHNIQUES CONTROL IN PROLOG CUTS.

Slides:



Advertisements
Similar presentations
SLD-resolution Introduction Most general unifiers SLD-resolution
Advertisements

Chapter 11 :: Logic Languages
Declarative Programming Lists in PROLOG Autumn 2014.
Prolog Programming (Volume 5) Dr W.F. Clocksin. List cells + Unification = Great Idea Normally we use ‘proper lists’, which are defined according to the.
Introduction to PROLOG ME 409 Lab - 1. Introduction to PROLOG.
11/10/04 AIPP Lecture 6: Built-in Predicates1 Combining Lists & Built-in Predicates Artificial Intelligence Programming in Prolog Lecturer: Tim Smith Lecture.
C O N T E X T - F R E E LANGUAGES ( use a grammar to describe a language) 1.
1 Introduction to Prolog References: – – Bratko, I., Prolog Programming.
1 Knowledge Based Systems (CM0377) Lecture 8 (Last modified 5th March 2001)
CS 330 Programming Languages 12 / 02 / 2008 Instructor: Michael Eckmann.
Constraint Logic Programming Ryan Kinworthy. Overview Introduction Logic Programming LP as a constraint programming language Constraint Logic Programming.
C++ Programming:. Program Design Including
Inference and Resolution for Problem Solving
Constraint Satisfaction Problems
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Lists, Operators, Arithmetic Notes for Ch.3 of Bratko For CSCE 580 Sp03 Marco.
Prolog Ross (Tate). Filling in the Blanks Rather than reverse((a,b)) returns (b,a) Rather than reverse((a,b)) returns (b,a) What X makes reverse((a,b),
Chapter 5 Outline Formal definition of CSP CSP Examples
Lesson 6. Refinement of the Operator Model This page describes formally how we refine Figure 2.5 into a more detailed model so that we can connect it.
ECE 667 Synthesis and Verification of Digital Systems
1 Section 9.2 Tree Applications. 2 Binary Search Trees Goal is implementation of an efficient searching algorithm Binary Search Tree: –binary tree in.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 15 Logic Programming Q: How many legs does.
C++ Programming: Program Design Including Data Structures, Third Edition Chapter 20: Binary Trees.
Induction and recursion
Prolog Programming Lecture Module 13. Objective ● What is Prolog? ● Prolog program ● Syntax of Prolog ● Prolog Control Strategy ● Execution of Prolog.
Systems and Matrices (Chapter5)
Formal Models of Computation Part II The Logic Model
Notes for Chapter 12 Logic Programming The AI War Basic Concepts of Logic Programming Prolog Review questions.
CS 321 Programming Languages and Compilers Prolog part 2.
CS 2104 – Prog. Lang. Concepts Logic Programming - II Dr. Abhik Roychoudhury School of Computing.
COP4020 Programming Languages Logical programming with Prolog Prof. Xin Yuan.
CS 403: Programming Languages Lecture 19 Fall 2003 Department of Computer Science University of Alabama Joel Jones.
Chapter 4.1 Solving Systems of Linear Equations in two variables.
1 Chapter 8 Inference and Resolution for Problem Solving.
Learning Automata and Grammars Peter Černo.  The problem of learning or inferring automata and grammars has been studied for decades and has connections.
30/09/04 AIPP Lecture 3: Recursion, Structures, and Lists1 Recursion, Structures, and Lists Artificial Intelligence Programming in Prolog Lecturer: Tim.
O A procedure: a set of axioms (rules and facts) with identical signature (predicate symbol and arity). o A logic program: a set of procedures defining.
1 Prolog and Logic Languages Aaron Bloomfield CS 415 Fall 2005.
Ch. 13 Ch. 131 jcmt CSE 3302 Programming Languages CSE3302 Programming Languages (notes?) Dr. Carter Tiernan.
CS 103 Discrete Structures Lecture 13 Induction and Recursion (1)
Basic Problem Solving Search strategy  Problem can be solved by searching for a solution. An attempt is to transform initial state of a problem into some.
Programming Languages Third Edition Chapter 4 Logic Programming.
Problem Reduction So far we have considered search strategies for OR graph. In OR graph, several arcs indicate a variety of ways in which the original.
Principles of programming languages 12: Logic programming Isao Sasano Department of Information Science and Engineering.
Strings Basic data type in computational biology A string is an ordered succession of characters or symbols from a finite set called an alphabet Sequence.
Programming Language Concepts Lecture 17 Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Logic Programming.
1 CS Programming Languages Class 19 November 2, 2000.
Prolog 3 Tests and Backtracking 1. Arithmetic Operators Operators for arithmetic and value comparisons are built-in to Prolog = always accessible / don’t.
CompSci 102 Discrete Math for Computer Science March 13, 2012 Prof. Rodger Slides modified from Rosen.
07/10/04 AIPP Lecture 5: List Processing1 List Processing Artificial Intelligence Programming in Prolog Lecturer: Tim Smith Lecture 5 07/10/04.
C H A P T E R N I N E Logic Programming Part 2 Programming Languages – Principles and Paradigms by Allen Tucker, Robert Noonan.
Real Zeros of Polynomial Functions
O A procedure: a set of axioms (rules and facts) with identical signature (predicate symbol and arity). o A logic program: a set of procedures (predicates),
Logic Programming Lecture 2: Unification and proof search.
Section Recursion 2  Recursion – defining an object (or function, algorithm, etc.) in terms of itself.  Recursion can be used to define sequences.
More on Prolog syntax Already seen program statement types: Already seen program statement types: rules: p(X) :- q(X,Y), r(Y,z). rules: p(X) :- q(X,Y),
Prolog Programming.
Prolog a declarative language
Solving Systems of Equations in Two Variables; Applications
Prolog Concepts.
CSPs: Search and Arc Consistency Computer Science cpsc322, Lecture 12
Chapter 11 :: Logic Languages
CSPs: Search and Arc Consistency Computer Science cpsc322, Lecture 12
Prolog a declarative language
Prolog a declarative language
Prolog a declarative language
Chapter 12 :: Logic Languages
Chapter 12 :: Logic Languages
Prolog Concepts.
Chapter 12 :: Logic Languages
Presentation transcript:

Prolog Programming

2 DATA STRUCTURES IN PROLOG PROGRAMMING TECHNIQUES CONTROL IN PROLOG CUTS

3 DATA STRUCTURES IN PROLOG Lists in Prolog List notation is a way of writing terms Terms as Data Term correspond with list

4 Lists in Prolog The simplest way of writing a list is to enumerate its elements. The list consisting of the 3 atoms a, b and c can be written as [a, b, c] The list that doesn’t have elements called empty list denoted as [ ]

5 Lists in Prolog We can also specify an initial sequence of elements and a trailing list, separated by | The list [a, b, c] can also be written as [a, b, c | [ ] ] [a, b | [c] ] [a | [b, c] ]

6 Lists : Head & Tail A special case of this notation is a list with head H and tail T, written as [H|T] The head is the first element of a list, and The tail is the list consisting of the remaining elements. The list [a, b, c] can also be separated as Head:The first element is a Tail:The list of remaining elements = [b, c]

7 Lists : Unification Unification can be used to extract the components of a list, so explicit operators for extracting the head and tail are not needed. The solution of the query Bind variable H to the head and variable T to the tail of list [a, b, c]. ?- [H | T] = [a, b, c]. H = a T = [b, c]

8 Lists : Specified terms The query (partially specified terms) The term [ a | T ] is a partial specification of a list with head a and unknown tail denoted by variable T. Similarly, [ H, b, c] is a partial specification of a list with unknown head H and tail [b, c]. These two specification to unify H = a, T =[b,c] ?- [a | T] = [H, b, c]. T = [b, c] H = a

9 Lists in Prolog Example 2 The append relation on lists is defined by the following rules: Append([ ], Y, Y). Append([H | X], Y, [H | Z]) :- append(X,Y,Z). In words, The result of appending the empty list [ ] and a list Y is Y. If the result of appending X and Y is Z, then the result of appending [H | X] and Y is [H | Z]

10 Lists : Compute Arguments The rules for append can be used to compute any one of the arguments from the other two: Inconsistent arguments are rejected ?- append([a, b], [c, d], Z). Z = [a, b, c, d] ?- append([a, b], Y, [a, b, c, d]). Y = [c, d] ?- append(X, [c, d], [a, b, c, d]). X = [a, b] ?- append(X, [d, c], [a, b, c, d]). no

11 Terms as Data The Dot operator or functor ‘.’ corresponds to make list with H and T. [H | T ] is syntactic sugar for the term.(H,T) Lists are terms. The term for the list [a, b, c] is.(H,T).(a,.(b,.(c, [])))

12 Terms as Data following terms can be drawn a tree There is a one-to-one correspondence between trees and terms.(a,.(b,.(c, []))) ∙ ∙ ∙ a b c []

13 Terms : Binary Tree Binary trees can be written as terms An atom leaf for a leaf A functor nonleaf with 2 arguments leaf nonleaf(leaf,leaf) nonleaf(nonleaf(leaf,leaf), nonleaf(leaf,leaf)) nonleaf(nonleaf(leaf,leaf),leaf) nonleaf(leaf,nonleaf(leaf,leaf))

14 List : tree Example 3 A binary search tree is either empty, or it consists of a node with two binary search trees as subtrees. Each node holds an integer. Smaller elements appear in the left subtree of a node and larger elements appear in the right subtree. Let a term node(K,S,T) represent a tree K ST

15 Binary search trees

Binary search trees The rules define a relation member to test whether an integer appear at some node in a tree. The two arguments of member are an integer and a tree. member(K,_,_). member(K, node(N,S,_)) :- K < N, member(K, S). member(K, node(N,_,T)) :- K > N, member(K, T).

17 PROGRAMMING TECHNIQUES The strengths of Prolog namely, backtracking and unification. Backtracking allows a solution to be found if one exists Unification allows variables to be used as placeholders for data to be filled in later. Careful use of the techniques in this section can lead to efficient programs. The programs rely on left-to-right evaluation of subgoals.

18 Guess and Verify A guess-and-verify query has the form Where guess(S) and verify(S) are subgoals. Prolog respond to a query by generating solutions to guess(S) until a solution satisfying verify(S) is found. Such queries are also called generate-and-test queries. Is there an S such that guess(S) and verify(S)?

19 Guess and Verify Similarly, a guess-and-verify rule has the following form: Example Conslusion(…) if guess(…,S,…) and verify(…,S,…) overlap(X, Y) :- member(M, X), member(M, Y). Two lists X and Y overlap if there is some M that is a member of both X and Y. The first goal member(M, X) guesses an M from list X, and the second goal member(M, Y) verifies that M also appears in list Y.

20 The rules for member are member(M, [M |_]). Member(M, [_ |T]) :- member(M, T). The first rule says that M is a member of a list with head M. The second rule says that M is a member of a list if M is a member of its tail T.

21 Consider query These query The first goal in this query generates solutions and the second goal tests to see whether they are acceptable. ?- overlap([a,b,c,d],[1,2,c,d]). yes ?- member(M,[a,b,c,d]),member(M,[1,2,c,d]).

22 Consider query The solutions generated by the first goal are Test the second goal ?- member(M,[a,b,c,d]). M = a; M = b; M = c; M = d; no ?- member(a,[1,2,c,d]). no ?- member(b,[1,2,c,d]). no ?- member(c,[1,2,c,d]). yes

23 Hint Since computation in Prolog proceeds from left to right, the order of the subgoals in a guess-and-verify query can affect efficiency. Choose the subgoal with fewer solutions as the guess goal. Example of the effect of goal order ?- X = [1,2,3], member(a,X). no ?- member(a,X), X = [1,2,3]). [infinite computation]

24 Variables as Placeholders in Terms Variables have been used in rules and queries but not in terms representing objects. Terms containing varibales can be used to simulate modifiable data structures; The variables serve as placeholders for subterms to be filled in later.

25 Represent Binary Trees in Terms The terms leaf and nonleaf(leaf,leaf) are completely specified. leaf nonleaf(leaf,leaf)

26 Partially specified list The example list [a, b | X] has Its first element : a Its second element : b Do not yet know what X represents “Open list” if its ending in a variable, referred “end marker variable” “Close list” if it is not open.

27 How prolog know variable Prolog used machine-generated variables, written with a leading underscore (“_”) followed by an integer. ?- L = [a, b | X]. L = [a, |_G172] X = _G172 Yes

28 Prolog generates fresh variables each time it responds to a query or applies a rule. An open list can be modified by unifying its end marker ?- L = [a, b | X], X = [c,Y]. L = [a,b,c |_G236] X = [c,_G236] Y = _G236 Yes

29 Extending an open list by unifying its end marker. ab LX _172 ab LX _236 c (a) Before X is bound.(b) After X = [c | Y].

30 Unification of an end-marker variable is akin to an assignment to that variable. List L changes from [a, b | _172]  [a, b, c | _236] when _172 unifies with [c | _236] Advantage of working with open lists is that the end of a list can be accessed quickly.

31 Open list implement queues when a queue is created, where L is an open list with end marker E When element a enters queue Q, we get queue R. When element a leaves queue Q, we get queue R. q(L,E) enter(a,Q,R) leave(a,Q,R)

32 Open list implement queue ?- setup(Q). ?- setup(Q), enter(a,Q,R). ?- setup(Q), enter(a,Q,R), leave(S,R,T). ?- setup(Q), enter(a,Q,R), enter(b,R,S), leave(X,S,T),leave(Y,T,U), wrapup(q([],[])). setup(q(X,X)). enter(A, q(X,Y), q(X,Z)) :- Y = [A | Z]. leave(A, q(X,Z), q(Y,Z)) :- Y = [A | Y]. wrapup(q([],[])).

33 Test queue ?-setup(Q),enter(a,Q,R),enter(b,R,S),leave(X,S,T), leave(Y,T,U),wrapup(U). Q = q([a, b], [a, b]) R = q([a, b], [b]) S = q([a, b], []) X = a T = q([b], []) Y = b U = q([], []) Yes ?-

34 Operations on a queue Q _1 R _2 a a T _3 b Q QR setup(Q) enter(a,Q,R) enter(b,R,S)

35 Operations on a queue a T _3 b X leave(X,S,T) a T _3 b Y leave(Y,T,U)

36 Internal Prolog A queue q(L,E) consists of open list L with end marker E. The arrows from Q therefore go to the empty open list _1 with end marker _1. setup(q(X,X)). ?-setup(Q). Q = q(_1,_1) yes

37 Second goal To enter A into a queue q(X,Y), bind Y to a list [A|Z], where Z is a fresh end marker, and return q(X,Z). enter(A,q(X,Y),q(X,Z)):- Y = [A|Z]. ?-setup(Q),enter(a,Q,R). Q = q([a|_2], [a|_2]) R = q([a|_2], _2) Unifies _1 with [a|_2],where _2 is a fresh end marker

38 When an element leaves a queue q(L,E), the resulting queue has the tail of L in place of L. Note in the diagram to the right of leave(X,S,T) that the open list for queue T is the tail of the open list for S. The final goal wrapup(U) checks that the enter and leave operations leave U in an initial state q(L,E), where L is an empty openlist with end marker E.

39 Difference Lists Difference List are a technique for coping with such changes. Difference List consists of a list and its suffix. We write this difference list as dl(L,E).

40 Contents of Difference List The contents of the difference list consist of the elements that are in L but not in E. Examples of difference lists with contents [a,b] are dl([a,b],[]). Dl([a,b,c],[c]). Dl([a,b|E],E). Dl([a,b,c|F],[c|F]).

41 CONTROL IN PROLOG In the informal equation “Logic” refers to the rules and queries in a logic program and “control” refers to how a language computes a response to a query. algorithm = logic + control

42 CONTROL IN PROLOG Control in Prolog is characterized by two decisions Goal order : Choose the leftmost subgoal. Rule order : Select the first applicable rule. The response to a query is affected both by goal order within the query and by rule order with in the database of facts and rules.

43 CONTROL IN PROLOG start with a query as the current goal; while the current goal is nonempty do choose the leftmost subgoal; if a rule applies to the subgoal then select the first applicable rule; form a new current goal else backtrack end if end while; succeed

44 Example A sublist S of Z can be specified in the following seemingly equivalent ways: preffix X of Z and suffix S of X. suffix S of X and prefix X of Z. appen1([],Y,Y). appen1([H|X],Y,[H|Z]):- appen1(X,Y,Z). Prefix(X,Z) :- appen1(X,Y,Z). Suffix(Y,Z) :- appen1(X,Y,Z). appen2([H|X],Y,[H|Z]):- appen2(X,Y,Z). appen2([],Y,Y).

45 Queries The corresponding queries usually produce the same responses. Rule order can also make a difference. ?-prefix(X,[a,b,c]),suffix([e],X). no ?-suffix([e],X),prefix(X,[a,b,c]). [infinite computation]

46 Queries ?- appen1(X,[c],Z). X = [] Z = [c] ; X = [_G230] Z = [_G230, c] ; X = [_G230, _G236] Z = [_G230, _G236, c] ; ?- appen2(X,[c],Z). New Solutions are produced on demand for

47 Unification an Substitutions Unification is central to control in Prolog Substitution is a function from variables to terms

48 Applying a Rule to a Goal A rule applies to a subgoal G if its head A unifies with G Variables in the rule are renamed before unification to keep them distinct from variables in the subgoal. A :- B 1, B 2, …, B n

49 A computation that succeeds without backtracking GOAL Suffix([a],L),prefix(L,[a,b,c]). suffix([a],L) if append(_1,[a],L). Append(_1,[a],L),prefix(L,[a,b,c]). {_1  [],L  [a]} append([],[a],[a]). Prefix([a],[a,b,c]). prefix([a],[a,b,c]) if append([a],_2,[a,b,c]) append([a],_2,[a,b,c]). prefix([a],[a,b,c]) if append([],_2,[b,c]) Append([],_2,[b,c]). {_2  [b,c]}append([],[b,c],[b,c]) yes

50 Prolog Search Trees

51 Goal Order Changes Solutions

52 Cuts A cut prunes or “cuts out” and unexplored part of a Prolog search tree. Cuts can therefore be used to make a computation more efficient by eliminating futile searching and backtracking. Cuts can also be used to implement a form of negation

53 Cuts A cut, written as !, appears as a condition within a rule. When rule is applied, the cut tells control to backtrack past C j-1,…,C 1,B, without considering any remaining rules for them. B :- C 1,…, C j-1, !,C j+1,…,C k

54 A cut as the First Condition Consider rules of the form If the goal C fails, then control backtracks past B without considering any remaining rules for B. Thus the cut has the effect of making B fail if C fails. B :- !, C.

55 Example b :- c. b :- d. b :- e. b,G c,G e,G X d,G !,d,G d,G b :- c. b :- !,d. b :- e.

56 Example ?-a(X). a(1) :- b; a(2) :- e; b :- c. b :- d. a(1) :- b; a(2) :- e; b :- !,c. b :- d. a(X) be cd Yes X=2 Yes X=1 backtrack a(X) be !cd Yes X=2 backtrack c

57 The Effect of Cut As mentioned earlier, when a rule is applied during a computation The cut tells control to backtrack past C j- 1,..C 1,B without considering any remaining rules for them. The effect of inserting a cut in the middle of a guess-and-verify rule. B :- C 1,…, C j-1, !,C j+1,…,C k

58 The Effect of Cut The right side of a guess-and-verify rule has the form guess(S), verify(S), where guess(S) generates potential solutions until one satisfying verify(S) is found. The effect of insering a cut between them, as is to eliminate all but the first guess. Conclusion(S) :- guess(S), !, verify(S)

59 a(X) :- b(X). a(X) :- f(X). b(X) :- g(X),v(X). b(X) :- X = 4, v(X). g(1). g(2). g(3). v(X). f(5) a(X) :- b(X). a(X) :- f(X). b(X) :- g(X),!,v(X). b(X) :- X = 4, v(X). g(1). g(2). g(3). v(X). f(5) (a) (b)

60 a(Z) b(Z)f(5) g(Z),v(Z)v(4) v(1)v(2)v(3) a(Z) b(Z)f(5) g(Z),!,v(Z)v(4) !v(X) v(1) v(2)v(3) (a) (b)

61 Negation as Failure The not operator in Prolog is implemented by the rules not(X) :- X, !, fail. not(_).