1 / 19

Fortgeschrittene Programmierung PROLOG Teil 3

Fortgeschrittene Programmierung PROLOG Teil 3. Luc De Raedt and Andreas Karwath (original slides by Peter Flach). SLD Resolution and SLD Trees. Resolution in Prolog based on definite clause logic definite clauses: one atom in the head

jakeem-reid
Download Presentation

Fortgeschrittene Programmierung PROLOG Teil 3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Simply Logical – Chapter 3 Fortgeschrittene ProgrammierungPROLOG Teil 3 Luc De Raedt and Andreas Karwath(original slides by Peter Flach)

  2. Simply Logical – Chapter 3 SLD Resolution and SLD Trees

  3. Simply Logical – Chapter 3 • Resolution in Prolog based on definite clause logic • definite clauses: one atom in the head • Resolution strategy: which literal and which input clause is chosen for resolution? • Strategy in Prolog is called SLD resolution:- S selection rule (in Prolog from left to right)- L linear resolution- D definite clauses • Leftmost literal in query is selected; clauses are selected in textual order • SLD trees: different from proof trees: only show resolvents, but all possible resolution steps • Prolog searches SLD tree depth-first ! SLD resolution

  4. Simply Logical – Chapter 3 :-follows(S,C),teaches(peter,C) :-teaches(peter,ai_techniques) :-teaches(peter,computer_science) :-teaches(peter,expert_systems) p.44-5 [] [] student_of(X,T):-follows(X,C),teaches(T,C).follows(paul,computer_science).follows(paul,expert_systems).follows(maria,ai_techniques).teaches(adrian,expert_systems).teaches(peter,ai_techniques).teaches(peter,computer_science). ?-student_of(S,peter) ?-student_of(S,peter) :-follows(S,C),teaches(peter,C) :-teaches(peter,ai_techniques) :-teaches(peter,computer_science) :-teaches(peter,expert_systems) SLD-tree

  5. Simply Logical – Chapter 3 :-brother_of(B,peter) [] :-brother_of(peter,B) :-brother_of(B,peter) • [] • • :-brother_of(paul,Z),brother_of(Z,B) [] :-brother_of(peter,B) :-brother_of(paul,Z1),brother_of(Z1,Z),brother_of(Z,B) • • • :-brother_of(peter,Z),brother_of(Z,B) [] • • • p.45-6 ?-brother_of(peter,B) brother_of(X,Y):-brother_of(Y,X).brother_of(paul,peter). ?-brother_of(paul,B) brother_of(paul,peter).brother_of(peter,adrian).brother_of(X,Y):- brother_of(X,Z), brother_of(Z,Y). Infinite SLD-trees

  6. Simply Logical – Chapter 3 :-p(H1),plist(T1) [] L = [] :-plist(T1) :-plist(T1) :-plist(T1) :-plist(T1) :-plist(T1) :-plist(T1) :-p(H1),plist(T1) :-p(H1),plist(T1) [] [] [] [] [] [] L = [2] L = [1,2] L = [2,1] L = [1,1] L = [2,2] L = [1] • • • • • • • • • • • • p.47 plist([]). plist([H|T]):- p(H),plist(T). p(1). p(2). ?-plist(L) ?-plist(L).L=[];L=[1];L=[1,1];… Depth-first search

  7. Simply Logical – Chapter 3 • First problem: • trapped in infinite subtrees • Prolog is incomplete by the way the SLD tree is searched (depth-first; a deliberate design decision for memory efficiency) • if breadth-first search were used, then it would be refutation complete! • Second problem: • looping if no (further) solution for any infinite SLD tree • due to semi-decidability of full clausal logic(infinity of Herbrand base) Summary

  8. Simply Logical – Chapter 3 Programming Example:Monkey and banana

  9. Simply Logical – Chapter 3 • The Problem • There is a monkey at the door into a room. In the middle of the room a banana is hanging from the ceiling. The monkey is hungry and wants to get the banana, but he cannot stretch high enough from the floor. At the window of the room there is a box that the monkey can use. The monkey can perform the following actions: walk on the floor, climb the box, push the box around (if he is already at it), and grasp the banana if he is standing on the box and directly underneath the banana. • Can the monkey grasp the banana? Problem: Monkey and Banana

  10. Simply Logical – Chapter 3 banana window door mokey box middle Problem: Monkey and Banana

  11. Simply Logical – Chapter 3 state( MR, MB , P , B ) • Monkey‘s Room Position • at_door • middle • at_window • Banana • has • has_not • Box Position • at_door • middle • at_window • Monkey‘s Box Position • on_floor • on_box Monkey and Banana: States

  12. Simply Logical – Chapter 3 Possible actions: walk, push, climb, grasp Defined using: move(OldState, Action, NewState) Action OldState NewState Monkey and Banana: Actions I

  13. Simply Logical – Chapter 3 • Grasp Banana: • move( state(middle, on_box, middle, has_not), • grasp, • state(middle, on_box, middle, has) ). • Climb Box: • move( state(P, on_floor, P, H), • climb, • state(P, on_box, P, H) ). Monkey and Banana: Actions II

  14. Simply Logical – Chapter 3 • Push Box: • move( state(P1, on_floor, P1, H), • push(P1, P2), • state(P2, on_floor, P2, H)). • Walk: • move( state(P1, on_floor, P, H), • walk(P1, P2), • state(P2, on_floor, P, H)). Monkey and Banana: Actions III

  15. Simply Logical – Chapter 3 move(state(middle, on_box, middle, has_not), grasp, state(middle, on_box, middle, has)). move(state(P, on_floor, P, H), climb, state(P, on_box, P, H) ). move(state(P1, on_floor, P1, H), push(P1, P2), state(P2, on_floor, P2, H)). move(state(P1, on_floor, P, H), walk(P1, P2), state(P2, on_floor, P, H)). Monkey and Banana: Actions Summary

  16. Simply Logical – Chapter 3 • How can the monkey get the banana? canget(state(_, _, _, has)). canget(OldState) :- move(OldState, Move, NewState), canget(NewState). • Can the monkey get the banana from • the initial state? • ?- canget( • state(at_door, on_floor,at_window, has_not)). Monkey and Banana: Goals

  17. Simply Logical – Chapter 3 move(state(middle, on_box, middle, has_not), grasp, state(middle, on_box, middle, has)). move(state(P, on_floor, P, H), climb, state(P, on_box, P, H) ). move(state(P1, on_floor, P1, H), push(P1, P2), state(P2, on_floor, P2, H)). move(state(P1, on_floor, P, H), walk(P1, P2), state(P2, on_floor, P, H)). canget(state(_, _, _, has)). canget(OldState) :- move(OldState, Move, NewState), canget(NewState). Monkey and Banana: Summary

  18. Simply Logical – Chapter 3 | ?- canget(state(at_door,on_floor,at_window,hasnot)). Call: canget(state(at_door,on_floor,at_window,hasnot)) ? Call: move(state(at_door,on_floor,at_window,hasnot),_989,_990) ? Exit: move(state(at_door,on_floor,at_window,hasnot),walk(at_door,_1476),state(_1476,on_floor,at_window,hasnot)) ? Call: canget(state(_1476,on_floor,at_window,hasnot)) ? Call: move(state(_1476,on_floor,at_window,hasnot),_2415,_2416) ? Exit: move(state(at_window,on_floor,at_window,hasnot),climb,state(at_window,on_box,at_window,hasnot)) ? Call: canget(state(at_window,on_box,at_window,hasnot)) ? Call: move(state(at_window,on_box,at_window,hasnot),_3841,_3842) ? Fail: move(state(at_window,on_box,at_window,hasnot),_3841,_3842) ? Fail: canget(state(at_window,on_box,at_window,hasnot)) ? Redo: move(state(at_window,on_floor,at_window,hasnot),climb,state(at_window,on_box,at_window,hasnot)) ? Exit: move(state(at_window,on_floor,at_window,hasnot),push(at_window,_2902),state(_2902,on_floor,_2902,hasnot)) ? Call: canget(state(_2902,on_floor,_2902,hasnot)) ? Call: move(state(_2902,on_floor,_2902,hasnot),_3844,_3845) ? Exit: move(state(_2902,on_floor,_2902,hasnot),climb,state(_2902,on_box,_2902,hasnot)) ? Call: canget(state(_2902,on_box,_2902,hasnot)) ? Call: move(state(_2902,on_box,_2902,hasnot),_5270,_5271) ? Exit: move(state(middle,on_box,middle,hasnot),grasp,state(middle,on_box,middle,has)) ? Call: canget(state(middle,on_box,middle,has)) ? Exit: canget(state(middle,on_box,middle,has)) ? Exit: canget(state(middle,on_box,middle,hasnot)) ? Exit: canget(state(middle,on_floor,middle,hasnot)) ? Exit: canget(state(at_window,on_floor,at_window,hasnot)) ? Exit: canget(state(at_door,on_floor,at_window,hasnot)) ? yes Monkey and Banana: Trace

  19. Simply Logical – Chapter 3 • Order of clauses in monkey-banana example: 1. grasp 2. climb 3. push 4. walk • Changing this order can cause Prolog to loop indefinitely! Monkey and Banana: Notes

More Related