source: CIVL/examples/loop_invariants/Jans_example/fixed_block/invariant_3rd_loop.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.7 KB
Line 
1#include <stdio.h>
2#ifdef _CIVL
3#include <civlc.cvh>
4#pragma CIVL ACSL
5#endif
6
7#ifdef _CIVL
8$input int ni,nj;
9$assume(ni>1);
10//$assume(ni<10);
11$assume(nj>1);
12//$assume(nj<10);
13$input double uin[ni][nj];
14#endif
15
16int main(int argc, char** argv) {
17 int i,j,ir,jr;
18 double u1[ni][nj];
19 double u2[ni][nj];
20
21 $assume($forall (int i : 0 .. ni-1)
22 ($forall (int j : 0 .. nj-1) u1[i][j] == 0 && u2[i][j] == 0)
23 );
24
25 $assume($forall (int i : 1 .. ni-2)
26 ($forall (int j : 1 .. nj-2) u1[i][j] == uin[i][j] * uin[i][j])
27 );
28
29
30 /*@ loop invariant 1 <= i && i <= ni-1;
31 @ loop invariant \forall int t, k; 1 <= t && t < i && 1 <= k && k < nj - 2 && k % 2 != 0
32 @ ==> u2[t][k] == uin[t][k]*uin[t][k] && u2[t][k+1] == uin[t][k+1]*uin[t][k+1];
33 @ loop invariant i % 2 != 0;
34 @ loop assigns u2[1 .. ni-2][1 .. nj-2], i, j;
35 @*/
36 for(i=1;i<ni-2;i=i+2) {
37 /*@ loop invariant 1 <= i && i < ni-2;
38 @ loop invariant 1 <= j && j <= nj-1;
39 @ loop invariant \forall int k; 1 <= k && k < j
40 @ ==> u2[i][k] == uin[i][k]*uin[i][k] && u2[i+1][k] == uin[i+1][k]*uin[i+1][k] ;
41 @ loop invariant i % 2 != 0 && j % 2 != 0;
42 @ loop assigns u2[i][1 .. nj-2], u2[i+1][1 .. nj-2], j;
43 @*/
44 for(j=1;j<nj-2;j=j+2) {
45 u2[i][j] = uin[i][j]*uin[i][j];
46 u2[i+1][j] = uin[i+1][j]*uin[i+1][j];
47 u2[i][j+1] = uin[i][j+1]*uin[i][j+1];
48 u2[i+1][j+1] = uin[i+1][j+1]*uin[i+1][j+1];
49 }
50 }
51 $assert($forall (int i | 1 <= i && i < ni - 2 && i % 2 != 0)
52 ($forall (int j | 1 <= j && j < nj - 2 && j % 2 != 0)
53 u2[i][j] == uin[i][j]*uin[i][j] &&
54 u2[i+1][j] == uin[i+1][j]*uin[i+1][j] &&
55 u2[i][j+1] == uin[i][j+1]*uin[i][j+1] &&
56 u2[i+1][j+1] == uin[i+1][j+1]*uin[i+1][j+1])
57 );
58}
59
60
Note: See TracBrowser for help on using the repository browser.