Tabling and commits

Hi Jan,

A little while ago you wrote the following:

Notably, AFAIK, XSB can deal with […]
updates for tabled dynamic predicates (incremental tabling).
SWI can’t. Any commit (!, ->, +) of a tabled predicate basically
leads to incomplete tables and thus incorrect results.

With all the new work to support tnot, is it still true that any commit (!,->,+) of a tabled predicate leads to incorrect results?

AFAIK, the current behavior of wrt cuts/commits is the same between XSB and SWI, except that XSB tells you that a commit prunes solutions for a tabled predicate and SWI doesn’t (yet). The big change is that SWI now, like XSB, creates a component for every new tabled goal and solves that as soon as possible. Only if the new component appears to depend on older incomplete components, the components get merged and commits can prune results. In other words, you need recursion through code that commits.