On 29/01/15 10:06, Christophe FAGOT [intactile DESIGN] wrote:
Hi Dave,
my answers and comments are in the following. It’s good to talk about RETE
engines :-)
Le 28 janv. 2015 à 19:33, Dave Reynolds <[email protected]> a écrit :
On 28/01/15 14:06, Christophe FAGOT [intactile DESIGN] wrote:
Hi Andy,
thanks for your answer, and I’m ok for the graph being a set of triples, it is
the (very good) reason explaining why only one triple is produced. But the
reasoner is not in forward model. It is a forward-RETE model, which means that
the forward rules have to work incrementally, allowing to add and remove
triples and maintaining the consistency of the model.
So in the case described by Sébastien, the forward-RETE model should not remove
the inferred triple since another rule has its body terms still validated. At
least, this last rule should have been fired in order to indicate it that the
triple which was not created previously (because it was still in the graph) is
going to be removed, so this last rule should produce it again.
The RETE engine stops once a triple has been deduced by one route. If you
attempt to track each possible route by which a triple could be deduced and
reference count them all then you will get a combinatoric explosion in numbers
of possible deduction paths and performance plummets (which is why naive truth
maintenance never worked out).
You don’t need to track each possible route to maintain the truth. In a
previous company Sébastien and I created a home-made RETE engine, and simple
counters stored with triples are enough to maintain the truth of the graph. The
counter is increased each time a triple is redundantly added, and decreased
when the triple is asked to be removed. The triple is really removed from the
graph when its counter is at 0. So, no combinatoric explosion.
The first version of the Jena engine did such reference counting but it
was later scrapped. Agreed that you don't have to store the deduction
path but you still have to follow each deduction path in order to
maintain the reference counts. For rule sets like OWL which involve lots
of equality reasoning there can be lots such such duplicate paths.
That's where the combinatorics bites. For the usages we were seeing with
Jena then the benefit of avoiding redundantly re-deriving deductions
outweighed the cost of have non-incremental deletes.
The Jena engine works around this by not attempting to handle removals incrementally at
all. A remove is supposed to mark the model as needing a new "prepare" stage
and the entire deduction process is run from scratch again the next time you query the
model.
So, if I well understand what you say, the RETE Engine is monotonic and
maintain the truth when adding some triples, but it’s not the case when triples
are removed. Am I true?
Yes.
If, when removing a triple, we want to maintain the truth in a graph managed by
the RETE engine, we have to do as if the engine was a classical forward one and
require a new « prepare » stage (meaning the removing of the whole previous
inferences). Am I true on this point too ?
Yes.
Dave