#include "find2_axioms.h" #include "algos.h" /*@ requires valid: \valid_read(a + (0..n-1)); assigns \nothing; ensures result: 0 <= \result <= n; behavior some: assumes SomeEqual(a, n, v); assigns \nothing; ensures bound: 0 <= \result < n; ensures result: a[\result] == v; ensures first: NoneEqual(a, \result, v); behavior none: assumes NoneEqual(a, n, v); assigns \nothing; ensures result: \result == n; complete behaviors; disjoint behaviors; */ size_type find2(const value_type* a, size_type n, value_type v) { /*@ loop invariant bound: 0 <= i <= n; loop invariant not_found: NoneEqual(a, i, v); loop assigns i; loop variant n-i; */ for (size_type i = 0u; i < n; i++) { if (a[i] == v) { return i; } } return n; }