2 (* FoVeOOS 2011 verification competition
3 http://foveoos2011.cost-ic0701.org/verification-competition
14 let max (a: array int) : int
15 requires { length a > 0 }
16 ensures { 0 <= result < length a }
17 ensures { forall i. 0 <= i < length a -> a[i] <= a[result] }
19 let ref y = (length a - 1) in
21 invariant { 0 <= x <= y < length a }
22 invariant { forall i. (0 <= i < x \/ y < i < length a) ->
23 (a[i] <= a[y] \/ a[i] <= a[x]) }
25 if a[x] <= a[y] then incr x else decr y