Как получить инвариант цикла в этом алгоритме поиска границ?

Первоначально по математике. Но там без ответа. Рассмотрим следующий алгоритм. u := 0 v := n+1; while ( (u + 1) is not equal to v) do x := (u + v) / 2; if ( x * x <= n) u := x; else v := x; end_if end_while где u, v и n - целые числа, а операция деления - целочисленное деление. Объясните, что...