-
Notifications
You must be signed in to change notification settings - Fork 277
Incremental solving producing cprover status as it goes #5316
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
Incremental solving producing cprover status as it goes #5316
Conversation
c743717
to
1af207d
Compare
1af207d
to
9efa16d
Compare
9efa16d
to
b75ab07
Compare
[](const std::pair<irep_idt, property_infot> &property) { | ||
return property.second.status == property_statust::FAIL; | ||
}); | ||
std::string status = any_failures ? "FAILURE" : "INCONCLUSIVE"; |
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.
How does this behave in the success case?
Please check the output also on a VERIFICATION SUCCESSFUL
test.
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.
@peterschrammel In the commit message this says that it's not possible to conclude that verification is successful before the unwinding is finished, so it doesn't matter?
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.
Minor faults, it's good to go once they are fixed as far as I am concerned.
[](const std::pair<irep_idt, property_infot> &property) { | ||
return property.second.status == property_statust::FAIL; | ||
}); | ||
std::string status = any_failures ? "FAILURE" : "INCONCLUSIVE"; |
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.
@peterschrammel In the commit message this says that it's not possible to conclude that verification is successful before the unwinding is finished, so it doesn't matter?
-- | ||
^warning: ignoring | ||
-- | ||
Ensure that with multiple properites, the incremental stauts |
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.
Can this be changed?
properites
->properties
stauts
->status
switches to failure as soon as one property has been falsified | ||
but keeps unwinding till it has resolved them all | ||
|
||
Use `--no-propagation` to ensure that even the output is the same regardless of whether the asserts are checked via the solver or the constant propogator |
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.
propogator
-> propagator
-- | ||
^warning: ignoring | ||
-- | ||
Ensure that with multiple properites, the incremental stauts |
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.
ditto
The incremental status should report failure from the first unwinding for which one property is falsified.
It is not possible to conclude successful verification before the unwinding has finished, so this prints inconclusive until the analysis is complete. However, if one property has been falsified, then even though the analysis can continue to check other properties, the verification will certainly fail.
We want to print the status after we've done any solving for that unwind, but before we've done an extra step of symexing. We should not print in the event the full equation has been generated, as then we have a full solution so ins't incremental. Ditto we don't need to print the status if we've found a failure, as this function will be called again to do the next symex invocation if there are further propreties to check
We now print after all solving, and the last thing before the next increment, therefore the printing checks are easier to check immediately precedes the next unwinding, rather than checking appears after the increment we are talking about.
In this case, the status is inconclusive until completion, at which point success will be reported by CBMC overall.
1cf3722
to
4972f54
Compare
@peterschrammel @NlightNFotis comments addressed -> it required a little tweaking to exactly where the printing went to get it working correctly but I'm happy with it now. The behaviour is: In each step, before doing the next round of unwinding, but after solving the equation, we will print inconclusive if there no failed properties yet, otherwise we'll print failed. Once we've either got an answer to all properties, or finished unwinding, no incremental status will be reported, since the final status will be reported next. |
Needs some tidy up but this prints output that is consistent with the
old version