#include "proof/search.h" #include "algos.h" /*@ requires valid: \valid_read(a + (0..n-1)); assigns \nothing; ensures result: 0 <= \result <= n; ensures result: \result == Find(a, n, v); */ size_type find3(const value_type* a, size_type n, value_type v) { /*@ loop invariant bound: 0 <= i <= n; loop invariant not_found: Find(a, i, v) == i; loop assigns i; loop variant n-i; */ for (size_type i = 0u; i < n; i++) { if (a[i] == v) { //@ assert found: Find(a, n, v) == i; return i; } } return n; }