Tabling meets negation!

I’ve pushed a series of commits in the context of bringing SWI-Prolog tabling closer to XSB. This part deals with negation and implements tnot/1. This implements delaying negative goals that allows us to solve problems like this (from the XSB test suite):

:- table a/0, b/0, c/0, d/0.

a :- b, tnot(c).

b :- a.
b :- d.
b.

c :- tnot(d).

d :- b, fail.

The code passes the XSB negation test suite, but should still be considered experimental. Please give it a try.

All this was relatively easy to do thanks to regular discussions with Theresa Swift, David Warren and Fabrizio Riguzzi, initiated by Kyndi.

1 Like