Add implication and convert to Minion #590
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.
Tracking issue: #511
Implements implication and conversion of implications to Minion.
Normalisation rules will be added in a follow up PR.
Changelog
Add
Imply
expressionAdd the
Imply
expression type to represent material implication (x->y
).Implement parsing it using the JSON parser.
Convert implications to Minion
Convert
Imply
expressions to Minion.This commit adds the following introduction rules (from Savile Row):
These are implemented together in
introduce_reifyimply_ineq_from_imply
.Because the first rule uses the right hand side as a constraint,
implications cannot be flattened using
flatten_generic
. Implicationsinstead use
flatten_implication
, which only flattens the left handside.
This commit adds the following other rule changes:
Add
bool_eq_to_reify
to convert boolean aux-vars to Minion.Flatten
Not
usingflatten_generic
run_solver=true
has been set for all implication tests except foroptimisations/implies-tautologies-cse
. This test is staying disabledfor now, as it takes too long to solve with Minion in its current form.
However, this makes it ideal as a benchmark to measure the effect of
future optimisations.