Logic Programming Some "declarative" slides on logic programming and Prolog. James Brucker.

Slides:



Advertisements
Similar presentations
Chapter 11 :: Logic Languages
Advertisements

Declarative Programming Lists in PROLOG Autumn 2014.
Introduction to PROLOG ME 409 Lab - 1. Introduction to PROLOG.
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).
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
CSE 425: Logic Programming I Logic and Programs Most programs use Boolean expressions over data Logic statements can express program semantics –I.e., axiomatic.
CSE 3302 Programming Languages Chengkai Li Spring 2008 Logic Programming: Prolog (II) Lecture 22 – Prolog (II), Spring CSE3302 Programming Languages,
CS 330 Programming Languages 12 / 12 / 2006 Instructor: Michael Eckmann.
For Friday Read “lectures” 1-5 of Learn Prolog Now: prolog-now/
1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 27: Prolog’s Resolution and Programming Techniques COMP 144 Programming Language.
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Controlling Backtracking Notes for Ch.5 of Bratko For CSCE 580 Sp03 Marco Valtorta.
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.
Prolog Programming Lecture Module 13. Objective ● What is Prolog? ● Prolog program ● Syntax of Prolog ● Prolog Control Strategy ● Execution of Prolog.
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.
1 Lecture 15: Introduction to Logic Programming with Prolog (Section 11.3) A modification of slides developed by Felix Hernandez-Campos at UNC Chapel Hill.
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.
1 Lecture 6 Logic Programming introduction to Prolog, facts, rules Ras Bodik Shaon Barman Thibaud Hottelier Hack Your Language! CS164: Introduction to.
30/09/04 AIPP Lecture 3: Recursion, Structures, and Lists1 Recursion, Structures, and Lists Artificial Intelligence Programming in Prolog Lecturer: Tim.
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.
1 Prolog and Logic Languages Aaron Bloomfield CS 415 Fall 2005.
Logic Programming CSC 358/ Outline Pattern matching Unification Logic programming.
Lecture 9b: Prolog Heshaam Faili University of Tehran The language of logic Concepts Examples.
Dr. Muhammed Al-Mulhem ICS An Introduction to Logical Programming.
Logic Programming Languages Session 13 Course : T Programming Language Concept Year : February 2011.
CS 363 Comparative Programming Languages Logic Programming Languages.
Ch. 13 Ch. 131 jcmt CSE 3302 Programming Languages CSE3302 Programming Languages (notes?) Dr. Carter Tiernan.
© Kenneth C. Louden, Chapter 12 - Logic Programming Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden.
CSE 3302 Programming Languages Chengkai Li Spring 2008 Logic Programming: Prolog Lecture 21 – Prolog, Spring CSE3302 Programming Languages, UT-Arlington.
Simple Data structure and computation. Solving equation? sum(X,Y,Z):- Z is X+Y. ?sum(1,R,7). is/2: Arguments are not sufficiently instantiated ^ Exception:
Logic Programming Tarik Booker. What will we cover?  Introduction  Definitions  Predicate Calculus  Prolog  Applications.
ISBN Chapter 16 Logic Programming Languages.
Dr. Muhammed Al-Mulhem ICS An Introduction to Prolog.
1-1 An Introduction to Logical Programming Sept
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.
Introduction to Prolog Asst. Prof. Dr. Senem Kumova Metin Revised lecture notes of “Concepts of Programmig Languages, Robert W. Sebesta, Ch. 16”
1-1 An Introduction to Prolog Sept Prolog statements Like other programming languages, Prolog consists of collection of statements. Prolog.
Copyright © 2009 Elsevier Chapter 11 :: Logic Languages And other online sources (see links on schedule page) Michael L. Scott Based on Programming Language.
CS 330 Programming Languages 12 / 06 / 2007 Instructor: Michael Eckmann.
Section 16.5, 16.6 plus other references
Logic Programming Languages
By P. S. Suryateja Asst. Professor, CSE Vishnu Institute of Technology
Prolog a declarative language
Logic Programming Languages
Tests, Backtracking, and Recursion
Logic Programming Languages
Chapter 11 :: Logic Languages
Prolog a declarative language
Prolog a declarative language
Prolog a declarative language
Chapter 12 :: Logic Languages
Chapter 12 :: Logic Languages
Logic Programming Language
Programming Languages 2nd edition Tucker and Noonan
CSE 3302 Programming Languages
Chapter 12 :: Logic Languages
Prolog Based on: Chapter 12 of PLP “Seven languages in seven weeks”
Presentation transcript:

Logic Programming Some "declarative" slides on logic programming and Prolog. James Brucker

Introduction to Logic Programming  Declarative programming describes what is desired from the program, not how it should be done  Declarative language: statements of facts and propositions that must be satisfied by a solution to the program real(x). proposition: x is a real number. x > 0. proposition: x is greater than 0.

Declarative Languages  what is a "declarative language"?  give another example (not Prolog) of a declarative language. SELECT * FROM COUNTRY WHERE CONTINENT = 'Asia';

Facts, Rules,...  What is a proposition?  What are facts?  What are rules?  What is a predicate?  What is a compound term?

Facts: fish(salmon). likes(cat, tuna). Predicates: fish, likes Compound terms: likes(cat, X), fish(X) Atoms: cat, salmon, tuna Rule: eats(cat,X)  likes(cat,X), fish(X).

A Really Simple Directed Graph a b c d (1) edge(a, b). (2) edge(a, c). (3) edge(c, d). (4) path(X, X). (5) path(X, Y)  edge(X, N), path(N, Y). Question: What are the...  atoms  facts  rules

Clausal Form  Problem: There are too many ways to express propositions. difficult for a machine to parse or understand  Clausal form: standard form for expressing propositions Example: path(X, Y)  edge(X, N)  path(N, Y). AntecedentConsequent

Clausal Form Example Meaning: if there is an edge from X to N and there a path from N to Y, then there is a path from X to Y. The above is also called a "headed Horn clause". In Prolog this is written as a proposition or rule: path(X, Y)  edge(X, N)  path(N, Y). path(X, Y) :- edge(X, N), path(N, Y).

Query  A query or goal is an input proposition that we want Prolog to "prove" or disprove.  A query may or may not require that Prolog give us a value that satisfies the query (instantiation). 1 ?- edge(a,b). Yes 2 ?- path(c,b). No 3 ?- path(c,X). X = c ; X = d ; No

Logical Operations on Propositions  What are the two operations that a logic programming language performs on propositions to establish a query? That is, how does it satisfy a query, such as:

Unification Unification is a process of finding values of variables (instantiation) to match terms. Uses facts. (1-3) edge(a,b). edge(a,c). edge(c,d). (Facts) (4) path(X,X). (Rule) (5) path(X,Y) := edge(X,N), path(N,Y). (Rule) ?- path(a,d).This is the query (goal). Instantiate { X=a, Y=d }, and unify path(a,d) with Rule 5. After doing this, Prolog must satisfy: edge(a,N).This is a subgoal. path(N,d).This is a subgoal.

Unification in plain English Compare two atoms and see if there is a substitution which will make them the same. How can we unify 6 with 5? Let X := a Let Y := Z 1. edge(a, b).(Fact) 5. path(X, Y) :- edge(X, N), path(N, Y). 6. path(a, Z).(Query)

Resolution Resolution is an inference rule that allows propositions to be combined.  Idea: match the consequent (LHS) of one proposition with the antecedent (RHS term) of another.  Examples are in the textbook and tutorials.

Resolution Example How can we unify 6 with 5? Let X := a Let Y := Z Resolution: 1. edge(a, b).(Fact) 5. path(X, Y) :- edge(X, N), path(N, Y). 6. path(a, Z).(Query)

Resolution Resolution is an inference rule that allows propositions to be combined.  Idea: match the consequent (LHS) of one proposition with the antecedent (RHS term) of another.  Examples are in the textbook and tutorials.

How to handle failures  Prolog can work backwards towards the facts using resolution, instantiation, and unification.  As it works, Prolog must try each of several choices.  These choices can be stored as a tree. ?- path(a,d).The goal. Unify:unify path(a,d) with Rule 5 by instantiate { X=a,Y=d } Subgoal: edge(a,N). Instantiate: N=b which is true by Fact 1. Subgoal: path(b,d). Unify: path(b,d) with Rule 5: path(b,d) :- edge(b,N),path(N,d) Failure:can't instantiate edge(b,N) using any propositions.

How to handle failures (2)  When a solution process fails, Prolog must undo some of the decisions it has made.  This is called backtracking. same as backtracking you use in recursion.  Marks a branch of the tree as failed.

How it Works (1) There are 2 search/execution strategies that can be used by declarative languages based on a database of facts. 1. Forward Chaining 2. Backward Chaining  what are the meanings of these terms?

How it Works (2) 1. Forward Chaining 2. Backward Chaining  Which strategy does Prolog use?  Under what circumstances is one strategy more effective than the other? Consider two cases: large number of rules, small number of facts small number of rules, large number of facts

PROLOG: PROgramming in LOGic The only "logic" programming language in common use.

3 Parts of a Prolog Program 1.A database contains two kinds of information.  What information is in a database? 2.A command to read or load the database.  in Scheme you can use load("filename")  in Prolog use consult('filename') 3.A query or goal to solve.

Ancestors ancestor(X,Y) :- parent(X,Y). ancestor(X,Y) :- ancestor(X,Z), ancestor(Z,Y). parent(X,Y) :- mother(X,Y). parent(X,Y) :- father(X,Y). father(bill, jill). mother(jill, sam). mother(jill, sally). File: ancestors.pl

Query the Ancestors ?- consult('/pathname/ancestors.pl'). ancestor(bill,sam). Yes ?- ancestor(bill,X). X = jill ; X = sam ; ERROR: Out of local stack ?- ancestor(X,bob). ERROR: Out of local stack

Understanding the Problem  You need to understand how Prolog finds a solution. ancestor(X,Y) :- parent(X,Y). ancestor(X,Y) :- ancestor(X,Z), ancestor(Z,Y). parent(X,Y) :- mother(X,Y). parent(X,Y) :- father(X,Y). father(bill,jill). mother(jill,sam). father(bob,sam). Depth-first search causes immediate recursion

Factorial factorial(0,1). factorial(N,N*M) :- factorial(N-1,M).  The factorial of 0 is 1.  The factorial of N is N*M if the the factorial of N-1 is M File: factorial1.pl ?- consult('/path/factorial1.pl'). ?- factorial(0,X). X = 1 Yes ?- factorial(1,Y). ERROR: Out of global stack

Query Factorial ?- consult('/path/factorial1.pl'). ?- factorial(2,2). No ?- factorial(1,X). ERROR: Out of global stack ?- 2*3 = 6. No ?- 2*3 = 2*3. Yes Problem: Arithmetic is not performed automatically. ?- 6 is 2*3. Yes ?- 2*3 is 6. No is(6,2*3). l-value = r-value ?

Arithmetic via Instantiation: is  "=" simply means comparison for identity. factorial(N, 1) :- N=0.  "is" performs instantiation if the left side doesn't have a value yet. product(X,Y,Z) :- Z is X*Y. this rule can answer the query: product(3,4,N). Answer: N = 12. but it can't answer: product(3,Y,12).

is does not mean assignment!  This always fails: N is N - 1. % sumto(N, Total): compute Total = N. sumto(N, 0) :- N =< 0. sumto(N, Total) := Total is Subtotal + N, N is N-1, always fails sumto(N, Subtotal). ?- sumto(0, Sum). Sum = 0. Yes ?- sumto(1, Sum). No

is : how to fix?  How would you fix this problem? % sumto(N, Total): compute Total = N. sumto(N, 0) :- N =< 0. sumto(N, Total) := N1 is N-1, always fails sumto(N1, Subtotal), Total is Subtotal + N. ?= sumto(5, X).

Factorial revised factorial(0,1). factorial(N,P) :- N1 is N-1, factorial(N1,M), P is M*N. Meaning:  The factorial of 0 is 1.  factorial of N is P if N1 = N-1 and factorial of N1 is M and P is M*N. File: factorial2.pl

Query Revised Factorial ?- consult('/path/factorial2.pl'). ?- factorial(2,2). Yes ?- factorial(5,X). X = 120 Yes ?- factorial(5,X). X = 120 ; ERROR: Out of local stack ?- factorial(X,120). but still has some problems... request another solution

Factorial revised again factorial(0,1). factorial(N,P) :- not(N=0), N1 is N-1, factorial(N1,M), P is M*N. File: factorial3.pl ?- factorial(5,X). X = 120 ; No ?- Makes the rules mutually exclusive.

Readability: one clause per line factorial(0,1). factorial(N,P) :- not(N=0), N1 is N-1, factorial(N1,M), P is M*N. factorial(0,1). factorial(N,P) :- not(N=0), N1 is N-1, factorial(N1,M), P is M*N. Better

Finding a Path through a Graph edge(a, b). edge(b, c). edge(b, d). edge(d, e). edge(d, f). path(X, X). path(X, Y) :- edge(X, Z), path(Z, Y). a b cd e f ?- edge(a, b). Yes ?- path(a, a). Yes ?- path(a, e). Yes ?- path(e, a). No

How To Define an Undirected Graph? edge(a, b). edge(b, c). edge(b, d). edge(d, e). edge(d, f). edge(X, Y) := not(X=Y), edge(Y, X). path(X, X). path(X, Y) :- edge(X, Z), path(Z, Y). a b cd e f ?- edge(b, a). Yes ?- path(a, b). Yes ?- path(b, e). No

Queries and Answers  When you issue a query in Prolog, what are the possible responses from Prolog? % Suppose "likes" is already in the database :- likes(jomzaap, ). % Programming Languages. Yes. :- likes(papon, ). % Chemistry. No. :- likes(Who, ). % Theory of Computing? Who = pattarin  Does this mean Papon doesn't like Chemistry?

Closed World Assumption  What is the Closed World Assumption?  How does this affect the interpretation of results from Prolog?

List Processing  [Head | Tail] works like "car" and "cdr" in Scheme.  Example: ?- [H | T ] = [a,b,c,d,e]. returns: H = a T = [b,c,d,e]  This can be used to build lists and decompose lists.  Can use [H|T] on the left side to de/construct a list: path(X, Y, [X|P]) :- edge(X, Node), path(Node, Y, P).

member Predicate  Test whether something is a member of a list ?- member(a, [b,c,d]). No.  can be used to have Prolog try all values of a list as values of a variable. ?- member(X, [a1,b2,c3,d4] ). X = a1 X = b2 X = c3

member Predicate example  Use member to try all values of a list.  Useful for problems like Queen safety enumerating possible rows and columns in a game. % dumb function to find square root of 9 squareroot9(N) :- member(N,[1,2,3,4,5,5,6,7,8,9]), 9 is N*N.

appending Lists ?- append([a,b],[c,d,e],L). L = [a,b,c,d,e]  append can resolve other parameters, too: ?- append(X, [b,c,d], [a,b,c,d] ). X = a ?- append([],[a,b,c],L). L = [a,b,c]

Defining your own 'append' append([], List, List). append([Head|Tail], X, [Head|NewTail]) :- append(Tail, X, NewTail).

Type Determination  Prolog is a weakly typed language.  It provides propositions for testing the type of a variable PREDICATE SATISFIED (TRUE) IF var(X) X is a variable nonvar(X) X is not a variable atom(A) A is an atom integer(K) K is an integer real(R) R is a floating point number number(N) N is an integer or real atomic(A) A is an atom or a number or a string functor(T,F,A) T is a term with functor F, arity A T =..L T is a term, L is a list. clause(H,T) H :- T is a rule in the program

Tracing the Solution ?- trace. [trace] ?- path(a,d). Call: (8) path(a, d) ? creep Call: (9) edge(a, _L169) ? creep Exit: (9) edge(a, b) ? creep Call: (9) path(b, d) ? creep Call: (10) edge(b, _L204) ? creep Exit: (10) edge(b, c) ? creep Call: (10) path(c, d) ? creep Call: (11) edge(c, _L239) ? creep ^ Call: (12) not(c=_G471) ? creep ^ Fail: (12) not(c=_G471) ? creep Fail: (11) edge(c, _L239) ? creep Fail: (10) path(c, d) ? creep Redo: (10) edge(b, _L204) ? creep

Solution Process StackSubstitution (Instantiation) [path(a,c), path(X,X)] [path(a,c), path(a,a)]X = a Undo. [path(a,c), path(X,X)] [path(a,c), path(c,c)]X = c Undo. (1) path(X,X). (2) path(X,Y) := edge(X,Z), path(Z,Y). ?- path(a,c).

Solution Process (2) StackSubstitution (Instantiation) [path(a,c), path(X,Y)](Rule 2) [path(a,c), path(a,Y)]X = a X = a, Y = c edge(a,Z), path(Z,c)new subgoals edge(a,b), path(b,c)X = a, Y = c, Z = b path(b,c)edge(a,b) is a fact - pop it. (1) path(X,X). (2) path(X,Y) := edge(X,Z), path(Z,Y). ?- path(a,c).

What does this do? % what does this do? sub([], List). sub([H|T], List) :- member(H, List), sub(T, List).

What does this do? % what does this do? foo([], _, []). foo([H|T], List, [H|P]) :- member(H, List), foo(T, List, P). foo([H|T], List, P) :- not( member(H, List) ), foo(T, List, P). Underscore (_) means "don't care". It accepts any value.

Max Function  Write a Prolog program to find the max of a list of numbers: max( List, X). max( [3, 5, 8, -4, 6], X). X = 8.  Strategy: use recursion divide the list into a Head and Tail. compare X to Head and Tail. Two cases: Head = max( Tail ). in this case answer is X is Head. X = max( Tail ) and Head < X. what is the base case?

Max Function % max(List, X) : X is max of List members max([X], X).base case max([H|Tail], H) :-1st element is max max(Tail, X), H >= X. max([H|Tail], X) :-1st element not max complete this case.

Towers of Hanoi % Move one disk move(1,From,To,_) :- write('Move top disk from '), write(From), write(' to '), write(To), nl. % Move more than one disk. move(N,From,To,Other) :- N>1, M is N-1, move(M,From,Other,To), move(1,From,To,_), move(M,Other,To,From). See tutorials at: and

Learning Prolog  The Textbook - good explanation of concepts  Tutorials: ml has annotated links to tutorials. s/prolog/PrologIntro.pdf last section explains how Prolog resolves queries using a stack and list of substitutions. explains Prolog syntax and semantics. nts.html has many examples