-
Notifications
You must be signed in to change notification settings - Fork 274
[RFC] Direct CVC4 to use ALL logics #6248
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This changes CVC4 to use ALL logics when solving. This has the advantages that: 1. We will no longer receive errors when quantified expressions are sent to CVC4. 2. We may now solve more problems. The disadvantages are: A. Solving may take longer in some cases when quantifiers are not used. B. CVC4 can now (more easily?) report "unknown". Note that due to introducing quantifiers in expressions in prior commits/work, reporting of unknown is now handled and can be achieved with z3 already.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would prefer setting the logic based on the contents of the formula. Maybe even outside of the construction of the smt2_conv
because some formulae will not work with some solvers and it would be good to give meaningful error messages about this. I suspect QF_ABVFP
is fine for most users and ABVFP
will cover most of the rest but in unusual use-cases we can produce DT
, NIA
, NRA,
UF' and S
.
Codecov Report
@@ Coverage Diff @@
## develop #6248 +/- ##
===========================================
+ Coverage 67.40% 76.18% +8.77%
===========================================
Files 1157 1478 +321
Lines 95236 161670 +66434
===========================================
+ Hits 64197 123165 +58968
- Misses 31039 38505 +7466
Flags with carried forward coverage won't be shown. Click here to find out more.
Continue to review full report at Codecov.
|
I agree that setting the correct logic for what we actually send to the solver is the correct approach. How to achieve this is (IMHO) it's own discussion and outside the scope of this PR (although we can start it here if it's of interest?). To argue for this PR and the chosen implementation decisions:
That said, I have no (good) argument to make that setting the logic to |
If you have all the formula before you start adding things to the solver (which, in CBMC, you can do) then setting the logic correctly is not hard. Walk the formula and...
|
This requires some changes to how the conversion is done at the moment. Right now the logic is chosen and output before any of the formula is examined or converted. Not to disagree with the idea, but just to mentioned that this PR was aiming for a quick fix that solves some small issues. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fine with that for now if it solves a concrete issue.
Raising this PR with "[RFC]" since this could be a discussion. Earlier ideas about using
ALL
were argued against due to raisingunknown
results, but since these appear anyway withz3
and this change allowscvc4
to solve more problems and (maybe) produce less errors this seems worth considering.This changes CVC4 to use ALL logics when solving. This has the
advantages that:
are sent to CVC4.
The disadvantages are:
A. Solving may take longer in some cases when quantifiers are
not used.
B. CVC4 can now (more easily?) report "unknown".
Note that due to introducing quantifiers in expressions in
prior commits/work, reporting of unknown is now handled and can
be achieved with z3 already.