-
Notifications
You must be signed in to change notification settings - Fork 274
Unwinding options --unwinding-assertions and --partial-loops do not conflict #6644
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
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.
Code changes look fine, just a minor typo in the docs update and my general "hard of understanding" which might be more a reflection on me than on the new docs...
c2c51d8
to
7cd36a7
Compare
Codecov Report
@@ Coverage Diff @@
## develop #6644 +/- ##
===========================================
+ Coverage 77.04% 77.76% +0.71%
===========================================
Files 1594 1568 -26
Lines 185276 179628 -5648
===========================================
- Hits 142748 139684 -3064
+ Misses 42528 39944 -2584
Continue to review full report at Codecov.
|
doc/cprover-manual/cbmc-unwinding.md
Outdated
@@ -161,7 +161,9 @@ to the later assertion, use the option | |||
This option will allow paths that execute loops only partially, enabling | |||
a counterexample for the assertion above even for small unwinding | |||
bounds. The disadvantage of using this option is that the resulting path | |||
may be spurious, that is, it may not exist in the original program. | |||
may be spurious, that is, it may not exist in the original program. If | |||
`--unwinding-assertions` is also used and all unwinding assertions pass, |
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.
If
--unwinding-assertions
is also used [together with --partial-loops] and all unwinding assertions pass
I can't quite see the example where this would happen. Does the following statement hold? Whenever a failing assertion becomes reachable due to the use of --partial-loops, there must be a failing unwinding assertion. ❓
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.
Fair point. I have now reworded the text as follows:
If `--unwinding-assertions` is also used, and the particular counterexample
trace does not include a report of a violated unwinding assertion, then that
counterexample is not impacted by insufficient loop unwinding.
…onflict By default, bounded loop unwinding will yield an assumption to ensure that all counterexamples are genuine. Option --unwinding-assertions requests that an additional assertion be generated, which will furthermore ensure that successful verification does not constitute spurious proof. Option --partial-loops disables generating the unwinding assumption. Therefore, --unwinding-assertions and --partial-loops each control (not) generating one instruction, but there is no overlap in the instructions that they are (not) generating. It is, thus, safe to use these options together.
7cd36a7
to
836f04b
Compare
By default, bounded loop unwinding will yield an assumption to ensure
that all counterexamples are genuine.
Option --unwinding-assertions requests that an additional assertion be
generated, which will furthermore ensure that successful verification
does not constitute spurious proof.
Option --partial-loops disables generating the unwinding assumption.
Therefore, --unwinding-assertions and --partial-loops each control (not)
generating one instruction, but there is no overlap in the instructions
that they are (not) generating. It is, thus, safe to use these options
together.