42
1 Artificial Intelligence Prolog for

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

Embed Size (px)

Citation preview

Page 1: 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

1

Artificial Intelligence

Prolog

for

Page 2: 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

2

SWI-Prolog• SWI-Prolog is a good, standard Prolog for

Windows and Linux

• It's licensed under GPL, therefore free

• Downloadable from: http://www.swi-prolog.org/

Page 3: 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

What is Prolog?• A logic programming language

– “Prolog” stands for “Programming in Logic” (or “Programmation en Logique” in French)

• Designed in 1972 by Alain Colmerauer and Robert Kowalski (much later than Lisp)

• Used in AI programming, expert systems, and computational linguistics

Page 4: 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

Logic Programming• Creates logical models that describe the

world in which a problem exists• Uses first-order logic (but can also be used

with propositional logic)• A subset of declarative programming

– Creates a set of conditions that describe a solution space

– Two phases: declaration and interpretation

Page 5: 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

5

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?

Page 6: 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

6

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

Page 7: 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

7

Syllogisms in Prolog

SyllogismSocrates is a man.All men are mortal.Is Socrates mortal?

man(socrates).

mortal(X) :- man(X).

?- mortal(socrates).

Prolog

Page 8: 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

8

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

Page 9: 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

9

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

Page 10: 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

10

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

Page 11: 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

11

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

Page 12: 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

12

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)

Page 13: 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

13

Syntax II: Base Clauses• A base clause is just a structure that

represents a simple fact.

• Example base clauses:– debug_on.– loves(john, mary).– loves(mary, bill).

Page 14: 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

14

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

Page 15: 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

15

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

Page 16: 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

16

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.

Page 17: 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

17

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.

Page 18: 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

18

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'

Page 19: 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

19

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

Page 20: 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

20

Backtracking• loves(femi, X) :- female(X), rich(X).• female(ajoke).• female(asake).• rich(asake).• Suppose we ask: loves(femi, X).

– female(X) = female(ajoke), X = ajoke.

– rich(ajoke) fails.

– female(X) = female(asake), X = asake.

– rich(asake) succeeds.

Page 21: 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

21

Readings• loves(femi, X) :- female(X), rich(X).

• Declarative reading: Femi loves X if X is female and rich.

• Approximate procedural reading: To find an X that Femi loves, first find a female X, then check that X is rich.

• Declarative readings are almost always preferred.

Page 22: 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

22

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?

Page 23: 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

23

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

Page 24: 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

24

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

Page 25: 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

25

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(ade, X) can unify with loves(ade, asake)– and in the process, X gets unified with asake

Page 26: 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

26

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)

Page 27: 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

27

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.

Page 28: 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

28

Writing Prolog Programs• Suppose the database contains

loves(femi, X) :- female(X), rich(X). female(jane).and we ask who Femi loves, ?- loves(chuck, Woman).

• female(X) finds a value for X , say, abike

• rich(X) then tests whether Abike is rich

Page 29: 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

29

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.

Page 30: 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

30

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?

Page 31: 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

31

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

Page 32: 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

32

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

Page 33: 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

33

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.

Page 34: 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

Step 1: Declaration• Creating a knowledge base (KB) of sentences

describing the world• Declaring facts

– fun(ai). (AI is fun!)– likes(mark,bacon). (Mark likes bacon)

• Defining rules– heartbroken(X) :- loves(X,Y), not(loves(Y,X)). (X is heartbroken if X loves Y and Y does not love X… *sniff*)

• Sentences end with a period

Page 35: 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

A simple Knowledge Baseorbits(mercury, sun).orbits(venus, sun).orbits(earth, sun).orbits(mars, sun).

orbits(moon, earth).

orbits(phobos, mars).orbits(deimos, mars).

planet(P) :- orbits(P,sun).satellite(S) :- orbits(S,P), planet(P).

Page 36: 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

Step 2: Interpretation• Deriving new sentences from the sentences

in the KB by making queries

• Uses a Prolog interpreter– SWI-Prolog, GNU Prolog, etc.

• Knowledge bases must first be loaded/consulted using consult(‘filename.pl’).

Page 37: 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

Some simple queries?- consult(‘solar.pl’).% Is the moon a satellite??- satellite(moon).% Is the sun a planet??- planet(sun).% Is Uranus a planet??- planet(uranus).% What are the planets??- planet(Planet).% What objects orbit Mars??- orbits(X, mars).% Is the moon made of cheese??- made_of_cheese(moon).

Page 38: 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

Another KB exampleparents(william, diana, charles).

parents(henry, diana, charles).

parents(charles, elizabeth, philip).

parents(diana, frances, edward).

parents(anne, elizabeth, philip).

parents(andrew, elizabeth, philip).

parents(edwardW, elizabeth, philip).

married(diana, charles).

married(elizabeth, philip).

married(frances, edward).

married(anne, mark).

parent(C,M) :- parents(C,M,D).

parent(C,D) :- parents(C,M,D).

sibling(X,Y) :- parents(X,M,D), parents(Y,M,D). % What’s wrong with this?

aORuDirect(C, A) :- parent(C,P), sibling(P,A).

aORuMarr(C, A) :- aORuDirect(C,X), married(X,A).

aORuMarr(C, A) :- aORuDirect(C,X), married(A,X).

aORu(C,A) :- aORuDirect(C,A).

aORu(C,A) :- aORuMarr(C,A).

Page 39: 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

Predicates• Used to express facts or statements about objects

and their relationships• Examples: likes heartbroken orbits• Have arguments

– teaches(jpv,cs171). (2 arguments)• Names/atoms are alphanumeric, can contain

underscores, begin with a lowercase letter• Meanings of predicates, arguments, and order of

arguments are arbitrary (but should be descriptive and consistent!)

Page 40: 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

Variables• Can be used to stand for any object• Are instantiated during matching• Examples: Planet X• Scope is statement-wide• Usually used in rules, but can also be used in facts

– goes_to_heaven(Dog) :- dog(Dog). (All dogs go to heaven.)– must_perish(Thing). (All things must perish.)

• Variable names are alphanumeric, can contain underscores, must begin with an uppercase letter

• Use the underscore to indicate an anonymous variable– female(X) :- mother(X,_). (All mothers are female, regardless

of who the child is.)

Page 41: 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

Queries• Describe problems to be solved• Consist of goals to be satisfied

– Example: father(X) :- male(X), parent(X,_).• Goals are male(X) and parent (X,_).

– Goals are checked against facts in the KB

– Rules are satisfied if all the goals in the “if” part (in the body, separated by commas) are satisfied

– Variables can take on any value

• Press semi-colon to look for further matches• Uses backtracking to satisfy goals in all possible ways

(“brute-forcing” it)

Page 42: 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

Prolog and FOL• Rules are usually in the form of Horn clauses

– :- is reversed

• Backtracking in Prolog is known in FOL terms as backward chaining– Begins with a goal (the query)– Recursively builds a set of substitutions that satisfy the

goals necessary to conclude the goal

• All variables in Prolog are assumed to be universally quantified (though skolemization can still be done)