1 / 11

Discussion #20 Resolution in Datalog

Discussion #20 Resolution in Datalog. Topics. Datalog Prolog Notation Goals  success and failure Examples Recursive Rules Termination Infinite recursion We are not trying to do all of Prolog (or even all of Datalog). 236 Datalog  Datalog  Prolog.

micol
Download Presentation

Discussion #20 Resolution in Datalog

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. Discussion #20Resolution in Datalog

  2. Topics • Datalog • Prolog • Notation • Goals  success and failure • Examples • Recursive Rules • Termination • Infinite recursion • We are not trying to do all of Prolog (or even all of Datalog).

  3. 236 Datalog  Datalog  Prolog • Database oriented (i.e. query answering) • Does not include some features. (Prolog does have the power of procedural languages, but we won't do general I/O, arithmetic, and negation.) • The exact distinction is fuzzy (and doesn't matter). • For the project, we'll do exactly the language we've defined, 236 Datalog. • Syntactically taken from a real Prolog • Is an actual subset of Datalog

  4. 236 Datalog  Prolog (Differences…) • Constants • Prolog: numbers or alphanumeric beginning with lower case letter • 236 Datalog: only strings • Variables • Prolog: begin with a capital letter (anonymous variables, i.e. _ ) • 236 Datalog: begin with a letter (no anonymous variables) • Predicates • Prolog: begin with lower case letter • 236 Datalog: begin with a letter • Comments • Prolog: % … • 236 Datalog: #-comments and #|…|#-comments • Queries • Prolog: | ?- is the interactive prompt, so | ?- p(Y). is the query • 236 Datalog: not interactive, no prompt, just P(Y)?

  5. 236 Datalog  Prolog (Similarities…) • Same syntax for Facts and Rules • Comma means  • No semicolon for ()  use 2 rules. parent(x,y) :- mother(x,y); father(x,y).  changes to: parent(x,y) :- mother(x,y). parent(x,y) :- father(x,y). • Recursive rules the same • Derivations the same • Instantiation • Unification • Resolution (derivations of empty clause) • Backtracking • Results same: “can be derived from database”

  6. Prolog Derivations Although derivations are the same, there is a different way of looking at the derivation in terms of • Goals  query and atomic formulas in the body of the rule. • Success  can be derived • Failure  cannot be derived We can use this same view in 236 Datalog. We’ll use the following database to explain these ideas. Facts: sister('ann','bob'). parent('bob','jay'). parent('bob','kay'). Rules: aunt(x,y) :- sister(x,z), parent(z,y). Queries: aunt('ann','jay')? aunt('ann',x)?

  7. Prolog Derivations (continued…) Prolog 1. aunt('ann','jay') goal 2. aunt('ann','jay') :- sister('ann',z), parent(z,'jay'). 2a. sister('ann','ann') subgoal 2b. Fail! Backtrack 2a. sister('ann','bob') subgoal 2b. Matches a Fact (directly) 2c. parent('bob','jay') subgoal 2c. Matches a Fact (directly) Success! Yes! Resolution 1. aunt('ann','jay') 2. aunt('ann','jay') :- sister('ann',z), parent(z,'jay'). 2a. sister('ann','ann') 2b. Fail! Backtrack 2a. sister('ann','bob') 2b. res. with fact: sister('ann','bob') 2c. parent('bob','jay') 2c. res. with fact: parent('bob','jay') Yes!

  8. Facts: sister('ann','bob'). parent('bob','jay'). parent('bob','kay'). Rules: aunt(x,y) :- sister(x,z), parent(z,y). Queries: aunt('ann',x)? 236 Datalog aunt('ann',x)? 1. aunt('ann','ann') goal 2. aunt('ann','ann') :- sister('ann',z),parent(z,'ann'). 2a. sister('ann','ann') subgoal Fail! Backtrack 2a. sister('ann','bob') subgoal Succeed! 2b. parent('bob','ann') subgoal Fail! Backtrack 2a. sister('ann','jay') subgoal Fail! Backtrack 2a. sister('ann','kay') subgoal Fail! Backtrack 1. aunt('ann','bob') goal 2. aunt('ann','bob') :- sister('ann',z),parent(z,'bob'). 2a. sister('ann','ann') subgoal Fail! Backtrack 2a. sister('ann','bob') subgoal Succeed! 2b. parent('bob','bob') subgoal Fail! Backtrack 2a. sister('ann','jay') subgoal Fail! Backtrack 2a. sister('ann',‘kay') subgoal Fail! Backtrack

  9. 1. aunt('ann','jay') goal 2. aunt('ann','jay') :- sister('ann',z),parent(z,'jay'). 2a. sister('ann','ann') subgoal Fail! Backtrack 2a. sister('ann','bob') subgoal Succeed! 2b. parent('bob','jay') subgoal Succeed! Output “x='jay'” 2a. sister('ann','jay') subgoal Fail! Backtrack 2a. sister('ann','kay') subgoal Fail! Backtrack 1. aunt('ann','kay') goal 2. aunt('ann','kay') :- sister('ann',z),parent(z,'kay'). 2a. sister('ann','ann') subgoal Fail! Backtrack 2a. sister('ann','bob') subgoal Succeed! 2b. parent('bob','kay') subgoal Succeed! Output “x='kay'” 2a. sister('ann','jay') subgoal Fail! Backtrack 2a. sister('ann',‘kay') subgoal Fail! Backtrack Facts: sister('ann','bob'). parent('bob','jay'). parent('bob','kay'). Rules: aunt(x,y) :- sister(x,z), parent(z,y). Queries: aunt('ann',x)?

  10. Facts: sister('ann','bob'). parent('bob','jay'). parent('bob','kay'). Rules: aunt(x,y) :- sister(x,z), parent(z,y). Queries: aunt('ann',x)? Tree View aunt('ann',x) x = 'ann' x = 'bob' x = 'jay' x = 'kay' … … sister('ann',z),parent(z,'ann'). sister('ann',z),parent(z,'jay'). … z = 'ann' z = 'ann' z = 'bob' … sister('ann','ann') sister('ann','ann') fail fail sister('ann','bob'),parent('bob‘,'jay'). Note that we only need to keep track of one path from root to leaf at a time. succeed succeed

  11. rule 4 rule 5 f(1,3) fail f(1,z),b(z,3) z=2 z=3 z=1 f(1,2),b(2,3) succeed f(1,3),b(3,3) fail f(1,1),b(1,3) succeed rule 4 f(2,3) succeed Potential Infinite Recursion b(1,3) Domain = {1,2,3} 1. f(1,1). 2. f(1,2). 3. f(2,3). 4. b(x,y):-f(x,y). 5. b(x,y):-f(x,z),b(z,y). b(1,3)? Infinite recursion! Keep current path stack  if recursive call already in path, fail! Infinite Recursion! fail

More Related