Assignment 5 Done

This commit is contained in:
static
2024-10-11 02:01:25 +00:00
parent dd37d10595
commit cb2fed1e48
3 changed files with 17 additions and 3 deletions

View File

@@ -18,6 +18,20 @@ module BinarySearch
ensures { forall i: int. result <= i < length a -> v <= a[i] }
=
(* IMPORTANT: DON'T MODIFY THE ABOVE LINES *)
0 (* TODO *)
let ref l = 0 in
let ref r = length a in
while l < r do
invariant { 0 <= l <= length a /\ 0 <= r <= length a }
invariant { forall i: int. 0 <= i < l -> a[i] < v }
invariant { forall i: int. r <= i < length a -> a[i] >= v }
variant { r - l }
let m = l + div (r - l) 2 in
assert { l <= m < r };
if a[m] < v then
l := m + 1
else
r := m
done;
l
end