package Ġit . uni bo . tup ro log . solve . pro blog . lib . primitive Ċ Ċ import Ġit . uni bo . tup ro log . core . Indicator Ċ import Ġit . uni bo . tup ro log . core . Struct Ċ import Ġit . uni bo . tup ro log . core . Term Ċ import Ġit . uni bo . tup ro log . core . Truth Ċ import Ġit . uni bo . tup ro log . core . Var Ċ import Ġit . uni bo . tup ro log . solve . ExecutionContext Ċ import Ġit . uni bo . tup ro log . solve . Solution Ċ import Ġit . uni bo . tup ro log . solve . Solve Options Ċ import Ġit . uni bo . tup ro log . solve . primitive . Solve Ċ import Ġit . uni bo . tup ro log . solve . primitive . Unary Predicate Ċ import Ġit . uni bo . tup ro log . solve . pro blog . lib . Pro blog Lib . E VID ENCE _ PRE D ICATE Ċ import Ġit . uni bo . tup ro log . solve . pro blog . lib . Pro blog Lib . EX PLAN ATION _ VAR _ NAME Ċ import Ġit . uni bo . tup ro log . solve . pro blog . lib . Pro blog Lib . PRE D ICATE _ PREFIX Ċ import Ġit . uni bo . tup ro log . solve . pro blog . lib . knowledge . Prob Explanation Ċ import Ġit . uni bo . tup ro log . solve . pro blog . lib . knowledge . Prob Explanation Term Ċ import Ġit . uni bo . tup ro log . solve . pro blog . lib . primitive . Prob Set Config . get Solver Options Ċ import Ġit . uni bo . tup ro log . un ify . Un ific ator . Companion . m gu With Ċ Ċ /** Ċ Ġ* ĠThis Ġprimitive Ġcomputes Ġan Ġexplanation Ġby Ġfinding Ġsolutions Ġfor Ġall Ġthe Ġ" evidence " Ġpredicates Ċ Ġ* Ġpresent Ġin Ġthe Ġknowledge Ġbase , Ġand Ġbundles Ġthe Ġresult Ġin Ġa Ġ[ Prob Explanation Term ] Ġthat Ġis Ġsubstit uted Ċ Ġ* Ġwith Ġthe Ġfirst Ġparameter . Ċ Ġ* Ċ Ġ* ĠThe Ġcomputation Ġis Ġperformed Ġas Ġfollows . ĠFirst , Ġthe ĠPro log Ġengine Ġfinds Ġsolutions Ġfor Ġthe Ġ" evidence " Ċ Ġ* Ġpredicate Ġover Ġthe Ġcurrent Ġknowledge Ġbase . ĠSolutions Ġof Ġthis Ġfirst Ġsolver Ġprovide Ġall Ġthe Ġterms Ġthat Ċ Ġ* Ġevidence Ġdata Ġover Ġthe Ġknowledge Ġbase , Ġwhich Ġcan Ġeither Ġbe Ġtrue Ġor Ġfalse Ġdata Ġsamples . ĠThen , Ġan Ġexplanation Ċ Ġ* Ġis Ġcomputed Ġfor Ġeach Ġof Ġthese Ġinitial Ġsolutions Ġby Ġinvoking Ġ[ Prob Solve ] Ġby Ġsetting Ġthe Ġsolutions Ġof Ċ Ġ* Ġthe Ġfirst Ġstep Ġas Ġgoals . ĠSince Ġwe Ġare Ġjust Ġinterested Ġin Ġfinding Ġex plan ations , Ġall Ġex plan ations Ġresulting Ċ Ġ* Ġfrom Ġ[ Prob Solve ] with Ġdifferent Ġsubstitution s Ġare Ġreduced Ġtogether Ġwith Ġan Ġ[ Prob Explanation . or ] Ġlogical Ġoperation . Ċ Ġ* ĠFinally , Ġall Ġ[ Prob Explanation ] s Ġfound Ġare Ġreduced Ġtogether Ġby Ġapplying Ġan Ġ[ Prob Explanation . and ] Ġlogical Ġoperation , Ċ Ġ* Ġand Ġthe Ġresult Ġis Ġsubstit uted Ġwith Ġthe Ġfirst Ġargument Ġof Ġthe Ġprimitive . ĠThis Ġlast Ġstep Ġis Ġnecessary Ġbecause Ċ Ġ* Ġit Ġhandles Ġthe Ġcase Ġin Ġwhich Ġmore Ġthan Ġone Ġevidence Ġis Ġpresent Ġin Ġthe Ġknowledge Ġbase , Ġin Ġwhich Ġcase Ġthey Ċ Ġ* Ġshould Ġbe Ġhandled Ġin Ġconjunction Ġin Ġorder Ġto Ġfind Ġprob abil istic Ġquery Ġsolutions . Ċ Ġ* Ċ Ġ* Ġ@ author ĠJ ason ĠD ell al uce Ċ Ġ*/ Ċ internal Ġobject ĠProb Solve Evidence Ġ: ĠUnary Predicate . Non Back track able < ExecutionContext >( ĊĠĠĠ Ġ"${ PRE D ICATE _ PREFIX }_ solve _ evidence " Ċ ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠSolve . Request < ExecutionContext >. compute One ( first : ĠTerm ): ĠSolve . Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevidence Indicator Ġ= ĠIndicator . of ( E VID ENCE _ PRE D ICATE , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( evidence Indicator Ġ! in Ġcontext . static Kb Ġ&& Ġevidence Indicator Ġ! in Ġcontext . dynamic Kb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreply With ( first Ġm gu With ĠProb Explanation Term ( Prob Explanation . TRUE )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġevidence Term Var Ġ= ĠVar . of (" Term Var ") ĊĠĠĠĠĠĠĠ Ġval Ġevidence Truth Var Ġ= ĠVar . of (" Truth Var ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsub Solver () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. solve ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStruct . of ( E VID ENCE _ PRE D ICATE , Ġevidence Term Var , Ġevidence Truth Var ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . get Solver Options (). set Limit ( Solve Options . ALL _ SOL UTION S ). set Lazy ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Solution . Yes >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtruth Ġ= Ġit . subst itution [ evidence Truth Var ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġterm Ġ= Ġit . subst itution [ evidence Term Var ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( term Ġ== Ġnull Ġ|| Ġterm . is Var Ġ|| Ġtruth Ġ== Ġnull Ġ|| Ġtruth Ġ! is ĠTr uth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProb Explanation . FALSE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexplanation Var Ġ= ĠVar . of ( EX PLAN ATION _ VAR _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Explanation Ġ= Ġsolve ( Struct . of ( Prob Solve . functor , Ġexplanation Var , Ġterm )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġs Ġ-> Ġs . subst itution [ explanation Var ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Prob Explanation Term >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġt Ġ-> Ġt . explanation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. reduce Ġ{ Ġacc , Ġt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt . probability Ġ== Ġ 1 . 0 Ġ-> Ġacc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc . probability Ġ== Ġ 1 . 0 Ġ-> Ġt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġt Ġor Ġacc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( truth . isTrue ) Ġtotal Explanation Ġelse Ġtotal Explanation . not () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= ĠProb Explanation . FALSE Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Explanation Ġ= Ġif Ġ( result . isEmpty ()) ĠProb Explanation . TRUE Ġelse Ġresult . reduce Ġ{ Ġacc , Ġt Ġ-> Ġt Ġand Ġacc Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġreply With ( first Ġm gu With ĠProb Explanation Term ( result Explanation )) ĊĠĠĠ Ġ} Ċ } Ċ