W jaki sposób uzyskuje się niezmiennik pętli w tym algorytmie znajdowania pierwiastka kwadratowego?

Oryginalnie na math.SE, ale bez odpowiedzi. Rozważ następujący algorytm. 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 gdzie u, v i n są liczbami całkowitymi, a operacja dzielenia jest dzieleniem liczb...