/*@ requires \valid_read(a + (0..n-1)); requires n > 0; ensures \forall integer k; 0 <= k < n ==> \result >= a[k]; ensures \exists integer k; 0 <= k < n && \result == a[k]; assigns \nothing; */ int arraymax(int* a, int n) { int i = 1; int max = a[0]; /*@ loop invariant \forall integer k; 0 <= k < i ==> max >= a[k]; loop invariant \exists integer k; 0 <= k < i && max == a[k]; loop invariant 0 <= i <= n; loop assigns i,max; */ while (i < n) { if (max < a[i]) max = a[i]; i = i + 1; } return max; }