package Ġit . uni bo . tup ro log . solve . primitive Ċ Ċ import Ġit . uni bo . tup ro log . core . Substitution Ċ import Ġit . uni bo . tup ro log . core . Term Ċ import Ġit . uni bo . tup ro log . solve . ExecutionContext Ċ Ċ /** ĠBase Ġclass Ġto Ġimplement Ġprimitives Ġthat Ġre late Ġtwo Ġ[ Term ] s Ġand Ġprovide Ġa Ġsingle Ġresponse Ġ*/ Ċ abstract Ġclass ĠBinary Relation < E Ġ: ĠExecutionContext >( operator : ĠString ) Ġ: ĠPrimitive Wrapper < E >( operator , Ġ 2 ) Ġ{ ĊĊĠĠĠ Ġ/** ĠTemplate Ġmethod Ġa imed Ġat Ġcomputing Ġthe Ġapplication Ġof Ġthis Ġrelation Ġto Ġthree Ġ[ Term ] s Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun ĠSolve . Request < E >. compute All ( ĊĠĠĠĠĠĠĠ Ġfirst : ĠTerm , ĊĠĠĠĠĠĠĠ Ġsecond : ĠTerm ĊĠĠĠ Ġ): ĠSequence < Solve . Response > ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġunchecked Implementation ( request : ĠSolve . Request < E >): ĠSequence < Solve . Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest . compute All ( request . arguments [ 0 ], Ġrequest . arguments [ 1 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠWithout Side Effects < E Ġ: ĠExecutionContext >( operator : ĠString ) Ġ: ĠBinary Relation < E >( operator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprotected Ġabstract Ġfun ĠSolve . Request < E >. compute All Substitution s ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst : ĠTerm , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond : ĠTerm ĊĠĠĠĠĠĠĠ Ġ): ĠSequence < Substitution > ĊĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġfun ĠSolve . Request < E >. compute All ( first : ĠTerm , Ġsecond : ĠTerm ): ĠSequence < Solve . Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcompute All Substitution s ( first , Ġsecond ). map Ġ{ Ġreply With ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠNon Back track able < E Ġ: ĠExecutionContext >( operator : ĠString ) Ġ: ĠBinary Relation < E >( operator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprotected Ġabstract Ġfun ĠSolve . Request < E >. compute One ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst : ĠTerm , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond : ĠTerm ĊĠĠĠĠĠĠĠ Ġ): ĠSolve . Response ĊĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġfun ĠSolve . Request < E >. compute All ( first : ĠTerm , Ġsecond : ĠTerm ): ĠSequence < Solve . Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsequence Of ( compute One ( first , Ġsecond )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠFunctional < E Ġ: ĠExecutionContext >( operator : ĠString ) Ġ: ĠNon Back track able < E >( operator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprotected Ġabstract Ġfun ĠSolve . Request < E >. compute One Substitution ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst : ĠTerm , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond : ĠTerm ĊĠĠĠĠĠĠĠ Ġ): ĠSubst itution ĊĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġfun ĠSolve . Request < E >. compute One ( first : ĠTerm , Ġsecond : ĠTerm ): ĠSolve . Response Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreply With ( compute One Substitution ( first , Ġsecond )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠPred ic ative < E Ġ: ĠExecutionContext >( operator : ĠString ) Ġ: ĠNon Back track able < E >( operator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprotected Ġabstract Ġfun ĠSolve . Request < E >. compute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst : ĠTerm , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond : ĠTerm ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġfun ĠSolve . Request < E >. compute One ( first : ĠTerm , Ġsecond : ĠTerm ): ĠSolve . Response Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( compute ( first , Ġsecond )) Ġreply Success () Ġelse Ġreply Fail () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ