/*@ 
requires n > 0;

requires \valid_read(a + (0..n-1));

requires \forall integer k;  0 <= k < n ==> a[k] == k;

ensures  \forall integer k;  0 <= k < n ==> a[k] == 2*k;
*/

void arraydouble(int* a, int n) {

  /*@ 
     loop invariant 0 <= p <= n;
     loop invariant \forall integer k;  0 <= k < p ==> a[k] == 2*k;
     loop invariant \forall integer k;  p <= k < n ==> a[k] == k;
     loop assigns p, a[0..n-1];
 */

  for (int p = 0; p < n; p++) {
	  a[p] = a[p] * 2; 
  }
}  

