Skip to content

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

Merged

Conversation

thk123
Copy link
Contributor

@thk123 thk123 commented Apr 22, 2020

Needs some tidy up but this prints output that is consistent with the
old version

  • Each commit message has a non-empty body, explaining why the change was made.
  • Methods or procedures I have added are documented, following the guidelines provided in CODING_STANDARD.md.
  • The feature or user visible behaviour I have added or modified has been documented in the User Guide in doc/cprover-manual/
  • Regression or unit tests are included, or existing tests cover the modified code (in this case I have detailed which ones those are in the commit message).
  • [na] My commit message includes data points confirming performance improvements (if claimed).
  • My PR is restricted to a single feature or bugfix.
  • White-space or formatting changes outside the feature-related changed lines are in commits of their own.

@thk123 thk123 changed the title Initial version Incremental solving producing cprover status as it goes Apr 22, 2020
@thk123 thk123 force-pushed the print-status-during-incremental-solving branch from c743717 to 1af207d Compare April 24, 2020 12:49
@thk123 thk123 force-pushed the print-status-during-incremental-solving branch from 1af207d to 9efa16d Compare April 29, 2020 16:25
@thk123 thk123 marked this pull request as ready for review April 29, 2020 16:28
@thk123 thk123 force-pushed the print-status-during-incremental-solving branch from 9efa16d to b75ab07 Compare April 29, 2020 16:33
[](const std::pair<irep_idt, property_infot> &property) {
return property.second.status == property_statust::FAIL;
});
std::string status = any_failures ? "FAILURE" : "INCONCLUSIVE";
Copy link
Member

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.

Copy link
Contributor

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?

Copy link
Contributor

@NlightNFotis NlightNFotis left a 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";
Copy link
Contributor

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
Copy link
Contributor

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
Copy link
Contributor

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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto

Thomas Kiley added 6 commits May 1, 2020 18:16
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.
@thk123 thk123 force-pushed the print-status-during-incremental-solving branch 2 times, most recently from 1cf3722 to 4972f54 Compare May 1, 2020 17:21
@thk123
Copy link
Contributor Author

thk123 commented May 1, 2020

@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.

@NlightNFotis NlightNFotis merged commit 50154b6 into diffblue:develop May 4, 2020
@thk123 thk123 deleted the print-status-during-incremental-solving branch May 6, 2020 09:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants