-
Notifications
You must be signed in to change notification settings - Fork 273
warning: ignoring forall #203
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
Comments
General observations:
The quantifier is alive and well in the goto-program.
But has been converted by the time we've got to a decision procedure:
Note that simplify() does not handle quantifiers, so it isn't there. It's almost certainly somewhere in symex. Update : it's goto_symext::rewrite_quantifiers; am stupid for not realising this earlier. Youcheng, while we were chatting earlier you said you were interested in trying to fix this. I think the plan would be:
The fiddly bit is how to recognise if it is a guarded quantifier as it will have been simplified()
Good luck! |
On Tue, 23 Aug 2016 11:37:46 -0700 Martin [email protected] wrote
Let us still consider the example C program, by replacing
|
On Thu, 2016-08-25 at 04:01 -0700, Youcheng Sun wrote:
Yes; really we need a unification algorithm to do this here but for now
Look at post_process_quantifiers, lines 78--99. In psuedo-code: for ( inst = the instantiations 0 ... 10 ) { and instantiations together HTH Cheers,
|
Fixing Python scripts of security analyser & adding Python pretty printer of "dstring" for QtCreator
SEC-62 : Introducing CMAKE build system for security-analyser and removal of Makefile system.
Could anyone give me an update on this? I am managing to create verification cases where the quantifiers are ignored and the verification spuriously passes, but I'm not sure if that is down to the way I'm building my exprt's, or something related to this issue. |
As far as I know, little has changed. Michael wrote 38fd81a at the start of the year which should tidy things a bit but the architecture remains the same. The native CPROVER back-end can only solve existential problems. Have you tried with any of the SMT back-ends? Are you are still getting the For me this is a kind of |
Just wanted to ping here and revive this issue. In our on-going work on function and loop contracts, we find the need to be able to |
With the SMT backend, so far I haven't encountered any unsoundness related to this, but there is an issue with counterexample extraction: #5970. For the SAT backend, may I suggest rejecting the program (i.e. throw an error) instead of just showing a warning (which can be easily overlooked) and unsound verification results? |
I would support throwing an error but late in the process (i.e. in |
When
__CPROVER_assume
and__CPROVER_forall
are used together, it may simply not work. Let us consider the following program, namelymain.c
.If we try to apply
cbmc
on it:cbmc main.c
, we will getand the assertion _fails_.
On the other hand, if we we replace
assert(x[0]>0)
with the trivial assertionassert(1)
, then, together with the VERIFICATION SUCCESSFUL, there will be _no warning_.The text was updated successfully, but these errors were encountered: