¿Cómo se obtiene el bucle invariante en este algoritmo de búsqueda de límite de raíz cuadrada?

Originalmente en matemáticas . SE pero sin respuesta allí. Considere el siguiente algoritmo. 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 donde u, v y n son números enteros y la operación de división...