76 Глава 3. Структурированные программы
для всех состояний σ.
Пусть дана исходная программа Π. Построим последовательность
программ (Π
i
)
i
: Π
0
∼ Π, Π
i+1
получается из Π
i
с помощью описанной вы-
ше процедуры, если w (Π
i
) > 0. Последовательность (w (Π
i
))
i
будет убы-
вающей цепью натуральных чисел, следовательно, она не может быть
бесконечной. С другой стороны, для последнего элемента Π
n
не может
быть w (Π
n
) > 0. Следовательно, w (Π
n
) = 0 и Π
n
— простая программа.
Так как
Π (σ) Var (Π) = Π
i
(σ) Var (Π)
для всех i, то
Π (σ) Var (Π) = Π
n
(σ) Var (Π) .
∗
Задача 3.34. Докажите все пропущенные места в доказательстве
теоремы.
Следствие 3.11. Каждый алгоритм эквивалентен некоторому алго-
ритму, тело которого является простой программой.
Задача 3.35. Докажите следствие.
Задача 3.36. Преобразуйте тело алгоритма Euclid (пример 3.15 на
стр. 53) в простую программу.
3.5
∗
Подстановка
Мы рассмотрели язык программирования с очень ограниченным набо-
ром конструкций. В реальных ЯП набор операций гораздо шире. В част-
ности, имеется полный набор математических функций. Основная задача
этого параграфа — доказать, что подобное обогащение ЯП не приводит
в увеличению его возможностей.
Теорема 3.3. (Теорема о подстановке) Пусть O — алгоритм на
языке программирования A, который вычисляет некоторую n-мест-
ную функцию o. Пусть язык программирования B получен из языка
программирования A добавлением новой операции o, означающей ту же
самую функцию. Тогда для каждого алгоритма на B существует эк-
вивалентный ему алгоритм на A.