(* Binary search A classical example. Searches a sorted array for a given value v. Consult . *) module BinarySearch use int.Int use int.ComputerDivision use ref.Ref use array.Array let binary_search (a : array int) (v : int) : int requires { forall i1 i2 : int. 0 <= i1 < i2 < length a -> a[i1] <= a[i2] } ensures { 0 <= result <= length a } ensures { forall i: int. 0 <= i < result -> a[i] < v } ensures { forall i: int. result <= i < length a -> v <= a[i] } = (* IMPORTANT: DON'T MODIFY THE ABOVE LINES *) 0 (* TODO *) end