Lazily add clauses #61
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I discovered a very sneaky (not really...) bug where incrementally added clauses can have the first two literals eliminated in such a way, that when the solver state is restored through reconstruction stack, they are assigned to false at level 0, making watch invariants invalid. Apparently, none of the incremental tests caught it.
The easiest solution I came up with is to always restore the solver first, and add clauses after. Perhaps not the cleanest solution, but we had something similar with having to memorize newly added clauses anyway. Why not go all in on the idea of adding clauses when needed?
I am sure there is another approach which adds clauses eagerly, but laziness is the simplest solution I came up with.