Logic Programming Chapter 15 Part 2. Breadth-first v Depth-first Search Suppose a query has compound goals (several propositions must be satisfied) Depth-first.

Slides:



Advertisements
Similar presentations
Artificial Intelligence: Natural Language and Prolog
Advertisements

Prolog.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 6: More Lists Theory –Define append/3, a predicate for concatenating two lists, and illustrate.
LING 388: Language and Computers Sandiway Fong Lecture 5: 9/5.
Introduction to PROLOG ME 409 Lab - 1. Introduction to PROLOG.
Prolog: List © Patrick Blackburn, Johan Bos & Kristina Striegnitz.
LING 388: Language and Computers Sandiway Fong Lecture 5: 9/8.
1 Introduction to Prolog References: – – Bratko, I., Prolog Programming.
1 Logic Programming. 2 A little bit of Prolog Objects and relations between objects Facts and rules. Upper case are variables. parent(pam, bob).parent(tom,bob).
Logic Programming Chapter 15 Part 2. Prolog Lists The list is Prolog’s basic data structure Lists are a series of Prolog terms, separated by commas Each.
INTRODUCTION TO PROLOG. PROLOG BASICS Atoms - most primitive terms that the language manipulates start with lower case letter includes strings (‘inside.
Prolog OR (disjunction) “;” is same as a logical OR “;” is same as a logical OR It is also equivalent to using separate clauses... It is also equivalent.
About prolog  History  Symbolic Programming Language  Logic Programming Language  Declarative Programming Language.
Programming Languages 2e Tucker and Noonan
CS 330 Programming Languages 12 / 02 / 2008 Instructor: Michael Eckmann.
CS 330 Programming Languages 12 / 12 / 2006 Instructor: Michael Eckmann.
For Friday Read “lectures” 1-5 of Learn Prolog Now: prolog-now/
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Controlling Backtracking Notes for Ch.5 of Bratko For CSCE 580 Sp03 Marco Valtorta.
Lisp. Versions of LISP Lisp is an old language with many variants –LISP is an acronym for List Processing language Lisp is alive and well today Most modern.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 15 Logic Programming Q: How many legs does.
LING 388: Language and Computers Sandiway Fong Lecture 4: 8/31.
CSC321: Programming Languages14-1 Programming Languages Tucker and Noonan Contents 15.1 Logic and Horn Clauses 15.2 Logic Programming in Prolog
1 CILOG User Manual Bayesian Networks Seminar Sep 7th, 2006.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 15 Logic Programming Q: How many legs does.
(9.1) COEN Logic Programming  Logic programming and predicate calculus  Prolog statements  Facts and rules  Matching  Subgoals and backtracking.
Formal Models of Computation Part II The Logic Model
FATIH UNIVERSITY Department of Computer Engineering Controlling Backtracking Notes for Ch.5 of Bratko For CENG 421 Fall03.
CS 321 Programming Languages and Compilers Prolog part 2.
Basic Lisp CIS 479/579 Bruce R. Maxim UM-Dearborn.
14/10/04 AIPP Lecture 7: The Cut1 Controlling Backtracking: The Cut Artificial Intelligence Programming in Prolog Lecturer: Tim Smith Lecture 7 14/10/04.
30/09/04 AIPP Lecture 3: Recursion, Structures, and Lists1 Recursion, Structures, and Lists Artificial Intelligence Programming in Prolog Lecturer: Tim.
15/11/04 AIPP Lecture 14: Database Manipulation1 Database Manipulation Artificial Intelligence Programming in Prolog Lecturer: Tim Smith Lecture 14 15/11/04.
For Wednesday Read “lectures” 7-10 of Learn Prolog Now Chapter 9, exs 4 and 6. –6 must be in Horn clause form Prolog Handout 2.
An Object-Oriented Approach to Programming Logic and Design Fourth Edition Chapter 6 Using Methods.
Prolog Programming in Logic. 2 SWI-Prolog SWI-Prolog is a good, standard Prolog for Windows and Linux Can be installed on Macintosh with a little more.
1 Knowledge Based Systems (CM0377) Lecture 3 (Last modified 5th February 2001)
1 COMP 205 Introduction to Prolog Dr. Chunbo Chu Week 14.
1 Prolog and Logic Languages Aaron Bloomfield CS 415 Fall 2005.
Prolog Program Style (ch. 8) Many style issues are applicable to any program in any language. Many style issues are applicable to any program in any language.
Logic Programming and Prolog Goal: use formalism of first-order logic Output described by logical formula (theorem) Input described by set of formulae.
Ch. 13 Ch. 131 jcmt CSE 3302 Programming Languages CSE3302 Programming Languages (notes?) Dr. Carter Tiernan.
Programming Languages Third Edition Chapter 4 Logic Programming.
CS 403: Programming Languages Lecture 18 Fall 2003 Department of Computer Science University of Alabama Joel Jones.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 1 Overview A good programming language is.
CS 152: Programming Language Paradigms March 5 Class Meeting Department of Computer Science San Jose State University Spring 2014 Instructor: Ron Mak
Lecture course: Heuristics & Prolog for Artificial Intelligence Applications Notes on Prolog from Professor Bruce Batchelor, DSc.
CS 152: Programming Language Paradigms March 12 Class Meeting Department of Computer Science San Jose State University Spring 2014 Instructor: Ron Mak.
Introduction to LISP Atoms, Lists Math. LISP n LISt Processing n Function model –Program = function definition –Give arguments –Returns values n Mathematical.
Programming Language Concepts Lecture 17 Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Logic Programming.
Logic Programming Tarik Booker. What will we cover?  Introduction  Definitions  Predicate Calculus  Prolog  Applications.
Knowledge Based Information System
For Monday Exam 1 is Monday Takehome due Prolog Handout 3 due.
In The Name Of Allah Lab 03 1Tahani Aldweesh. objectives Searching for the solution’s. Declaration. Query. Comments. Prolog Concepts. Unification. Disjunction.
For Friday No reading Prolog Handout 2. Homework.
Prolog 3 Tests and Backtracking 1. Arithmetic Operators Operators for arithmetic and value comparisons are built-in to Prolog = always accessible / don’t.
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.
CS 330 Programming Languages 12 / 06 / 2007 Instructor: Michael Eckmann.
Section 16.5, 16.6 plus other references
Programming Languages 2nd edition Tucker and Noonan
For Friday No reading Prolog handout 3 Chapter 9, exercises 9-11.
For Wednesday Read “lectures” 7-10 of Learn Prolog Now:
Chapter 11 :: Logic Languages
Chapter 12 :: Logic Languages
Chapter 3: Prolog (Lists, Arithmetic, Operators)
Programming Paradigms and Languages
Programming Techniques
Programming Languages 2nd edition Tucker and Noonan
Chapter 12 :: Logic Languages
Presentation transcript:

Logic Programming Chapter 15 Part 2

Breadth-first v Depth-first Search Suppose a query has compound goals (several propositions must be satisfied) Depth-first searches prove the first goal before looking at the others. Breadth-first works on goals in parallel. Prolog uses the depth-first approach.

Backtracking When a compound goal is being proved, it may be that a subgoal cannot be shown true. In that case, Prolog will back up and try to find another solution to a previous subgoal.

A Partial Family Tree Figure 15.3

A Small Family “Tree” Figure 15.4

Processing Queries ?- father(X, sue) Satisfied with the first comparison. X is instantiated with john. ?- mother(sue, X) Satisfied with X = nancy, X = jeff ?- mother(alice, ron) Fails

?- grandparent(Who, ron). Instantiating grandparent rule from query: Grandparent(Who,ron):- parent(Who,X),parent(X,ron). First, find a fact that satisfies parent (Who,X) This entails finding a fact to satisfy either mother (Who, X) or father(Who, X) First try: mother(mary, sue ) (“mother” rule is first) Next, find a fact that satisfies parent ( sue, ron ) By satisfying either mother(sue, ron) or father(sue, ron)

Prolog Lists The list is Prolog’s basic data structure Lists are a series of Prolog terms, separated by commas Each list element can be a(n) –atom –variable –sublist –etc.

Examples of Lists The empty list: [ ] List with embedded list: [girls, [like, boys]] List with variables: [x, V1, y, V2, [A, B]] –V1, V2, A, and B are variables that may be instantiated with data at a later time. Multi-type lists: [boy, [1, 2, 3], ran] [A, _, Z] –The _ means “don’t care” – sometimes referred to as an unbound variable.

Working with Lists [Head|Tail] notation simplifies processing: –Head represents the first list element, Tail represents everything else. –Head can be any Prolog term (list, variable, atom, predicate, etc.) –If L = [a, b, c] then Head = a and Tail = [b,c] –Tail is always another list. What is the head of [a]? The tail? Compare to car and cdr in Lisp, Scheme

The append Function append is a built-in Prolog function that concatenates two lists. append(A, B, L) concatenates the lists A and B and returns them as L. append([my, cat], [is, fat], L). yields L = [my, cat, is, fat] Compare to Scheme function

The Append Function append(L1, L2, L3): append([], X, X). %base case append([Head|Tail], Y, [Head|Z]) :- append(Tail, Y, Z). This definition says: –The empty list concatenated with any list (X) returns an unchanged list (X again). –If Tail is concatenated with Y to get Z, then a list one element larger [Head | Tail] can be concatenated with Y to get [Head | Z].

?- Append([english, russian], [spanish], L). H=english, T=[russian], Y=[spanish], L=[english,Z] 1 and Z = [russian, spanish] Append([russian],[spanish], [Z]). H = russian, T=[ ], Y=[spanish], Z=[russian|Z 1 ] 2 Append([ ], [spanish], [Z 1 ]). So Z1= [spanish] X=[spanish], Z 1 =[spanish] 3 Append([ ], [spanish], [spanish]).

Using append prefix(X, Z) :- append(X, Y, Z). (finds all prefixes of a list Z) suffix(Y, Z) :- append(X, Y, Z). (finds all suffixes of Z)

Recursion/ member The function returns ‘yes’ or ‘true’ if X is a member of a given list. member(X, [X | _ ]). member(X, [ _ | Y]) :- member(X, Y).

Member(X,Y) The test for membership succeeds if either: –X is the head of the list [X |_] –X is not the head of the list [_| Y], but X is a member of the list Y. Notes: pattern matching governs tests for equality. Don ’ t care entries (_) mark parts of a list that aren ’ t important to the rule.

Naming Lists Defining a set of lists: a([single]). a([a, b, c]). a([cat, dog, sheep]). When a query such as a(L), prefix(X, L). Is posed, all three lists will be processed. Other lists, such as b([red, yellow, green]), would be ignored.

a([single]). a([a, b, c]). a([cat, dog, sheep]). prefix(X, Z) :- append(X, _, Z). suffix(Y, Z) :- append(_, Y, Z). % To make queries about lists in the database: % suffix(X, [the, cat, is, fat]). % a(L), prefix(X, L). A Sample List Program

?- a(L), prefix(X, L). L = [single] X = [] ; L = [single] X = [single] ; L = [a, b, c] X = [] ; L = [a, b, c] X = [a] ; L = [a, b, c] X = [a, b] ; L = [a, b, c] X = [a, b, c] ; L = [cat, dog, sheep] X = [] Sample Output Based on the program on the previous slide.

35 ?- a(L), append([cat], L, M). L = [single] M = [cat, single] ; L = [a, b, c] M = [cat, a, b, c] ; L = [cat, dog, sheep] M = [cat, cat, dog, sheep] ; Sample Output

Recursive Factorial Program To see the dynamics of a function call, use the trace function. For example,given the following function: factorial(0, 1). factorial(N, Result):- N > 0, M is N-1, factorial(M, SubRes), Result is N * SubRes. %is ~ assignment

Logic Programming : Practical Aspects 15.3: Example Applications

Using the Trace Function At the prompt, type “trace.” Then type the query. Prolog will show the rules it uses and the instantiation of unbound constants. Useful for understanding what is happening in a search process, or in a recursive function.

Tracing Output ?- trace(factorial/2). ?- factorial(4, X). Call: ( 7) factorial(4, _G173) Call: ( 8) factorial(3, _L131) Call: ( 9) factorial(2, _L144) Call: ( 10) factorial(1, _L157) Call: ( 11) factorial(0, _L170) Exit: ( 11) factorial(0, 1) Exit: ( 10) factorial(1, 1) Exit: ( 9) factorial(2, 2) Exit: ( 8) factorial(3, 6) Exit: ( 7) factorial(4, 24) X = 24 These are temporary variables These are levels in the search tree

Tracing 2 ?- trace(factorial/2). % factorial/2: [call, redo, exit, fail] true. [debug] 3 ?- factorial(3, Result). T Call: (6) factorial(3, _G521) T Call: (7) factorial(2, _G599) T Call: (8) factorial(1, _G602) T Call: (9) factorial(0, _G605) T Exit: (9) factorial(0, 1) T Exit: (8) factorial(1, 1) T Exit: (7) factorial(2, 2) T Exit: (6) factorial(3, 6) Result = 6 User-entered commands are in red; other output is generated by the Prolog runtime system.

%remove() removes an element from a list. %To Call: remove(a, List, Remainder). % or remove(X, List, Remainder). % First parameter is the removed item, % 2nd parameter is the original list, % third is the final list remove(X, [X|R], R). remove(X, [H|R], [H|S]):- remove(X, R, S).

18 ?- trace. Yes 18 ?- remove(a, [b, d, a, c], R). Call: (7) remove(a, [b, d, a, c], _G545) ? creep Call: (8) remove(a, [d, a, c], _G608) ? creep Call: (9) remove(a, [a, c], _G611) ? creep Exit: (9) remove(a, [a, c], [c]) ? creep Exit: (8) remove(a, [d, a, c], [d, c]) ? creep Exit: (7) remove(a, [b, d, a, c], [b, d, c]) ? creep R = [b, d, c]

Revisiting The Factorial Function Evaluation of clauses is from left to right. Note the use of is to temporarily assign values to M and Result

Trace of Factorial (4)

Simple Arithmetic Integer “variables” and integer operations are possible, but imperative language “assignment statements” don’t exist.

Sample Program speed(fred, 60). speed(carol, 75). time(fred, 20). time(carol, 21). distance(X, Y) :- speed(X, Speed), time(X, Time), Y is Speed * Time. area_square(S, A) :- A is S * S.

Prolog Operators is can be used to cause a variable to be temporarily instantiated with a value. Compare to assignment statements in declarative languages, where variables are permanently assigned values. The not operator is used to indicate goal failure. For example not(P) is true when P is false.

Arithmetic Originally, used prefix notation +(7, X) Modern versions have infix notation X is Y * C + 3. Qualification: Y and C must be instantiated, as in the Speed program, but X cannot be (It’s not a traditional assignment statement). –X = X + Y is illegal. –X is X + Y is illegal. “ Arguments are not sufficiently instantiated ”

More About Arithmetic Example of simple arithmetic, using something similar to Python’s calculator mode (not as part of a program). –?- X is –X = 10 –Yes Arithmetic operators: +, -, *, /, ^ ( exponentiation) Relational operators:, =, = =, \=

The cut & not Operators The cut (!) is used to control backtracking. It tells Prolog not to retry the series of goals that precede the cut symbol (if the goals have succeeded once). Reasons: Faster execution, saves memory Not(P) will succeed when P fails. –In some places it can replace the ! Operator.

Example: Revised Factorial factorial(N, 1):- N < 1, !. factorial(N, Result):- M is N – 1, factorial(M, P), Result is N * P. factorial(N, 1):- N < 1. factorial(N, Result):- not(N < 1), M is N–1, factorial(M, P), Result is N * P.

When Cut Might Be Used (Clocksin & Mellish) To tell Prolog that it has found the right rule: –“if you get this far, you have picked the correct rule for this goal.” To tell Prolog to fail a particular goal without trying other solutions: –“if you get to here, you should stop trying to satisfy the goal.” “if you get to here, you have found the only solution to this problem and there is no point in ever looking for alternatives.”

Assert - Adding Facts ?- assert(mother(jane, joe)). adds another fact to the database. More sophisticated: assert can be embedded in a function definition so new facts and rules can be added to the database in real time. –Useful for learning programs, for example.

Symbolic Differentiation Rules Figure 15.9

Prolog Symbolic Differentiator Figure 15.10

Search Tree for the Query d(x, 2*x+1, Ans) Figure 15.11

Executing a Prolog Program Create a file containing facts and rules; e.g., familytree.pl Follow instructions in handout, which will be available Wednesday.

SWIplEdit “compile” error If SWI-Prolog finds an error in the.pl file it will give a message such as ERROR: c:/temp/prologprogs/remove.pl: 18:0: Syntax error: Illegal start of term (18 is the line number)

Runtime Error Message The function samelength was called with one parameter when it needed 2: 21 ?- samelength(X). ERROR:Undefined procedure: samelength/1 ERROR:However, there are definitions for: samelength/2

Runtime Errors Here, the error is an error of omission: 22 ?- samelength([a, b, c,],[a, b]) | Queries must end with a period. If you hit enter without typing a period SWIpl just thinks you aren’t through.

Using SWI Prolog If there is an error that you can’t figure out (for example you don’t get any answers, you don’t get a prompt, typing a semicolon doesn’t help) try “interrupt” under the Run button. If changes are made to the program, don’t forget to save the file and “consult” again.