source: CIVL/examples/loop_invariants/verifyThisUB/relaxedPrefix/relaxedPrefix_loop-bad_weak2.cvl

main
Last change on this file was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5704 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 1.4 KB
RevLine 
[2fa0abd]1#pragma CIVL ACSL
2
3#define EXISTS(bv,rst,pred) (!(\forall int (bv); (rst) ==> !(pred)))
4
5$input int patLen, aLen;
6$assume(patLen > 0 && aLen > 0);
7$input int pat[patLen];
8$input int a[aLen];
9
10int main() {
11 int shift = 0;
12 int i;
13
14 if(patLen > aLen+1) return 0;
15
16 int isRePre = -1;
17
18 /*@ loop invariant (0 <= i && i <= patLen) && (-1 <= isRePre && isRePre <= 1);
19 @ loop invariant 0 <= shift && shift <= 1;
20 @ loop invariant i == aLen ==> isRePre != -1;
21 @ loop invariant (shift == 0) ==> (\forall int t; 0 <= t && t < i ==> a[t] == pat[t]);
22 @ loop invariant (shift == 1) ==> EXISTS(k, (0 <= k && k < i), (
23 @ (\forall int t; 0 <= t && t < k ==> a[t] == pat[t])));
24 @ loop invariant (shift == 1) ==> EXISTS(k, (0 <= k && k < i), (
25 @ (\forall int t; k < t && t < i ==> a[t-1] == pat[t])));
26 @ loop invariant (shift == 1) ==> EXISTS(k, (0 <= k && k < i), (
27 @ (a[k] != pat[k]))
28 @ );
29 @ loop assigns shift, isRePre, i;
30 @*/
31 for(i=0; i<patLen && isRePre == -1; i++) {
32 if(pat[i] != a[i-shift])
33 if(shift == 0)
34 shift = 1;
35 else
36 isRePre = 0;
37 if(isRePre == -1 && i == aLen - 1 && shift == 0)
38 isRePre = 1;
39 }
40 return isRePre == -1 ? 1 : isRePre;
41}
42
Note: See TracBrowser for help on using the repository browser.