31
1 Lecture 12 Introduction to Pr Lecture 12 Introduction to Pr olog olog Logic Programming Prolog

1Lecture 12 Introduction to Prolog Logic Programming Prolog

Embed Size (px)

Citation preview

Page 1: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

11 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

Logic Programming

Prolog

Page 2: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

22 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

Prolog(Programming in Logic)

Has been around since 70’s

W.F. Clocksin, Programming in Prolog, Springer-Verlag New York Inc., 1998. Bratko, I (2001), PROLOG: programming for artificial intelligence, Third

edition, Addison-Wesley.

Prolog is an un-typed language

Prolog is a declarative programming language

Prolog is based on First Order (predicate) Logic

Prolog was selected as the language of the fifth generation computers by the Japanese

Prolog, is a suitable language for solving problems involving objects and relationships among these objects.

A Prolog program consists of facts and rules.

Page 3: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

33 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

AI programming

Relational databases

Natural languages

Machine learning

Robot planning

Symbolic solution of equations

Chemical structure analysis

Expert Systems

Mechanical Theorem Provers

Applications of Prolog

Page 4: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

44 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

Solving a problem using Prolog involvesDeclaring factsDefining rules Asking questions

Facts

Mary likes john. likes(mary, john).

Predicate(in lowercase) Arguments (in lowercase) A name beginning with a lowercase letter is an atomA fact ends with a full stop.Arguments are seperated with commas.The order of arguments is arbitrary but the order chosen must be used

consistently.A fact may have an arbitrary number of arguments.

Page 5: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

55 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

marylikes(mary, john).and the variable X are all terms.

A term may be simple or compound.

A simple term may beAn atomA number Or a variable.

A compound term consists of a functor followed by a number of arguments. The number of arguments is referred to as the arity of the functor.

All Prolog data objects are terms. For instance,

Page 6: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

66 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

Although we have to be consistent in the use of predicate and object names, they are arbitrary. We could have declared the above fact as: l(m,j). This would, however, make the program less readable.

Other examples of facts

interesting(declarative_programming).useful(declarative_programming).male(john).female(mary).father(john,mary).great(massey).has_a_job(mary).happy(john).plays(mary,john,tennis).valuable(money).gives(john,mary,money).

Page 7: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

77 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

A prolog database is a collection of facts (and rules).

likes(tom,jerry).likes(mary,john).likes(tom,mouse).likes(tom,jerry).likes(jerry,cheeze).likes(mary,fruit).likes(john,book).likes(mary,book).Likes(tom,john).

Now that we have some facts, we may ask questions.

?- likes(jerry,cheeze).yes?- likes(jerry,mary).no

Page 8: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

88 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

?-knows(mary,john).no

We are getting a no answer because we do not have a fact in the database to indicate that mary and john know each other. This does not mean that the statement is false in reality. It just means that it is false based on the knowledge available.

We may ask questions involving variables. If we were interested in objects that like john, we would formulate the following query:

?-likes(X,john).X=mary;X=tom;no

likes(tom,jerry).likes(mary,john).likes(tom,mouse).likes(tom,jerry).likes(jerry,cheeze).likes(mary,fruit).likes(john,book).likes(mary,book).likes(tom,john).

Page 9: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

99 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

Who likes what??-likes(X,Y)X=tom, Y=jerry;X=mary, Y=john;X=tom,

Y=mouse;X=tom, Y=jerry;

Prolog tries to resatisfy the question everytime we enter a semicolon “;”.

Prolog uses a pointer called a place marker to keep track of the search

for more solutions.

The variable matches anything. Every time the variable X is bound to

a value like mary in the above example, we say that X is instantiated

to that value. In the example above, X was instantiated to mary once

and to tom the next time. Another Query

likes(tom,jerry).likes(mary,john).likes(tom,mouse).likes(tom,jerry).likes(jerry,cheeze).likes(mary,fruit).likes(john,book).likes(mary,book).likes(tom,john).

Page 10: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

1010 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

Rules

Page 11: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

1111 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

In the above database we have a fact indicating that mary likes john.

This however does not make the fact that john also likes mary true. If

we wanted that to be true, we would have to add a relevant fact to the

database.

likes(john,mary).

likes(X,Y):-likes(Y,X).

Rule head if Rule body

Rules

We could make this a generalization by adding a rule to our database as follows:

Page 12: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

1212 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

Other examples of rules:

likes(john,X):-valuable(X).

To define a rule indicating that X is a bird if

it is an animal and it has feathers.

We would say,

is_a_bird(X):- is_an_animal(X),has(X,feathers).

To define the rule,X is brother of Y if

X is a male andX and Y have the same parents.

we would say

is_brother_of(X,Y):-male(X), parents(X, Father, Mother), parents(Y, Father, Mother).

Page 13: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

1313 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

male(andrew).male(john). male(george). male(greg). male(adam). female(mary). female(jennifer). female(eve). parents(john,george,mary).parents(greg,adam,eve).parents(jennifer, adam,eve).parents(andrew, adam,eve).is_brother_of(X,Y):-male(X),

parents(X, Father, Mother), parents(Y, Father, Mother).

is_sister_of(X,Y):-female(X), parents(X, Father, Mother), parents(Y, Father, Mother).

Another database

Page 14: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

1414 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

Yes?- is_sister_of(jennifer,greg).Yes?- is_brother_of(greg,X).X = greg ;X = jennifer ;X = andrew ;No

?- is_brother_of(X,Y).X = andrewY = greg ;X = andrewY = jennifer ;X = andrewY = andrew ;X = johnY = john ;X = gregY = greg ;X = gregY = jennifer ;X = gregY = andrew ;No

?- is_brother_of(greg,andrew).

male(andrew).male(john). male(george). male(greg). male(adam). female(mary). female(jennifer). female(eve). parents(john,george,mary).parents(greg,adam,eve).parents(jennifer, adam,eve).parents(andrew, adam,eve).is_brother_of(X,Y):-male(X),

parents(X, Father, Mother), parents(Y, Father, Mother).

is_sister_of(X,Y):-female(X), parents(X, Father, Mother), parents(Y, Father, Mother).

Page 15: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

1515 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

% d:/Prolog/sis.pl compiled 0.00 sec, 2,048 bytes

Welcome to SWI-Prolog (Version 4.0.9)

Copyright (c) 1990-2000 University of Amsterdam.

Copy policy: GPL-2 (see www.gnu.org)

For help, use ?- help(Topic). or ?- apropos(Word).

?- is_sister_of(X,Y).

X = jennifer

Y = greg ;

X = jennifer

Y = jennifer ;

X = jennifer

Y = andrew ;

No

?-

SWI-Prolog

Page 16: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

1616 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

SWI-Prolog

Page 17: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

1717 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

Welcome to SWI-Prolog (Version 4.0.9) Copyright (c) 1990-2000 University of Amsterdam. Copy policy: GPL-2 (see www.gnu.org)  For help, use ?- help(Topic). or ?- apropos(Word).

?-

SWI-Prolog

You may query Prolog now.

Use the built-in Predicate “halt” to exit Prolog.

Page 18: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

1818 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

?- append([abc,def],[ghi,lmn],L).

L = [abc, def, ghi, lmn]

Yes

?- append([abc,def],L,[abc,def,ghi,lmn]).

L = [ghi, lmn]

Yes

?-

Query mode

Page 19: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

1919 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

?- [user]. |:

Do not forget the period at the end of your input. At the “|:” prompt, type in what you want entered into your database.

male(john).female(mary).father(john,mary).great(massey).has_a_job(mary).

After the last fact is entered and at the “|:” prompt, enter a ctrl-D to exit the consult mode. An example is shown on the next slide.

Consult mode

You can enter consult mode by typing in “[user]” at the “?-”

Prompt:

Page 20: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

2020 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

?- [user].|: likes(tom,jerry).|: likes(mary,john).|: likes(tom,mouse).|: likes(tom,jerry).|: likes(jerry,cheeze).|: likes(mary,fruit).|: likes(john,book).|: knows(mary,book).|: knows(tom,john).|: % user compiled 0.01 sec, 64 bytesYes?- listing. likes(tom, jerry).likes(mary, john).likes(tom, mouse).likes(tom, jerry).likes(jerry, cheeze).likes(mary, fruit).likes(john, book).knows(mary,book).knows(tom,john).Yes

Page 21: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

2121 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

listing.

listing(likes/2).

Listing your predicates

Page 22: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

2222 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

?- listing(likes/2).  /* we could have said “listing(likes).” in this case*/

likes(tom, jerry).

likes(mary, john).

likes(tom, mouse).

likes(tom, jerry).

likes(jerry, cheeze).

likes(john,book).

?- listing(knows). knows(mary,book).knows(tom,john).

Page 23: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

2323 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

trace.

notrace.

Or simply n.

spy(likes/2).

nospy

Tracing your program

Page 24: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

2424 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

Call: (7) likes(_G332, _G333) ? creep Exit: (7) likes(tom, jerry) ? creep X = tomY = jerry ; Redo: (7) likes(_G332, _G333) ? creep Exit: (7) likes(mary, john) ? creepX = maryY = john ; Redo: (7) likes(_G332, _G333) ? creep Exit: (7) likes(tom, mouse) ? creepX = tomY = mouse ; Redo: (7) likes(_G332, _G333) ? creep Exit: (7) likes(tom, jerry) ? creepX = tomY = jerry ; Redo: (7) likes(_G332, _G333) ? creep Exit: (7) likes(jerry, cheeze) ? creep

?- trace.

Yes

[trace] ?- likes(X,Y).

Page 25: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

2525 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

X = jerry

Y = cheeze ;

Redo: (7) likes(_G332, _G333) ? creep

Exit: (7) likes(mary, fruit) ? creep

X = mary

Y = fruit ;

Redo: (7) likes(_G332, _G333) ? creep

Exit: (7) likes(john, book) ? creep

X = john

Y = book ;

Fail: (7) likes(_G332, _G333) ? creep

No

Page 26: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

2626 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

Structures

Page 27: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

2727 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

?- owns(john,book(prolog,author( _ ),year( X ),edition( _ ))),X >1990.

owns(john,book(prolog,author(clocksin_and_mellish),year(1994),edition(4))).owns(victoria,book(prolog,author(bratko),year(2001),edition(3))).

owns(john,book(prolog,clocksin_and_mellish)).owns(victoria,book(prolog,bratko)).

owns(john, book).owns(victoria, book).owns(george,book).

Page 28: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

2828 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

Arithmetic

Page 29: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

2929 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

?- A is 2+3, B is A-1, C is A*2, D is C/B, E is C // B.

A = 5

B = 4

C = 10

D = 2.5

E = 2

+ addition X + Y- subtraction X - Y* multiplication X * Y/ division X / Y// division (integer) X // Ymod modulo (remainder) X mod Y** power X ** Yis equals Z is X + Y

Arithmetic Operators

Page 30: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

3030 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

population(us,275000).population(china,1262000).population(nz,4000).Population(india,1000000).land(us,3000).land(china,4000).land(nz,250).land(india,3288).concen(X,Y):-

population(X,P),land(X,L),Y is P / L.

Page 31: 1Lecture 12 Introduction to Prolog Logic Programming Prolog

3131 Lecture 12 Introduction to PrologLecture 12 Introduction to Prolog

?- concen(X,Y).

X = us

Y = 91.6667

Yes

?- concen(X,Y).

X = us

Y = 91.6667 ;

X = china

Y = 315.5 ;

X = nz

Y = 16 ;

X = india

Y = 304.136 ;

No