Add EncodingUtils class #942
Open
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 added a new class
EncodingUtils
that can encode cardinality constraints and symmetry constraints (moved the existingSymmetryEncoder.encodeLexLeader
intoEncodingUtils
). Simplified existing code to use the new class.This PR is almost a pure refactor with one exception: the encoding of
rf
has slightly changed.We used to encode the at-most-one constraint unconditionally for rf-edges, and only conditioned the at-least-one constraint on the execution of a read, i.e.,
at-most-one(SetOfRfEdges) /\ (exec(r) => at-least-one(SetOfRfEdges)
.Now both parts are conditioned:
exec(r) => (at-most-one(...) /\ at-least-one(...))
.I don't know if this impacts performance in any measurable way (over our unit tests nothing really changes I think).