Fix unsoundness of symmetry learning #555
Merged
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.
This PR fixes the unsoundness of symmetry learning.
The Refinement procedure performs two steps to generate refinement clauses from so-called base reasons (of a consistency violation). Those steps are (1) reducing the base reason to a core reason and (2) applying symmetry reasoning.
It used to do (1) followed by (2), which was unsound. Those steps do not commute and the order needs to be (2)->(1).
I also renamed
SymmetryLearning
toSymmetricLearning
because the former sounds like we learn symmetries, which is not the case (we know the symmetries already, we just apply them!).A consequence of this change is that the statistics of learned reasons now counts all symmetric ones. We used to only count the non-symmetric ones. If this is a problem somehow, I can try to exclude the symmetric ones again.