Programming Languages 2e Tucker and Noonan

Slides:



Advertisements
Similar presentations
Chapter 11 :: Logic Languages
Advertisements

Prolog.
Introduction to PROLOG ME 409 Lab - 1. Introduction to PROLOG.
Prolog The language of logic. History Kowalski: late 60’s Logician who showed logical proof can support computation. Colmerauer: early 70’s Developed.
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.
CS 330 Programming Languages 12 / 02 / 2008 Instructor: Michael Eckmann.
Chapter 12 - Logic Programming
CS 330 Programming Languages 12 / 12 / 2006 Instructor: Michael Eckmann.
For Friday Read “lectures” 1-5 of Learn Prolog Now: prolog-now/
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 15 Logic Programming Q: How many legs does.
LING 364: Introduction to Formal Semantics Lecture 3 January 19th.
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.
ISBN Chapter 16 Logic Programming Languages.
Logic Programming Languages
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.
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.
Chapter 16 Logic Programming Languages. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Chapter 16 Topics Introduction A Brief Introduction to.
1-1 Introduction Logic programming languages, sometimes called declarative programming languages Express programs in a form of symbolic logic Use a logical.
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.
15/11/04 AIPP Lecture 14: Database Manipulation1 Database Manipulation Artificial Intelligence Programming in Prolog Lecturer: Tim Smith Lecture 14 15/11/04.
Introduction to Prolog Asst. Prof. Dr. Senem Kumova Metin Revised lecture notes of “Concepts of Programmig Languages, Robert W. Sebesta, Ch. 16”
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.
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.
CHAPTER 15 & 16 Functional & Logic Programming Languages.
1 COMP 205 Introduction to Prolog Dr. Chunbo Chu Week 14.
1 Prolog and Logic Languages Aaron Bloomfield CS 415 Fall 2005.
Programming Languages Tucker and Noonan – 2e Chapter 15 – Part 1 Logic Programming “Q: How many legs does a dog have if you call its tail a leg? A: Four.
Logic Programming Languages Session 13 Course : T Programming Language Concept Year : February 2011.
CS 363 Comparative Programming Languages Logic Programming Languages.
Logic Programming and Prolog Goal: use formalism of first-order logic Output described by logical formula (theorem) Input described by set of formulae.
Automated Reasoning Early AI explored how to automated several reasoning tasks – these were solved by what we might call weak problem solving methods as.
Ch. 13 Ch. 131 jcmt CSE 3302 Programming Languages CSE3302 Programming Languages (notes?) Dr. Carter Tiernan.
CS 337 Programming Languages Logic Programming I (Logic, Intro to Prolog)
© Kenneth C. Louden, Chapter 12 - Logic Programming Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden.
Programming Languages Third Edition Chapter 4 Logic Programming.
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.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 1 Overview A good programming language is.
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.
ISBN Chapter 16 Logic Programming Languages.
Knowledge Based Information System
In The Name Of Allah Lab 03 1Tahani Aldweesh. objectives Searching for the solution’s. Declaration. Query. Comments. Prolog Concepts. Unification. Disjunction.
Artificial Intelligence CIS 342 The College of Saint Rose David Goldschmidt, Ph.D.
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.
Introduction to Prolog Asst. Prof. Dr. Senem Kumova Metin Revised lecture notes of “Concepts of Programmig Languages, Robert W. Sebesta, Ch. 16”
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.
Prolog Fundamentals. 2 Review Last Lecture A Prolog program consists of a database of facts and rules, and queries (questions). –Fact:.... –Rule:... :-....
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
Prolog a declarative language
For Friday No reading Prolog handout 3 Chapter 9, exercises 9-11.
For Wednesday Read “lectures” 7-10 of Learn Prolog Now:
Prolog fundamentals Module 14.2 COP4020 – Programming Language Concepts Dr. Manuel E. Bermudez.
Logic Programming Languages
Chapter 11 :: Logic Languages
Prolog a declarative language
Prolog a declarative language
Prolog a declarative language
Logic Programming Language
Programming Languages 2nd edition Tucker and Noonan
Presentation transcript:

Programming Languages 2e Tucker and Noonan Chapter 15 – part 2 Logic Programming “Q: How many legs does a dog have if you call its tail a leg? A: Four. Calling a tail a leg doesn’t make it one.” Abraham Lincoln

Review Prolog is a logic-based language Its syntax is based on Horn clauses, a predicate form derived from the predicate calculus. It is also a declarative language Prolog programs describe goals and provide facts and rules for the Prolog system to use in searching for a goal solution. Compare to imperative languages, which describe algorithms and specify the exact steps required to achieve a goal.

Review Propositions: statements which are either true or false; e.g., “my dog is black” Propositions can be represented by symbols, combined with logical operators, and have truth values based on the individual propositions; e.g. p Λ q is true only if both p and q are true. Predicates: Propositions with variables, and/or quantifiers: (for all) (there exists) x(dog(x) Λ black(x)); (x)(dog(x) → black(x))

Review: Basic Program Elements A Prolog program consists of terms: Atoms: literal strings or numbers Variables: consist of letters and underscores, must start with an upper-case letter Atoms are distinguished from variables because atoms start with a lower-case letter Prolog variables aren’t the same as variables in imperative languages; they don’t represent values. They are temporarily bound to objects/values during resolution. Structures: functor(parameters) Structures are predicates

Review: Facts and Rules Prolog facts are headless Horn clauses: student(jack, cs424). sweet(sugar). Prolog rules are headed Horn clauses: fattening(X) :- sweet(X). driversLicense(X) :- sixteen(X), passTest(X).

Review: Queries Prolog programs consist of facts and rules. Users describe goal states by posing queries. Goals are described by assertions that state the characteristics of the desired goal. Using the facts and rules in the program, the Prolog system attempts to find a solution to the query.

Review Prolog uses resolution theorem proving, instantiation, and unification to find goal states. The search process is a backtracking approach: in case one goal cannot be satisfied, back up to the nearest previous goal state and try another approach.

Example Suppose a program has these facts & rules: mother(sue). mother(jane). female(X) :- mother(X). To prove/disprove the goal female(jane). First find the fact mother(sue). Reject. Next find mother(jane). Matches on jane “Unify” mother(X) in the rule and mother(jane) in the fact (by instantiating X with jane) to infer female(jane).

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) The query is 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 father (Who, X) or mother(Who, X) First try: father(john, sue) - “father” rule is first Next, find a fact that satisfies parent(sue, ron) This does not succeed,

?- grandparent(Who, ron). Must satisfy both subgoals with same values Grandparent(Who,ron):- parent(Who,X),parent(X,ron). The first attempt, instantiating parent(Who, X) as parent(john,sue), failed because the second subgoal, parent(sue,ron), could not be proved. Backtrack to parent(Who, X) and use father(john, bill) fact next. Instantiate Who=john, X=bill, and try to satisfy second subgoal, parent(bill, ron). Success; because father(bill, ron) is a fact. Who = john, so grandparent(john, 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?

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]

The Append Function append(L1, L2, L3): This definition says: 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|Z1] 2 Append([ ], [spanish], [Z1]). So Z1= [spanish] X=[spanish], Z1=[spanish] 3 Append([ ], [spanish], [spanish]).

Recursion/ member The function returns ‘yes’ 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.

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)

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 Sample List Program 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).

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

Sample Output 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] ;

The Trace Function 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 ?- trace(factorial/2).

Tracing Output These are temporary variables ?- 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 levels in the search tree

15.2.2: Practical Aspects 15.3: Example Applications Logic Programming 15.2.2: Practical Aspects 15.3: Example Applications

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. Does not have the same effect as an assignment statement, because the effect isn’t permanent. 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 ?- x is 3 + 7. x = 10 Yes Arithmetic operators: +, -, *, /, ^ (exponentiation) Relational operators: <, >, =, =<, >=, \=

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

Evaluation of clauses is from left to right. 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)

Other Features cut (!) – controls backtracking not( ) – negation assert(C) – add to database retract(C) – removes from database

The cut & not Operators The cut (!) is used to control backtracking. It tells Prolog to stop at this point (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.”

f(X, 0) :- X < 3, !. f(X, 2) :- 3 =< X, X < 6, !. f(X, 4) :- 6 =< X. 14 ?- consult('C:/Temp/prologProgs/cut_example.pl'). % C:/Temp/prologProgs/cut_example.pl compiled 0.00 sec, 8 bytes true 15 ?- f(1, Y), 2 < Y. false 16 ?- X = 4, f(X, Y), 2 < Y. ?- X = 4, f(X, Y). X = 4, Y = 2. Since the three rules above are mutually exclusive, once one rule succeeds there is no need to try another. In the first example, rule 1 succeeds ( X < 3). If we try rules 2 and 3 they will fail. In the second case (X = 4) the second rule succeeds. The cut symbol prevents further attempts that will fail anyway.

Family Tree – Assert() 15 ?- child(jeff). ERROR: Undefined procedure: child/1 16 ?- assert(child(jeff)). Yes 17 ?- child(jeff).

Assert and Retract More sophisticated uses: 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. Retract(C) deletes a clause that matches C

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 or download the sample program from the class web page. From the Start menu select SWI-Prolog/Prolog Under the file drop-down menu select consult to load the file into the interpreter. From the Start menu select consult and browse to the file you want to execute. Double click and it will compile and be ready to query. Type queries and the interpreter will try to find answers ?- owner(X, Y). See the web page for more complete instructions.

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 “consult” again.

Test Review Chapter 5 (Last Half) Chapter 6.1 (Type Systems) Chapter 7.1-7.5 (Semantics) Chapter 12 (Imperative Programming) Chapter 13: (Object Oriented Programming) Chapter 15 (Logic Programming) Python & Scripting Languages (from the notes).

Homework Questions I Might Have Assigned In C-like languages, when an expression consists of two or more sub-expressions , such as a + f(a) or x*y + x*y++ or x/3 – y + 4(x+y), the sub-expressions are evaluated Left-to-right Right-to-left It depends on the precedence of the operators in the sub-expression It depends on the compiler.

Homework Questions I Might Have Assigned - Functions int a = 0; ….. 11 int newVal(int c) 12 { void main ( ) return 0; } ------------------------------------------ Show the stack of activation records as it would exist when line 8 has executed but before line 9 executes. Your answer should follow the format in Figure 9.8 Show the stack again after the execution of line 23, but before the main function terminates.

Homework Questions I Might Have Assigned Consider the following Horn clauses: parent(X, Y):- father(X, Y). grandparent(X,Z):- parent(X,Y), parent(Y,Z). Use resolution, as in Prolog, to deduce a new proposition from the two above

Homework Questions I Might Have Assigned Write a rule for the family tree data base that defines a sister relation For example – the sister of X has the same father or mother.