prolog resolution unification cuts
play

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


  1. CS 152: Programming Language Paradigms Prolog: Resolution, Unification, & Cuts Prof. Tom Austin San José State University

  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/

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

  4. Review: Queries & Variables What do Batman and Ra's al Ghul both like? X is a comma variable is "and" ?- likes(batman,X), likes(ras_al_ghul,X).

  5. How does Prolog resolve queries? Through 2 processes: • Resolution • Unification

  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

  7. Query: likes(batman, X), likes(ras_al_ghul, X). Knowledge Base: likes(batman, gotham). likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

  8. Query: likes(batman, X) , likes(ras_al_ghul, X). Finds match for first sub-query; Knowledge Base: sets a marker likes(batman, gotham). likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

  9. Query: likes(batman, gotham) , likes(ras_al_ghul, gotham ). Knowledge Base: likes(batman, gotham). X is bound to gotham likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

  10. Query: likes(batman, gotham), likes(ras_al_ghul, gotham). No match found: fails and backtracks Knowledge Base: to marker likes(batman, gotham). likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

  11. Query: likes(batman, X), likes(ras_al_ghul, X). Knowledge Base: Finds another match for first likes(batman, gotham). sub-query likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

  12. Query: likes(batman, justice) , likes(ras_al_ghul, justice ). Knowledge Base: X is bound to likes(batman, gotham). justice likes(batman, justice). likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

  13. Query: likes(batman, justice), likes(ras_al_ghul, justice) . Knowledge Base: Match found, likes(batman, gotham). and the result likes(batman, justice). is returned likes(ras_al_ghul, justice). likes(ras_al_ghul, revenge).

  14. villain(joker). villain(penguin). More villain(catwoman). facts: villain(scarecrow). kills_people(joker). kills_people(penguin). power(scarecrow, fear). romantic_interest(catwoman). romantic_interest(talia).

  15. Rules Queries scary(V) :- villain(V), kills_people(V). "Head" of the rule scary(V) :- villain(V), power(V,_).

  16. Who is scary? (in-class)

  17. Math in Prolog

  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.

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

  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.

  21. The Cut Operator "Learn Prolog Now" section 10.2

  22. The Cut Operator Motivation: • Prolog may needlessly backtrack • We wish to stop the backtracking to optimize our code.

  23. max example (no cuts) max(X,Y,Y):- X =< Y. max(X,Y,X):- X > Y.

  24. Using max ?- max(2,3,M). M = 3 ; Why continue false. the search? ?- max(2,1,M). M = 2 ; false.

  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"

  26. max example (no cuts) max(X,Y,Y):- X =< Y. max(X,Y,X):- X > Y. If true, no need to keep searching

  27. max example, with green cut max(X,Y,Y):- X =< Y, ! . max(X,Y,X):- X > Y.

  28. Red Cut Example Batman is enemies with all villains, unless the villain is also a romantic interest.

  29. Red Cut Example enemy(batman, X) :- romantic_interest(X), ! , No backtracking once fail. we make it here. enemy(batman, X) :- villain(X).

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

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

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

Recommend


More recommend