source: CIVL/examples/loop_invariants/Jans_example/fixed_block/invariant_2nd_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.1 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 // straightforward loop nest
26 /*@ loop invariant 1 <= i && i < ni;
27 @ loop invariant \forall int t, k; 1 <= t && t < i && 1 <= k && k < nj-1
28 @ ==> u1[t][k] == uin[t][k] * uin[t][k];
29 @ loop assigns u1[1 .. ni-2][1 .. nj-2], i, j;
30 @*/
31 for(i=1;i<ni-1;i++) {
32 /*@ loop invariant 1 <= i && i < ni;
33 @ loop invariant 1 <= j && j < nj;
34 @ loop invariant \forall int k; 1 <= k && k < j
35 @ ==> u1[i][k] == uin[i][k] * uin[i][k];
36 @ loop assigns u1[i][1 .. nj-2], j;
37 @*/
38 for(j=1;j<nj-1;j++) {
39 u1[i][j] = uin[i][j]*uin[i][j];
40 }
41 }
42 $assert($forall (int i : 1 .. ni-2)
43 ($forall (int j : 1 .. nj-2) u1[i][j] == uin[i][j] * uin[i][j])
44 );
45}
46
Note: See TracBrowser for help on using the repository browser.