SLIDE 1 CS 152: Programming Language Paradigms
San José State University
Prolog: Resolution, Unification, & Cuts
SLIDE 2 References for Prolog
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
Review: Facts likes(batman, gotham). likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).
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 How does Prolog resolve queries? Through 2 processes:
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
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 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 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 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 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 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 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
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 Rules
scary(V) :- villain(V), kills_people(V). scary(V) :- villain(V), power(V,_).
"Head" of the rule Queries
SLIDE 16
Who is scary?
(in-class)
SLIDE 17
Math in Prolog
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
?- combined_heists(catwoman, scarecrow, T). T = 31+42.
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 The Cut Operator
"Learn Prolog Now" section 10.2
SLIDE 22 The Cut Operator
Motivation:
- Prolog may needlessly backtrack
- We wish to stop the backtracking
to optimize our code.
SLIDE 23
max example (no cuts)
max(X,Y,Y):- X =< Y. max(X,Y,X):- X > Y.
SLIDE 24 Using max
?- max(2,3,M). M = 3 ; false. ?- max(2,1,M). M = 2 ; false.
Why continue the search?
SLIDE 25 Two types of cuts (!)
– improves performance or memory usage – Does not alter results
– controls resolution to prevent future matches – changes the results – is considered "bad form"
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
max example, with green cut
max(X,Y,Y):- X =< Y, !. max(X,Y,X):- X > Y.
SLIDE 28
Red Cut Example
Batman is enemies with all villains, unless the villain is also a romantic interest.
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
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
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
Lab For the rest of the class, continue with the lab from last class.