1 / 7

Understanding Datalog and Prolog Derivations: Goals, Success, and Failure Analysis

This document explores how Datalog and Prolog derive goals through a structured method of resolution. By analyzing facts and rules, we observe the successful and failed paths during query resolution. Specific examples detail the aunt relationship example, demonstrating how different sister and parent facts lead to various outcomes in querying. Key concepts of backtracking within Prolog's mechanisms are covered, showing how to trace the resolution path while preventing infinite recursion. The approach presents both fundamental insights for beginners and practical applications for experienced programmers.

Télécharger la présentation

Understanding Datalog and Prolog Derivations: Goals, Success, and Failure Analysis

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. Datalog &Resolution in Datalog

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

  3. 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!

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

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

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

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