This came up in issue55:
There are at least three different possible approaches:
1. Compile away negative preconditions early (like FF).
2. Introduce new derived variables, as described in the AIJ paper on the
3. Treat the negative precondition as a disjunctive precondition and
expand it by "multiplying out" the possibilities.
Each approach has its pros and cons.
Approach 1. may be the most robust approach, but we'd have to check if it causes
us to suffer in cases that we care about that currently work fine.
Approach 2. is probably the worst one in general since most of our heuristics do
not supported derived predicates. It may be the best one for heuristics that do
properly support derived predicates, though.
Approach 3. may be the best one where you can get away with it, but it can be
exponential, and I'm not sure that we can rule out that we'll hit such
exponential cases in some of the weirder compiled problems that people come up
with. This is probably also the one that is easiest to implement.
We finally implemented approach 3 but it would be nice if we had all three
approaches and an option to select one.