1 CSC 8520 Spring 2013. Paula Matuszek Slides taken from David Matuszek,

Slides:



Advertisements
Similar presentations
Artificial Intelligence: Natural Language and Prolog
Advertisements

CS4026 Formal Models of Computation Part II The Logic Model Lecture 6 – Arithmetic, fail and the cut.
Prolog Nonmonotonic logic.
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.
Prolog. SWI-Prolog SWI-Prolog is a good, standard Prolog for Windows and Linux It's licensed under GPL, therefore free Downloadable from:
4. PROLOG Data Objects And PROLOG Arithmetic
1 01/12/2011Knowledge-Based Systems, Paula Matuszek Intro to CLIPS Paula Matuszek CSC 9010, Spring, 2011.
1 Prolog III. 2 Lists [ ] is the empty list. [x, 2+2, [a, b, c]] is a list of three elements. The first element in the list is its “head”. The list with.
Introduction to C Programming
 2000 Prentice Hall, Inc. All rights reserved. Chapter 2 - Introduction to C Programming Outline 2.1Introduction 2.2A Simple C Program: Printing a Line.
Introduction to C Programming
1 Prolog II. 2 The Notion of Unification Unification is when two things “become one” Unification is kind of like assignment Unification is kind of like.
For Friday Read “lectures” 1-5 of Learn Prolog Now: prolog-now/
11-Jun-15 Prolog II Unification and clause order.
 2007 Pearson Education, Inc. All rights reserved Introduction to C Programming.
Introduction to C Programming
While Loops and Do Loops. Suppose you wanted to repeat the same code over and over again? System.out.println(“text”); System.out.println(“text”); System.out.println(“text”);
Computer Science 1000 Spreadsheets II Permission to redistribute these slides is strictly prohibited without permission.
Formal Models of Computation Part II The Logic Model
1 Prolog I. 2 Syllogisms “Prolog” is all about programming in logic. –Socrates is a man. –All men are mortal. –Therefore, Socrates is mortal.
Notes for Chapter 12 Logic Programming The AI War Basic Concepts of Logic Programming Prolog Review questions.
Instructor: Chris Trenkov Hands-on Course Python for Absolute Beginners (Spring 2015) Class #002 (January 17, 2015)
IPC144 Introduction to Programming Using C Week 1 – Lesson 2
CMPS 211 JavaScript Topic 1 JavaScript Syntax. 2Outline Goals and Objectives Goals and Objectives Chapter Headlines Chapter Headlines Introduction Introduction.
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.
Logic Programming Module 2AIT202 Website Lecturer: Dave Sharp Room: AG15
Downloading and Installing Autodesk Revit 2016
Derived from csc.villanova.edu/~dmatusze/8310summer2001/index.html/prolog1.ppt1 Prolog.
1 Artificial Intelligence Prolog for. 2 SWI-Prolog SWI-Prolog is a good, standard Prolog for Windows and Linux It's licensed under GPL, therefore free.
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.
Introduction To PROLOG World view of imperative languages. World view of relational languages. A PROLOG program. Running a PROLOG program. A PROLOG.
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.
Prolog. Syllogisms “Prolog” is all about programming in logic. –Socrates is a man. –All men are mortal. –Therefore, Socrates is mortal.
1 Prolog and Logic Languages Aaron Bloomfield CS 415 Fall 2005.
1 CSC 9010 Spring Paula Matuszek CSC 9010 ANN Lab Paula Matuszek Spring, 2011.
Logic Programming CSC 358/ Outline Pattern matching Unification Logic programming.
Ch. 13 Ch. 131 jcmt CSE 3302 Programming Languages CSE3302 Programming Languages (notes?) Dr. Carter Tiernan.
Prolog Unification and clause order. The notion of Unification Unification is when two things “become one” Unification is kind of like assignment Unification.
9/19/01 1 Prolog Tim Finin Tim Finin University of Maryland Baltimore County.
Introduction to Objective Caml. General comments ML is a purely functional language--there are (almost) no side effects There are two basic dialects of.
Logic Programming Dr. Yasser Nada Fall 2010/2011 Lecture 1 1 Logic Programming.
Knowledge Based Information System
For Friday No reading Prolog Handout 2. Homework.
 2007 Pearson Education, Inc. All rights reserved. A Simple C Program 1 /* ************************************************* *** Program: hello_world.
23-Feb-16 Prolog II Unification and clause order.
FILES AND EXCEPTIONS Topics Introduction to File Input and Output Using Loops to Process Files Processing Records Exceptions.
1 Lecture 2 - Introduction to C Programming Outline 2.1Introduction 2.2A Simple C Program: Printing a Line of Text 2.3Another Simple C Program: Adding.
CSC201: Computer Programming
Prolog Concepts.
For Friday No reading Prolog handout 3 Chapter 9, exercises 9-11.
For Wednesday Read “lectures” 7-10 of Learn Prolog Now:
PROLOG.
Prolog.
Control Structures – Selection
Prolog fundamentals Module 14.2 COP4020 – Programming Language Concepts Dr. Manuel E. Bermudez.
Chapter 2 - Introduction to C Programming
Chapter 2 - Introduction to C Programming
Chapter 2 - Introduction to C Programming
Unification and clause order
Chapter 2 - Introduction to C Programming
Prolog III.
Boolean Expressions to Make Comparisons
Chapter 2 - Introduction to C Programming
Prolog Concepts.
Introduction to C Programming
Prolog III Lists 8-Jul-19.
Prolog Concepts.
Presentation transcript:

1 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, CS 8520: Artificial Intelligence Prolog 1 Paula Matuszek Spring, 2013

2 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, SWI-Prolog SWI-Prolog is a good, standard Prolog for Windows and Linux It's licensed under GPL, therefore free Downloadable from: prolog.org/ prolog.org

3 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Syllogisms “Prolog” is all about programming in logic. Aristotle described syllogisms 2300 years ago Sample syllogism: –Socrates is a man. –All men are mortal. –Therefore, Socrates is mortal. This is logic. Can Prolog do it?

4 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Forward and backward reasoning A syllogism gives two premises, then asks, "What can we conclude?" –This is forward reasoning -- from premises to conclusions –it's inefficient when you have lots of premises Instead, you ask Prolog specific questions –Prolog uses backward reasoning -- from (potential) conclusions to facts

5 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Syllogisms in Prolog Syllogism Socrates is a man. All men are mortal. Is Socrates mortal? man(socrates). mortal(X) :- man(X). ?- mortal(socrates). Prolog

6 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Facts, rules, and queries Fact: Socrates is a man. man(socrates). Rule: All men are mortal. mortal(X) :- man(X). Query: Is Socrates mortal? mortal(socrates). Queries have the same form as facts

7 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Running Prolog I Create your "database" (program) in any editor Save it as text only, with a.pl extension Here's the complete program: man(socrates). mortal(X) :- man(X).

8 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Running Prolog II Prolog is completely interactive. Begin by –Double-clicking on your.pl file, or –Double-clicking on the Prolog application and consulting your file at the ?- prompt: ?- consult('C:\\My Programs\\adv.pl'). –On a mac, opening a terminal window and typing swipl Then, ask your question at the prompt: –?- mortal(socrates). Prolog responds: –Yes

9 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Prolog is a theorem prover Prolog's "Yes" or “true” means "I can prove it" -- Prolog's "No" or “false” means "I can't prove it" –?- mortal(plato). False. This is the closed world assumption: the Prolog program knows everything it needs to know Prolog supplies values for variables when it can –?- mortal(X). X = socrates

10 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Syntax I: Structures A structure consists of a name and zero or more arguments. Omit the parentheses if there are no arguments Example structures: –sunshine –man(socrates) –path(garden, south, sundial)

11 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Syntax II: Base Clauses A base clause is just a structure. A base clause represents a simple fact. Example base clauses: –debug_on. –loves(john, mary). –loves(mary, bill).

12 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Syntax III: Nonbase Clauses A nonbase clause is a structure, a turnstile (meaning IF), and a list of structures. Example nonbase clauses: –mortal(X) :- man(X). –mortal(X) :- woman(X) –happy(X) :- healthy(X), wealthy(X), wise(X). The comma between structures means AND

13 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Syntax IV: Predicates A predicate is a collection of clauses with the same functor (name) and arity (number of arguments). loves(john, mary). loves(mary, bill). loves(chuck, X) :- female(X), rich(X).

14 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Syntax V: Programs A program is a collection of predicates. Predicates can be in any order. Clauses within a predicate are used in the order in which they occur.

15 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Syntax VI: Variables and atoms Variables begin with a capital letter: X, Socrates, _result Atoms do not begin with a capital letter: x, socrates Atoms containing special characters, or beginning with a capital letter, must be enclosed in single quotes: –'C:\\My Documents\\examples.pl' Variables consisting of, or beginning with, _ are called anonymous variables. They are used when we don’t care what their value is.

16 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Syntax VII: Strings are atoms In a quoted atom, a single quote must be doubled or backslashed: –'Can''t, or won\'t?' Backslashes in file names must also be doubled: –'C:\\My Documents\\examples.pl'

17 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Common problems Capitalization is extremely important! No space is allowed between a functor and its argument list: man(socrates), not man (socrates). Double quotes indicate a list of ASCII character values, not a string Don’t forget the period! (But you can put it on the next line.)

18 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Backtracking loves(chuck, X) :- female(X), rich(X). female(jane). female(mary). rich(mary). Suppose we ask: loves(chuck, X). –female(X) = female(jane), X = jane. –rich(jane) fails. –female(X) = female(mary), X = mary. –rich(mary) succeeds.

19 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Backtracking and Beads Each Prolog call is like a “bead” in a string of beads: call fail exit redo Each structure has four ports: call, exit, redo, fail Exit ports connect to call ports; fail ports connect to redo ports

20 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Calls as nested beads loves(chuck, X) :- female(X), rich(X). loves(chuck, X) female(X)rich(X) call fail exit redo

21 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Additional answers female(jane). female(mary). female(susan). ?- female(X). X = jane ; X = mary Yes female(jane) female(mary) female(susan) female(X)

22 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Readings loves(chuck, X) :- female(X), rich(X). Declarative reading: Chuck loves X if X is female and rich. Approximate procedural reading: To find an X that Chuck loves, first find a female X, then check that X is rich. Declarative readings are almost always preferred.

23 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Monotonic logic Standard logic is monotonic: once you prove something is true, it is true forever Logic isn't a good fit to reality If the wallet is in the purse, and the purse in is the car, we can conclude that the wallet is in the car But what if we take the purse out of the car?

24 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Nonmonotonic logic Prolog uses nonmonotonic logic Facts and rules can be changed at any time –such facts and rules are said to be dynamic assert(...) adds a fact or rule retract(...) removes a fact or rule assert and retract are said to be extralogical predicates

25 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Examples of assert and retract assert(man(plato)). assert((loves(chuck,X) :- female(X), rich(X))). retract(man(plato)). retract((loves(chuck,X) :- female(X), rich(X))). Notice that we use double parentheses for rules –this is to avoid a minor syntax problem –assert(foo :- bar, baz). –How many arguments did we give to assert?

26 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Limitations of backtracking In Prolog, backtracking over something generally undoes it Output can't be undone by backtracking Neither can assert and retract be undone by backtracking Perform any necessary testing before you use write, nl, assert, or retract

27 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Modeling "real life" Real life isn't monotonic; things change Prolog is superb for modeling change Games are often a model of real (or fantasy!) life Prolog is just about ideal for adventure games

28 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Trying an Adventure Game There is a file on the class webpage called dragon.pl. Download it someplace you can find it. Start Prolog. Depending on your system, you may be able to click on dragon.pl, or there may be an icon, or you may have to get to a prompt and run it directly. For the mac, open a terminal window –paladin.home% swipl You may also need to set a path variable or make a link to where you have the executable.

29 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Starting Prolog Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.2.6) Copyright (c) University of Amsterdam, VU Amsterdam SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit for details. For help, use ?- help(Topic). or ?- apropos(Word). ?- ?- consult('C:\\_Prolog\\dragon.pl'). % C:\_Prolog\dragon.pl compiled 0.00 sec, 54 clauses true. ?-

30 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Instructions ?- start. Enter commands using standard Prolog syntax. Available commands are: start. -- to start the game. n. s. e. w. -- to go in that direction. take(Object). -- to pick up an object. drop(Object). -- to put down an object. use(Object). -- to use an object. attack. -- to attack an enemy. look. -- to look around you again. instructions. -- to see this message again. halt. -- to end the game and quit. true. ?-

31 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Starting out You are in a meadow. To the north is the dark mouth of a cave; to the south is a small building. Your assignment, should you decide to accept it, is to recover the famed Bar-Abzad ruby and return it to this meadow. true.

32 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Going south ?- s. You are in a small building. The exit is to the north. The room is devoid of furniture, and the only feature seems to be a small door to the east. There is a flashlight here. true.

33 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Taking things, locked doors ?- take(flashlight). OK. true. ?- e. The door appears to be locked. You can't go that way. true.

34 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Some time later... ?- use(key). The closet is no longer locked. true. Later still... ?- look. You are in a big, dark cave. The air is fetid. There is a chest here.

35 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Input and output Input is unpleasant; we avoid it by giving commands (as questions) directly to Prolog –take(flashlight). write(...) outputs its one argument nl ends the line (writes a newline) describe(closet) :- write('You are in an old storage closet.'), nl.

36 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Implementing an Adventure Game If you examine the code for dragon.pl you can see how it is implemented. The following describe some of the decisions for implementation. Note that these are mostly descriptions of what is true or what something means. There is no control structure comparable to a language like Java or C.

37 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Essential facts Where I am at present: –i_am_at(meadow). Where other things are at: –at(flashlight, building). What I am holding: –holding(key). Which facts may be changed: –:- dynamic i_am_at/1, at/2, holding/1. –Not all implementations of Prolog require dynamic, but swipl does.

38 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, The map cave_entrance cave meadow buildingcloset N W E S

39 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Implementing the map path(cave, w, cave_entrance). path(cave_entrance, e, cave). path(meadow, s, building). path(building, n, meadow). Could have done this instead: –path(cave, w, cave_entrance). path(X, e, Y) :- path(Y, w, X).

40 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, listing listing(predicate) is a good way to examine the current state of the program ?- listing(at). –at(key, cave_entrance). at(flashlight, building). at(sword, closet). true

41 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, North, south, east, west The commands n, s, e, w all call go. n :- go(n). s :- go(s). e :- go(e). w :- go(w).

42 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, go go(Direction) :- i_am_at(Here), path(Here, Direction, There), retract(i_am_at(Here)), assert(i_am_at(There)), look. go(_) :- write('You can''t go that way.').

43 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, take take(X) :- i_am_at(Place), at(X, Place), retract(at(X, Place)), assert(holding(X)), write('OK.'), nl.

44 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, You can't always take take(A) :- holding(A), write('You\'re already holding it!'), nl. take(A) :- (actually take something, as before). take(A) :- write('I don\'t see it here.'), nl.

45 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Making things fail A predicate will fail if it doesn't succeed You can explicitly use fail fail works like this: This often isn't strong enough; it doesn't force the entire predicate to fail fail call fail

46 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, cut The "cut," written !, is a commit point –It commits to the clause in which it occurs, and –everything before it in that clause Using cut says: Don't try any other clauses, and don't backtrack past the cut ! callexit

47 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, cut-fail The cut-fail combination: !, fail means really fail It commits to this clause, then fails This means no other clauses of this predicate will be tried, so the predicate as a whole fails

48 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, A locked door path(building, e, closet) :- locked(closet), write('The door appears to be locked.'), nl, !, fail. path(building, e, closet). If the closet door isn't locked, the first clause fails "normally," and the second clause is used If the closet door is locked, the cut prevents the second clause from ever being reached

49 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Dropping objects drop(A) :- holding(A), i_am_at(B), retract(holding(A)), assert(at(A, B)), write('OK.'), nl. drop(A) :- write('You aren\'t holding it!'), nl.

50 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, The Notion of Unification Unification is when two things “become one” Unification is kind of like assignment Unification is kind of like equality in algebra Unification is mostly like pattern matching Example: –loves(john, X) can unify with loves(john, mary) –and in the process, X gets unified with mary

51 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Unification I Any value can be unified with itself. –weather(sunny) = weather(sunny) A variable can be unified with another variable. –X = Y A variable can be unified with (“instantiated to”) any Prolog value. –Topic = weather(sunny)

52 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Unification II Two different structures can be unified if their constituents can be unified. –female(X) = female(jane) –mother(mary, X) = mother(Y, father(Z)) A variable can be unified with a structure containing that same variable. This is usually a Bad Idea. –X = f(X)

53 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Unification Once a variable has been unified with a value, it continues to have that value for the rest of the clause, and can be used that way If we have –female(X) = female(jane) then –write(X) will write jane.

54 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Scope of Names The scope of a variable is the single clause in which it appears. The scope of the “anonymous” (“don't care”) variable, _, is itself. –loves(_, _) = loves(john, mary) A variable that only occurs once in a clause is a useless singleton; you should replace it with the anonymous variable

55 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Writing Prolog Programs Suppose the database contains loves(chuck, X) :- female(X), rich(X). female(jane). and we ask who Chuck loves, ?- loves(chuck, Woman). female(X) finds a value for X, say, jane rich(X) then tests whether Jane is rich

56 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Clauses as Cases A predicate consists of multiple clauses, each of which represents a “case” grandson(X,Y) :- son(X,Z), son(Z,Y). grandson(X,Y) :- son(X,Z), daughter(Z,Y). abs(X, Y) :- X < 0, Y is -X. abs(X, X) :- X >= 0.

57 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Ordering Clauses are always tried in order buy(X) :- good(X). buy(X) :- cheap(X). cheap(‘Java 2 Complete’). good(‘Thinking in Java’). What will buy(X) choose first?

58 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Ordering II Try to handle more specific cases (those having more variables instantiated) first. dislikes(john, bill). dislikes(john, X) :- rich(X). dislikes(X, Y) :- loves(X, Z), loves(Z, Y).

59 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Ordering III Some "actions" cannot be undone by backtracking over them: –write, nl, assert, retract, consult Do tests before you do undoable actions: –take(Thing) :- holding(Thing), write('You\'re already holding it!'), nl.

60 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Basic and derived clauses You can often choose which facts you want to be "basic" and which derived son(isaac, steven). child(X, Y) :- son(X, Y). male(isaac). child(isaac, steven). son(X, Y) :- male(X), child(X, Y).

61 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Arithmetic The equals sign, =, means “unify.” 2+2 does not unify with 4. To force arithmetic to be performed, use “is”: X is 2 + 2, X = 4. Comparisons =:= =/= > >= < <= also force their operands to be evaluated. + - * / mod, when evaluated, have their usual meanings.

62 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, What else is Prolog good for? Prolog is primarily an AI (Artificial Intelligence) language It's more popular in Europe, especially Britain, than in the U.S. Prolog is also a very enjoyable language in which to program (subjective opinion, obviously!) More next week!

63 CSC 8520 Spring Paula Matuszek Slides taken from David Matuszek, Some Resources These slides and dragon.pl were borrowed from David Matuszek. He has additional Prolog information at /index.html /index.html There is a good basic interactive Prolog tutorial at ogpages/. If you are having problems I’d suggest working through that. ogpages/ The SWI Prolog site ( has a manual, a FAQ, a mailing list, and other resources. Or try asking a question on our Piazza page!