package Ġcom . github . pro log db . runtime Ċ Ċ import Ġcom . github . pro log db . async . Lazy Sequence Ċ import Ġcom . github . pro log db . runtime . proof search . Rule Ċ import Ġcom . github . pro log db . runtime . term . Compound Term Ċ import Ġcom . github . pro log db . runtime . term . Term Ċ import Ġcom . github . pro log db . runtime . term . Variable Ċ import Ġcom . github . pro log db . runtime . un ification . Un ification Ċ import Ġcom . github . pro log db . runtime . util . Ar ity Map Ċ Ċ interface ĠClause Store Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAll Ġclauses Ġdefined Ġin Ġthis Ġstore . ĠUsed Ġmainly Ġfor Ġ` listing / 0 `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġclauses : ĠIterable < Clause > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinds Ġentries Ġwithin Ġ[ clauses ] Ġthat Ġpossibly Ġun ify Ġwith Ġthe Ġgiven Ġ[ Compound Term ] Ġ( facts Ġor Ġrule Ġheads ). ĠThis ĊĠĠĠĠ Ġ* Ġmethod Ġmay Ġjust Ġreturn Ġ[ clauses ] Ġbut Ġmay Ġalso Ġimplement Ġs oph istic ated Ġindexing Ġor Ġinvolve Ġpersistent Ġstorage . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġdefault Ġimplementation Ġof Ġthis Ġmethod Ġuses Ġthe Ġkotlin Ġstdlib Ġ[ filter ] Ġmethod . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind For ( goal : ĠCompound Term ): ĠIterable < Clause > Ġ= Ġclauses . filter Ġ{ Ġit . arity Ġ== Ġgoal . arity Ġ&& Ġit . functor Ġ== Ġgoal . functor Ġ} Ċ } Ċ Ċ interface ĠMutable Clause Store Ġ: ĠClause Store Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġthe Ġgiven Ġentry Ġto Ġthe Ġlibrary ; Ġacts Ġlike Ġ` assert z / 1 `: Ġadds Ġthe Ġentry Ġto Ġthe Ġ** end ** Ġof Ġthe Ġknowledge Ġbase . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġassert z ( entry : ĠClause ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġfacts Ġthat Ġun ify Ġwith Ġthe Ġgiven Ġ[ Compound Term ] Ġfrom Ġthe Ġentry Ġstore . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ* Does Ġnot Ġaffect Ġrules .* . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠUn ifications Ġof Ġthe Ġgiven Ġ[ Compound Term ] Ġwith Ġthe Ġremoved Ġfacts . ĠEvery Ġinvocation Ġof Ġ[ Lazy Sequence . try Advance ] ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġattempts Ġto Ġremove Ġanother Ġentry Ġfrom Ġthe Ġstore . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġre tract Fact ( fact : ĠCompound Term ): ĠLazy Sequence < Un ification > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġfacts Ġ( which Ġun ify Ġwith Ġthe Ġgiven Ġ[ Compound Term ]) Ġ** or Ġrules Ġ( which s Ġheads Ġun ify Ġwith ĊĠĠĠĠ Ġ* Ġthe Ġgiven Ġcompound Ġterm )** Ġfrom Ġthis Ġstore . ĠAct s Ġlike Ġ` re tract / 1 `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġun ifications Ġof Ġthe Ġgiven Ġ[ Compound Term ] Ġwith Ġthe Ġremoved Ġfacts Ġresp . Ġrule Ġheads . ĠEvery Ġinvocation ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġof Ġ[ Lazy Sequence . try Advance ] Ġattempts Ġto Ġremove Ġanother Ġentry Ġfrom Ġthe Ġstore . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġre tract ( un ifies With : ĠCompound Term ): ĠLazy Sequence < Un ification > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġall Ġfacts Ġthat Ġun ify Ġwith Ġthe Ġgiven Ġ[ Compound Term ] Ġfrom Ġthe Ġentry Ġstore . Ġ** Does Ġnot Ġaffect Ġrules **. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġre tract All Fact s ( fact : ĠCompound Term ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre tract Fact ( fact ). consume All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġall Ġfacts Ġ( which Ġun ify Ġwith Ġthe Ġgiven Ġ[ Compound Term ]) Ġ** and Ġrules Ġ( which s Ġheads Ġun ify Ġwith Ġthe Ġgiven ĊĠĠĠĠ Ġ* Ġ[ Compound Term ]) ** Ġfrom Ġthis Ġstore . ĠAct s Ġlike Ġ` re tract All / 1 `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġre tract All ( un ifies With : ĠCompound Term ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre tract ( un ifies With ). consume All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġall Ġfacts Ġwith Ġthe Ġgiven Ġfunctor Ġand Ġar ity . Ġ** Does Ġnot Ġaffect Ġrules .** ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġab ol ish Fact s ( functor : ĠString , Ġar ity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre tract All Fact s ( Compound Term ( functor , ĠArray < Term >( arity , Ġ{ ĠVariable . AN ONY MO US Ġ} ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġall Ġfacts Ġ** and Ġrules ** Ġwith Ġthe Ġgiven Ġfunctor Ġand Ġar ity . ĠAct s Ġlike Ġ` ab ol ish / 1 ` Ġand Ġ` ab ol ish / 2 `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġab ol ish ( functor : ĠString , Ġar ity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre tract All ( Compound Term ( functor , ĠArray < Term >( arity , Ġ{ ĠVariable . AN ONY MO US Ġ} ))) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġtype alias ĠAr ity Map To Library Entries Ġ= ĠAr ity Map < Mutable List < Clause >> Ċ Ċ /** Ċ Ġ* ĠThe Ġmost Ġsimple Ġimplementation Ġof Ġ[ Mutable Clause Store ] Ġpossible : Ġis Ċ Ġ* Ġbased Ġon Ġa Ġplain Ġ[ Mutable List ] Ġand Ġuses Ġthe Ġdefault Ġimplementations Ċ Ġ* Ġdeclared Ġin Ġ[ Clause Store ] Ġand Ġ[ Mutable Clause Store ] Ċ Ġ*/ Ċ class ĠSimple Clause Store ( given Entries : ĠIterable < Clause > Ġ= Ġempty List ()) Ġ: ĠMutable Clause Store Ġ{ ĊĠĠĠ Ġprivate Ġval Ġentries Ġ= ĠArrayList ( given Entries . toList ()) ĊĊĠĠĠ Ġoverride Ġval Ġclauses Ġ= Ġentries ĊĊĠĠĠ Ġoverride Ġfun Ġassert z ( entry : ĠClause ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . add ( entry ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġre tract Fact ( fact : ĠCompound Term ): ĠLazy Sequence < Un ification > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLazy Sequence . from Generator Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġentries . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġentries [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry Ġis ĠCompound Term ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun ification Ġ= Ġentry . un ify ( fact , ĠRandom Variable Scope ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( un ification Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . remove At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ from Generator Ġun ification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġre tract ( un ifies With : ĠCompound Term ): ĠLazy Sequence < Un ification > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLazy Sequence . from Generator Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġentries . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġentries [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry Ġis ĠCompound Term ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun ification Ġ= Ġentry . un ify ( un ifies With , ĠRandom Variable Scope ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( un ification Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . remove At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ from Generator Ġun ification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( entry Ġis ĠRule ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhead Un ification Ġ= Ġentry . head . un ify ( un ifies With , ĠRandom Variable Scope ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( head Un ification Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . remove At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ from Generator Ġhead Un ification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠPro log RuntimeException (" Cannot Ġtest Ġwhether Ġto Ġre tract Ġan Ġentry : Ġis Ġneither Ġa Ġfact Ġnor Ġa Ġrule ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġab ol ish Fact s ( functor : ĠString , Ġar ity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . removeAll ( entries . filter Ġ{ Ġit . arity Ġ== Ġar ity Ġ&& Ġit Ġis ĠCompound Term Ġ&& Ġit . functor Ġ== Ġfunctor Ġ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġab ol ish ( functor : ĠString , Ġar ity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . removeAll ( entries . filter Ġ{ Ġit . arity Ġ== Ġar ity Ġ&& Ġit . functor Ġ== Ġfunctor Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠIndexes Ġentries Ġby Ġar ity Ġand Ġfunctor Ġin Ġmaps . Ċ Ġ*/ Ċ class ĠDo ub ly Indexed Clause Store Ġ: ĠMutable Clause Store Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġindex . ĠThe Ġkey Ġin Ġthe Ġouter Ġmap Ġcorresponds Ġto Ġ[ Clause . functor ] Ġand Ġthe ĊĠĠĠĠ Ġ* Ġkey Ġof Ġthe Ġinner Ġmap Ġcorresponds Ġto Ġ[ Clause . arity ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġindex Ġ= Ġmutable Map Of < String , ĠAr ity Map To Library Entries >() ĊĊĠĠĠ Ġoverride Ġfun Ġfind For ( goal : ĠCompound Term ): ĠIterable < Clause > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġar ity Map Ġ= Ġindex [ goal . functor ] Ġ?: Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġreturn Ġar ity Map [ goal . arity ] Ġ?: Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġassert z ( entry : ĠClause ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġar ity Index : ĠAr ity Map To Library Entries ĊĊĠĠĠĠĠĠĠ Ġif Ġ( entry . functor Ġ! in Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar ity Index Ġ= ĠAr ity Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex [ entry . functor ] Ġ= Ġar ity Index ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar ity Index Ġ= Ġindex [ entry . functor ] !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġentry List : ĠMutable List < Clause > ĊĊĠĠĠĠĠĠĠ Ġif Ġ( entry . arity Ġ! in Ġar ity Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry List Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar ity Index [ entry . arity ] Ġ= Ġentry List ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry List Ġ= Ġar ity Index [ entry . arity ] !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġentry List . add ( entry ) ĊĠĠĠĠĠĠĠ Ġindex Changed Since Last Exports Calculation Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġindex Changed Since Last Exports Calculation Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġcached Exports : ĠIterable < Clause >? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġval Ġclauses : ĠIterable < Clause > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Changed Since Last Exports Calculation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached Exports Ġ= Ġindex . flatMap Ġ{ Ġit . value . ar ities . flatMap Ġ{ Ġar ity Ġ-> Ġit . value [ arity ] !! Ġ}} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Changed Since Last Exports Calculation Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcached Exports !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġre tract Fact ( fact : ĠCompound Term ): ĠLazy Sequence < Un ification > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġar ity Index Ġ= Ġindex [ fact . functor ] Ġ?: Ġreturn ĠUn ification . NONE ĊĠĠĠĠĠĠĠ Ġval Ġentry List Ġ= Ġar ity Index [ fact . arity ] Ġ?: Ġreturn ĠUn ification . NONE ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLazy Sequence . from Generator Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġentry List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġentry List [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry Ġis ĠCompound Term ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun ification Ġ= Ġentry . un ify ( fact , ĠRandom Variable Scope ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( un ification Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry List . remove At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ from Generator Ġun ification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġre tract ( un ifies With : ĠCompound Term ): ĠLazy Sequence < Un ification > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġar ity Index Ġ= Ġindex [ un ifies With . functor ] Ġ?: Ġreturn ĠUn ification . NONE ĊĠĠĠĠĠĠĠ Ġval Ġentry List Ġ= Ġar ity Index [ un ifies With . arity ] Ġ?: Ġreturn ĠUn ification . NONE ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLazy Sequence . from Generator Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġentry List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġentry List [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry Ġis ĠCompound Term ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun ification Ġ= Ġentry . un ify ( un ifies With , ĠRandom Variable Scope ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( un ification Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry List . remove At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ from Generator Ġun ification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( entry Ġis ĠRule ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhead Un ification Ġ= Ġentry . head . un ify ( un ifies With , ĠRandom Variable Scope ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( head Un ification Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry List . remove At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ from Generator Ġhead Un ification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠPro log RuntimeException (" Cannot Ġdetermine Ġwhether Ġentry Ġshould Ġbe Ġre tract ed : Ġis Ġneither Ġa Ġfact Ġnor Ġa Ġrule .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġab ol ish ( functor : ĠString , Ġar ity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġindex [ functor ]?. remove ( arity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġab ol ish Fact s ( functor : ĠString , Ġar ity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġar ity Map Ġ= Ġindex [ functor ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġentry List Ġ= Ġar ity Map [ arity ] Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġentry List . removeAll ( entry List . filter Ġ{ Ġit Ġis ĠCompound Term Ġ}) ĊĠĠĠ Ġ} Ċ }