package Ġit . uni bo . tup ro log . solve . primitive Ċ Ċ import Ġit . uni bo . tup ro log . core . Numeric Ċ import Ġit . uni bo . tup ro log . core . Term Ċ import Ġit . uni bo . tup ro log . solve . ExecutionContext Ċ import Ġit . uni bo . tup ro log . solve . function . eval As Arithmetic Expression Ċ Ċ /** ĠBase Ġclass Ġfor Ġimplementing Ġarithmetic Ġrelation Ġbetween Ġ[ Numeric ] Ġterms Ġ*/ Ċ abstract Ġclass ĠArithmetic Relation < E Ġ: ĠExecutionContext >( operator : ĠString ) Ġ: ĠBinary Relation . Pred ic ative < E >( operator ) Ġ{ ĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠSolve . Request < E >. compute ( first : ĠTerm , Ġsecond : ĠTerm ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġensuring All Arguments Are Instanti ated () ĊĠĠĠĠĠĠĠ Ġreturn Ġevaluate And Compute ( first , Ġsecond ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠSolve . Request < E >. evaluate And Compute ( x : ĠTerm , Ġy : ĠTerm ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġcompute Numeric ( x . eval As Arithmetic Expression ( this , Ġ 0 ), Ġy . eval As Arithmetic Expression ( this , Ġ 1 )) ĊĊĠĠĠ Ġabstract Ġfun Ġcompute Numeric ( x : ĠNumeric , Ġy : ĠNumeric ): ĠBoolean Ċ } Ċ