conditional input annotations result in why3 type errors
ID0002394: This issue was created automatically from Mantis Issue 2394. Further discussion may take place here.
Id | Project | Category | View | Due Date | Updated |
---|---|---|---|---|---|
ID0002394 | Frama-C | Plug-in > wp | public | 2018-08-23 | 2020-02-17 |
Reporter | timourf | Assigned To | correnson | Resolution | fixed |
Priority | normal | Severity | major | Reproducibility | always |
Platform | x86_64 | OS | GNU/Linux | OS Version | Debian 9 |
Product Version | Frama-C 17-Chlorine | Target Version | - | Fixed in Version | Frama-C 20-Calcium |
Description :
I am trying to put conditions on my function specification that specify return values conditioned on special input values. A minimal example is as follows:
/*@ requires 0 <= t <= 1; @ ensures t == 1.f ==> \result == b; @ assigns \nothing */ float interpolate(float a, float b, float t) { ... }
Why3 (stderr) reports:
File "/tmp/wp0a3ed9.dir/typed/interpolate_Why3_ide.why", line 20, characters 11-26: This term has type real -> real, but is expected to have type real
The "problem line" is "ensures t == 1.f ==> \result == b;"
This seems to be a problem between wp and why3. The error persists with every external prover I use with why3. The list of provers I've tried is [Z3,CVC3,CVC4,Alt-Ergo,Gappa], and the only exception is why3:coq (see issue 0002389).
Additional Information :
why3 0.88.3 frama-c chlorine 20180502
Steps To Reproduce :
see attached file "buggy.c" run:
frama-c -wp -wp-prover "why3:XXX" buggy.c where XXX is any prover installed with why3