© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there.

Slides:



Advertisements
Similar presentations
© Johan Bos Logic Programming About the course –Taught in English –Tuesday: mostly theory –Thursday: practical work [lab] Teaching material –Learn Prolog.
Advertisements

CS4026 Formal Models of Computation Part II The Logic Model Lecture 6 – Arithmetic, fail and the cut.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 10: Cuts and Negation Theory –Explain how to control Prolog`s backtracking behaviour with.
Computer Science CPSC 322 Lecture 25 Top Down Proof Procedure (Ch 5.2.2)
Chapter 11 :: Logic Languages
Prolog.
Declarative Programming Lists in PROLOG Autumn 2014.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 6: More Lists Theory –Define append/3, a predicate for concatenating two lists, and illustrate.
Prolog Programming (Volume 5) Dr W.F. Clocksin. List cells + Unification = Great Idea Normally we use ‘proper lists’, which are defined according to the.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 6: More Lists Theory –Define append/3, a predicate for concatenating two lists, and illustrate.
Prolog: List © Patrick Blackburn, Johan Bos & Kristina Striegnitz.
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.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 1 Introduction to Prolog.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 11: Database Manipulation and Collecting Solutions Theory –Discuss database manipulation in.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 11: Database Manipulation and Collecting Solutions Exercises –Solutions to exercises LPN chapter.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there.
Prolog Recursion Pepper. A rule with that calls itself is_digesting(X,Y) :- just_ate(X,Y). is_digesting(X,Y) :- just_ate(X,Z), is_digesting(Z,Y). 2 rules.
Prolog: Unification & Recursion © Patrick Blackburn, Johan Bos & Kristina Striegnitz.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 10 Exercises –Solutions to Exercises of LPN chapter 9 Theory –Explain how to control Prolog`s.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Logic Programming About the course –Taught in English –Tuesday: mostly theory –Thursday: practical.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 5: Arithmetic Theory –Introduce Prolog`s built-in abilities for performing arithmetic –Apply.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 7: Definite Clause Grammars Theory –Introduce context free grammars and some related concepts.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 4: Lists Theory –Introduce lists, an important recursive data structure often used in Prolog.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 2 Theory –Unification –Unification in Prolog –Proof search Exercises –Correction exercises.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 9: A closer look at terms Theory –Introduce the == predicate –Take a closer look at term structure.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 5: Arithmetic Theory –Introduce Prolog`s built-in abilities for performing arithmetic –Apply.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 4: Lists Theory –Introduce lists, an important recursive data structure often used in Prolog.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Horn clauses A literal is an atomic formula or its negation A clause is a disjunction of literals.
Notes for Chapter 12 Logic Programming The AI War Basic Concepts of Logic Programming Prolog Review questions.
LING 388: Language and Computers Sandiway Fong Lecture 5.
LING 388: Language and Computers Sandiway Fong Lecture 4.
CS 321 Programming Languages and Compilers Prolog part 2.
Agile Software Development Lab 2008 Dr. Günter Kniesel, Daniel Speicher, Tobias Rho, Pascal Bihler Spring 2008 R O O T S Prolog - Part 1 Alexis Raptarchis.
ITEC 380 Organization of programming languages Lecture 9 – Prolog.
CS 403: Programming Languages Lecture 19 Fall 2003 Department of Computer Science University of Alabama Joel Jones.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3 “Input & Output”, Negation, Search.
LING 388: Language and Computers Sandiway Fong Lecture 6.
30/09/04 AIPP Lecture 3: Recursion, Structures, and Lists1 Recursion, Structures, and Lists Artificial Intelligence Programming in Prolog Lecturer: Tim.
CSC 270 – Survey of Programming Languages Prolog Lecture 2 – Unification and Proof Search.
PROLOG SYNTAX AND MEANING Ivan Bratko University of Ljubljana Faculty of Computer and Info. Sc. Ljubljana, Slovenia.
Rules Statements about objects and their relationships Expess ◦ If-then conditions  I use an umbrella if there is a rain  use(i, umbrella) :- occur(rain).
Introduction to Prolog. Outline What is Prolog? Prolog basics Prolog Demo Syntax: –Atoms and Variables –Complex Terms –Facts & Queries –Rules Examples.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 9: A closer look at terms Theory –Introduce the == predicate –Take a closer look at term structure.
Operators in Prolog © Patrick Blackburn, Johan Bos & Kristina Striegnitz.
Introduction to Prolog
Introduction to Prolog © Patrick Blackburn, Johan Bos & Kristina Striegnitz.
CSE 3302 Programming Languages Chengkai Li Spring 2008 Logic Programming: Prolog Lecture 21 – Prolog, Spring CSE3302 Programming Languages, UT-Arlington.
1 Knowledge Based Systems (CM0377) Lecture 6 (last modified 20th February 2002)
LING/C SC/PSYC 438/538 Lecture 15 Sandiway Fong. Did you install SWI Prolog?
CS 554: Knowledge base systems Part-4: Prolog- 2 By Dr. Syed Noman Hasany.
In The Name Of Allah Lab 03 1Tahani Aldweesh. objectives Searching for the solution’s. Declaration. Query. Comments. Prolog Concepts. Unification. Disjunction.
07/10/04 AIPP Lecture 5: List Processing1 List Processing Artificial Intelligence Programming in Prolog Lecturer: Tim Smith Lecture 5 07/10/04.
Prolog Fundamentals. 2 Review Last Lecture A Prolog program consists of a database of facts and rules, and queries (questions). –Fact:.... –Rule:... :-....
Instructor :Bayan Ghozlan الاستاذه : بيان غزلان.  البرولوغ Prolog هي لغة برمجة منطقية. وتعني برمجه المنطق programing language  تم اختراع اللغة بواسطة.
Logic Programming Lecture 2: Unification and proof search.
Unification, Recursion and Lists
Rule Exercises Status of the Ball Definitions and Rule 15
Tests, Backtracking, and Recursion
Prolog Recursion Pepper Major portions credited to :
Chapter 11 :: Logic Languages
Prolog: cut & fail © Patrick Blackburn, Johan Bos & Kristina Striegnitz.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz
Chapter 12 :: Logic Languages
Chapter 2 Syntax and meaning of prolog programs
Lecture 7: Definite Clause Grammars
Representations & Reasoning Systems (RRS) (2.2)
Chapter 12 :: Logic Languages
Prolog Based on: Chapter 12 of PLP “Seven languages in seven weeks”
Presentation transcript:

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Lecture 3: Recursion Theory –Introduce recursive definitions in Prolog –Four examples –Show that there can be mismatches between the declarative and procedural meaning of a Prolog program Exercises –Corrections exercises LPN chapter 2 –Exercises of LPN chapter 3

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Recursive Definitions Prolog predicates can be defined recursively A predicate is recursively defined if one or more rules in its definition refers to itself

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 1: Eating isDigesting(X,Y):- justAte(X,Y). isDigesting(X,Y):- justAte(X,Z), isDigesting(Z,Y). justAte(mosquito,blood(john)). justAte(frog,mosquito). justAte(stork,frog). ?-

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Picture of the situation X Y justAte isDigesting

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Picture of the situation X Y justAte isDigesting X Z justAte isDigesting Y

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 1: Eating isDigesting(X,Y):- justAte(X,Y). isDigesting(X,Y):- justAte(X,Z), isDigesting(Z,Y). justAte(mosquito,blood(john)). justAte(frog,mosquito). justAte(stork,frog). ?- isDigesting(stork,mosquito).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Another recursive definition p:- p. ?-

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Another recursive definition p:- p. ?- p.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Another recursive definition p:- p. ?- p. ERROR: out of memory

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 2: Decendant child(bridget,caroline). child(caroline,donna). descend(X,Y):- child(X,Y). descend(X,Y):- child(X,Z), child(Z,Y).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 2: Decendant child(anna,bridget). child(bridget,caroline). child(caroline,donna). child(donna,emily). descend(X,Y):- child(X,Y). descend(X,Y):- child(X,Z), child(Z,Y).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 2: Decendant child(anna,bridget). child(bridget,caroline). child(caroline,donna). child(donna,emily). descend(X,Y):- child(X,Y). descend(X,Y):- child(X,Z), child(Z,Y). ?- descend(anna,donna). no ?-

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 2: Decendant child(anna,bridget). child(bridget,caroline). child(caroline,donna). child(donna,emily). descend(X,Y):- child(X,Y). descend(X,Y):- child(X,Z), child(Z,Y). descend(X,Y):- child(X,Z), child(Z,U), child(U,Y). ?-

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 2: Decendant child(anna,bridget). child(bridget,caroline). child(caroline,donna). child(donna,emily). descend(X,Y):- child(X,Y). descend(X,Y):- child(X,Z), descend(Z,Y). ?-

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 2: Decendant child(anna,bridget). child(bridget,caroline). child(caroline,donna). child(donna,emily). descend(X,Y):- child(X,Y). descend(X,Y):- child(X,Z), descend(Z,Y). ?- descend(anna,donna).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 2: Search tree for descend(anna,donna) descend(anna,donna). child(anna,donna). † child(anna,_1), descend(_1,donna). descend(bridget,donna). _1 = bridget child(bridget,_2), descend(_2,donna). descend(caroline,donna). child(bridget,donna). † _2 = caroline child(caroline,donna). child(anna,bridget). child(bridget,caroline). child(caroline,donna). child(donna,emily). descend(X,Y):- child(X,Y). descend(X,Y):- child(X,Z), descend(Z,Y).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 3: Successor Suppose we use the following way to write numerals: 1. 0 is a numeral. 2. If X is a numeral, then so is succ(X).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 3: Successor numeral(0). numeral(succ(X)):- numeral(X).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 3: Successor numeral(0). numeral(succ(X)):- numeral(X). ?- numeral(succ(succ(succ(0)))). yes ?-

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 3: Successor numeral(0). numeral(succ(X)):- numeral(X). ?- numeral(X).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 3: Successor numeral(0). numeral(succ(X)):- numeral(X). ?- numeral(X). X=0; X=succ(0); X=succ(succ(0)); X=succ(succ(succ(0))); X=succ(succ(succ(succ(0))))

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 4: Addition ?- add(succ(succ(0)),succ(succ(succ(0))), Result). Result=succ(succ(succ(succ(succ(0))))) yes

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 4: Addition add(0,X,X). %% base clause ?- add(succ(succ(0)),succ(succ(succ(0))), Result). Result=succ(succ(succ(succ(succ(0))))) yes

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 4: Addition add(0,X,X). %% base clause add(succ(X),Y,succ(Z)):- %% recursive clause add(X,Y,Z). ?- add(succ(succ(0)),succ(succ(succ(0))), Result). Result=succ(succ(succ(succ(succ(0))))) yes

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Example 4: Search tree add(succ(succ(0)), succ(succ(succ(0))), R). add(succ(0), succ(succ(succ(0))), _1). R = succ(_1) add(0, succ(succ(succ(0))), _2). _1 = succ(_2) add(0,succ(succ(succ(0))),succ(succ(succ(0)))). _2 = succ(succ(succ(0))) add(0,X,X). %% base clause add(succ(X),Y,succ(Z)):- %% recursive clause add(X,Y,Z). R = succ(_1) R = succ(succ(_2)) R = succ(succ(succ(succ(succ(0)))))

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Prolog and Logic Prolog was the first reasonable attempt to create a logic programming language –Programmer gives a declarative specification of the problem, using the language of logic –The programmer should not have to tell the computer what to do –To get information, the programmer simply asks a query

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Prolog and Logic Prolog does some important steps in this direction, but nevertheless, Prolog is not a full logic programming language! Prolog has a specific way of answering queries: –Search knowledge base from top to bottom –Processes clauses from left to right –Backtracking to recover from bad choices

© Patrick Blackburn, Johan Bos & Kristina Striegnitz descend1.pl child(anna,bridget). child(bridget,caroline). child(caroline,donna). child(donna,emily). descend(X,Y):- child(X,Y). descend(X,Y):- child(X,Z), descend(Z,Y). ?- descend(A,B). A=anna B=bridget

© Patrick Blackburn, Johan Bos & Kristina Striegnitz descend2.pl child(anna,bridget). child(bridget,caroline). child(caroline,donna). child(donna,emily). descend(X,Y):- child(X,Z), descend(Z,Y). descend(X,Y):- child(X,Y). ?- descend(A,B). A=anna B=emily

© Patrick Blackburn, Johan Bos & Kristina Striegnitz descend3.pl child(anna,bridget). child(bridget,caroline). child(caroline,donna). child(donna,emily). descend(X,Y):- descend(Z,Y), child(X,Z). descend(X,Y):- child(X,Y). ?- descend(A,B). ERROR: OUT OF LOCAL STACK

© Patrick Blackburn, Johan Bos & Kristina Striegnitz descend4.pl child(anna,bridget). child(bridget,caroline). child(caroline,donna). child(donna,emily). descend(X,Y):- child(X,Y). descend(X,Y):- descend(Z,Y), child(X,Z). ?- descend(A,B).

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Summary of this lecture In this lecture we introduced recursive predicates We also looked at the differences between the declarative and the procedural meaning of Prolog programs We have identified some of the shortcomings of Prolog seen as a logical programming language

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Correction Exercise 2.1 Recall Unification Definition 1.If T 1 and T 2 are constants, then T 1 and T 2 unify if they are the same atom, or the same number. 2.If T 1 is a variable and T 2 is any type of term, then T 1 and T 2 unify, and T 1 is instantiated to T 2. (and vice versa) 3.If T 1 and T 2 are complex terms then they unify if: a)They have the same functor and arity, and b)all their corresponding arguments unify, and c)the variable instantiations are compatible.

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Correction Exercise bread = bread ✔ 2.'Bread' = bread ✗ 3.'bread' = bread ✔ 4.Bread = bread ✔ 5.bread = sausage ✗ 6.food(bread) = bread ✗ 7.food(bread) = X ✔ 8.food(X) = food(bread) ✔ 9.food(bread,X) = food(Y,sausage) ✔ 10.food(bread,X,beer) = food(Y,sausage,X) ✗ 11.food(bread,X,beer) = food(Y,kahuna_burger) ✗ 12.food(X) = X ✔ 13.meal(food(bread),drink(beer)) = meal(X,Y) ✔ 14.meal(food(bread),X) = meal(X,drink(beer)) ✗

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Correction Exercise 2.2 house_elf(dobby). witch(hermione). witch('McGonagall'). witch(rita_skeeter). magic(X) :- house_elf(X). magic(X) :- wizard(X). magic(X) :- witch(X). ?- magic(house_elf). false. %% actually raises exception: wizard/1 not defined

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Correction Exercise 2.2 house_elf(dobby). witch(hermione). witch('McGonagall'). witch(rita_skeeter). magic(X) :- house_elf(X). magic(X) :- wizard(X). magic(X) :- witch(X). ?- wizard(harry). false. %% actually raises exception: wizard/1 not defined

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Correction Exercise 2.2 house_elf(dobby). witch(hermione). witch('McGonagall'). witch(rita_skeeter). magic(X) :- house_elf(X). magic(X) :- wizard(X). magic(X) :- witch(X). ?- magic(wizard). false. %% actually raises exception: wizard/1 not defined

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Correction Exercise 2.2 house_elf(dobby). witch(hermione). witch('McGonagall'). witch(rita_skeeter). magic(X) :- house_elf(X). magic(X) :- wizard(X). magic(X) :- witch(X). ?- magic('McGonagall'). true. %% actually raises exception: wizard/1 not defined

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Correction Exercise 2.2 house_elf(dobby). witch(hermione). witch('McGonagall'). witch(rita_skeeter). magic(X) :- house_elf(X). magic(X) :- wizard(X). magic(X) :- witch(X). ?- magic(Hermione). Hermione = dobby; %% actually raises exception: wizard/1 not defined Hermione = hermione; Hermione = ‘McGonagall’; Hermione = rita_skeeter;

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Correction Exercise 2.2 house_elf(dobby). witch(hermione). witch('McGonagall'). witch(rita_skeeter). magic(H). H = _1 house_elf(_1). _1 = dobby magic(X) :- house_elf(X). magic(X) :- wizard(X). magic(X) :- witch(X). H = _2 wizard(_2). EXCEPTION: wizard/1 does not exist! H = _3 witch(_3). _3 = hermione_3 = ‘McGonagall’ _3 = rita_skeeter

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Correction Exercise 2.4 word(abalone,a,b,a,l,o,n,e). word(abandon,a,b,a,n,d,o,n). word(enhance,e,n,h,a,n,c,e). word(anagram,a,n,a,g,r,a,m). word(connect,c,o,n,n,e,c,t). word(elegant,e,l,e,g,a,n,t). crosswd(V1,V2,V3,H1,H2,H3) :- word(V1,_,V1H1,_,V1H2,_,V1H3,_), word(V2,_,V2H1,_,V2H2,_,V2H3,_), word(V3,_,V3H1,_,V3H2,_,V3H3,_), word(H1,_,V1H1,_,V1H2,_,V1H3,_), word(H2,_,V2H1,_,V2H2,_,V2H3,_), word(H3,_,V3H1,_,V3H2,_,V3H3,_). Beware: this allows to use a word more than once!!

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Exercises Chapter 3 3.2, 3.3, 3.4

© Patrick Blackburn, Johan Bos & Kristina Striegnitz Next lecture Introduce lists in Prolog –Important recursive data structure in Prolog programming –Define the member/2 predicate, a fundamental Prolog tool for working with lists –Discuss the idea of recursing down lists