Prolog: Resolution, Unification, & Cuts Prof. Tom Austin San - - PowerPoint PPT Presentation

prolog resolution unification cuts
SMART_READER_LITE
LIVE PREVIEW

Prolog: Resolution, Unification, & Cuts Prof. Tom Austin San - - PowerPoint PPT Presentation

CS 152: Programming Language Paradigms Prolog: Resolution, Unification, & Cuts Prof. Tom Austin San Jos State University References for Prolog "Learn Prolog Now", http://www.learnprolognow.org SWI-Prolog website


slide-1
SLIDE 1

CS 152: Programming Language Paradigms

  • Prof. Tom Austin

San José State University

Prolog: Resolution, Unification, & Cuts

slide-2
SLIDE 2

References for Prolog

  • "Learn Prolog Now",

http://www.learnprolognow.org

  • SWI-Prolog website (contains manual and

tutorials), http://www.swi-prolog.org

  • "NLP with Prolog in the IBM Watson

System", http://www.cs.nmsu.edu/ALP/2011/03/ natural-language-processing-with-prolog-in- the-ibm-watson-system/

slide-3
SLIDE 3

Review: Facts likes(batman, gotham). likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

slide-4
SLIDE 4

Review: Queries & Variables What do Batman and Ra's al Ghul both like?

?- likes(batman,X), likes(ras_al_ghul,X).

X is a variable comma is "and"

slide-5
SLIDE 5

How does Prolog resolve queries? Through 2 processes:

  • Resolution
  • Unification
slide-6
SLIDE 6

Resolution & Unification

  • Resolution: The process of matching

facts & rules to perform inferencing

– infer: derive logical conclusions from the rules. – If a subgoal matches the head of another rule, we can replace it with the body of the matching rule.

  • Unification: Instantiation of variables

via pattern matching

slide-7
SLIDE 7

likes(batman, gotham). likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

likes(batman, X), likes(ras_al_ghul, X). Query: Knowledge Base:

slide-8
SLIDE 8

likes(batman, gotham). likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

likes(batman, X), likes(ras_al_ghul, X). Query: Knowledge Base:

Finds match for first sub-query; sets a marker

slide-9
SLIDE 9

likes(batman, gotham). likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

likes(batman, gotham), likes(ras_al_ghul, gotham). Query: Knowledge Base:

X is bound to gotham

slide-10
SLIDE 10

likes(batman, gotham). likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

likes(batman, gotham), likes(ras_al_ghul, gotham). Query: Knowledge Base:

No match found: fails and backtracks to marker

slide-11
SLIDE 11

likes(batman, gotham). likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

likes(batman, X), likes(ras_al_ghul, X). Query: Knowledge Base:

Finds another match for first sub-query

slide-12
SLIDE 12

likes(batman, gotham). likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

likes(batman, justice), likes(ras_al_ghul, justice). Query: Knowledge Base:

X is bound to justice

slide-13
SLIDE 13

likes(batman, gotham). likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

likes(batman, justice), likes(ras_al_ghul, justice). Query: Knowledge Base:

Match found, and the result is returned

slide-14
SLIDE 14

More facts:

villain(joker). villain(penguin). villain(catwoman). villain(scarecrow). kills_people(joker). kills_people(penguin). power(scarecrow, fear). romantic_interest(catwoman). romantic_interest(talia).

slide-15
SLIDE 15

Rules

scary(V) :- villain(V), kills_people(V). scary(V) :- villain(V), power(V,_).

"Head" of the rule Queries

slide-16
SLIDE 16

Who is scary?

(in-class)

slide-17
SLIDE 17

Math in Prolog

slide-18
SLIDE 18

Arithmetic in Prolog

heists(joker, 97). heists(penguin, 18). heists(catwoman, 31). heists(scarecrow, 42). combined_heists(X, Y, Total) :- heists(X,XN), heists(Y,YN), Total = XN + YN.

slide-19
SLIDE 19

?- combined_heists(catwoman, scarecrow, T). T = 31+42.

slide-20
SLIDE 20

Using "is" operator

combined_heists(X, Y, Total) :- heists(X,XN), heists(Y,YN), Total is XN + YN. ... ?- combined_heists(catwoman, scarecrow, T). T = 73.

slide-21
SLIDE 21

The Cut Operator

"Learn Prolog Now" section 10.2

slide-22
SLIDE 22

The Cut Operator

Motivation:

  • Prolog may needlessly backtrack
  • We wish to stop the backtracking

to optimize our code.

slide-23
SLIDE 23

max example (no cuts)

max(X,Y,Y):- X =< Y. max(X,Y,X):- X > Y.

slide-24
SLIDE 24

Using max

?- max(2,3,M). M = 3 ; false. ?- max(2,1,M). M = 2 ; false.

Why continue the search?

slide-25
SLIDE 25

Two types of cuts (!)

  • A green cut

– improves performance or memory usage – Does not alter results

  • A red cut

– controls resolution to prevent future matches – changes the results – is considered "bad form"

slide-26
SLIDE 26

max example (no cuts)

max(X,Y,Y):- X =< Y. max(X,Y,X):- X > Y.

If true, no need to keep searching

slide-27
SLIDE 27

max example, with green cut

max(X,Y,Y):- X =< Y, !. max(X,Y,X):- X > Y.

slide-28
SLIDE 28

Red Cut Example

Batman is enemies with all villains, unless the villain is also a romantic interest.

slide-29
SLIDE 29

Red Cut Example

enemy(batman, X) :- romantic_interest(X), !, fail. enemy(batman, X) :- villain(X).

No backtracking once we make it here.

slide-30
SLIDE 30

Red Cut Example

bad_breakup(batman, talia). bad_breakup(batman, poison_ivy). enemy(batman, X) :- romantic_interest(X), !, bad_breakup(batman, X). enemy(batman, X) :- villain(X).

slide-31
SLIDE 31

Avoiding red cut

bad_breakup(batman, talia). bad_breakup(batman, poison_ivy). enemy(batman, X) :- villain(X), \+ romantic_interest(X). enemy(batman, X) :- villain(X), bad_breakup(batman,X).

slide-32
SLIDE 32

Lab For the rest of the class, continue with the lab from last class.