Указан, да не совсем он. Автор определяет инвариант цикла как некоторое высказывание, верное на каждой итерации: a0**n = r * a**n
При использовании метода инварианта, инвариант — это любое математическое выражение, которое сохраняет свое значение на каждой итерации: r * a**n = const
На лекциях по Computer Science в 1999-м году в СГУ «логику Хоара» нам преподавали под названием «теория аксиоматической верификации программ». А на практике предупреждали, что это «университетское программирование, которое в жизни не встретить и не очень нужно» :)
А Вы используете его в какого рода проектах, и в каком объеме — в каких-то критических участках кода я полагаю?
Ждаль джва раза… Вообще, по-моему, очень понятно. Нужно просто уметь разворачивать рекурсию в цикл. Хотя должно быть наоборот ,) Не умеешь, прочитал и что-то понял.
Тройки Хоара