source: CIVL/examples/loop_invariants/Jans_example/fixed_block/invariant_1st_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>0);
10//$assume(ni<10);
11$assume(nj>0);
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 /*@ loop invariant 0 <= i && i <= ni;
22 @ loop invariant \forall int t; 0 <= t && t < i ==>
23 @ (\forall int k; 0 <= k && k < nj ==>
24 @ u1[t][k] == 0 && u2[t][k] == 0);
25 @ loop assigns u1[0 .. ni-1][0 .. nj-1], u2[0 .. ni-1][0 .. nj-1], i, j;
26 @*/
27 for(i=0;i<ni;i++) {
28 /*@ loop invariant 0 <= i && i < ni;
29 @ loop invariant 0 <= j && j <= nj;
30 @ loop invariant \forall int k; 0 <= k && k < j ==>
31 @ u1[i][k] == 0 && u2[i][k] == 0;
32 @ loop assigns u1[i][0 .. nj-1], u2[i][0 .. nj-1], j;
33 @*/
34 for(j=0;j<nj;j++) {
35 u1[i][j] = 0;
36 u2[i][j] = 0;
37 }
38 }
39 $assert($forall (int i : 0 .. ni-1)
40 ($forall (int j : 0 .. nj-1) u1[i][j] == 0 && u2[i][j] == 0)
41 );
42}
Note: See TracBrowser for help on using the repository browser.