90 Глава 4. Программы с метками
затрудняет понимание того, как работает программа и доказательство ее
правильности. Именно то обстоятельство, что программы с метками не
имеют четко выраженных логических блоков, и привело к тому, что они
были вытеснены в значительной мере структурированными ЯП.
Задача 4.5. Напишите алгоритм, которыйя подсчитывает сумму
цифр заданного числа, и докажите его правильность. Используйте опе-
рации «+», «−», «×», «/» — целочисленное деление.
4.3 Построение программ с метками
Мы рассмотрели два ЯП — структурированный и с метками. Мы дока-
жем, что оба этих языка эквивалентны, то есть функции, которые можно
вычислить с помощью стру ктурированных программ, можно вычислить
и с помощью программ с метками, и наоборот.
Мы ранее доказывали леммы о замене переменных, которые утвер-
ждали, что если одни переменные заменить другими, то получится экви-
валентная программа. Докажем аналогичное утверждение и для меток.
Замена в программе Π метки α на β определяется точно так же как
замена одной переменной на другую. Результат такой замены обознача-
ется аналогично:
(Π)
α
β
То есть (Π)
α
β
получается из Π заменой всюду метки α на метку β.
Замечание 4.1. Результат замены (Π)
α
β
может не быть программой
с метками так как в результате замены в программе могут оказать-
ся две одинаковых метки оператора. Однако, если метка β не является
меткой оператора программы Π, то (Π)
α
β
— программа с метками.
Лемма 4.1. (О замене метки) Пусть метка β не встречается в
программе Π. Тогда для любого состояния σ и для любой метки α име-
ет место Π (σ) = (Π)
α
β
(σ).
Доказательство. Докажем следующее утверждение: если (Π)
α
β
(σ)
определено, то Π (σ) определено и (Π)
α
β
(σ) = Π (σ).
Рассмотрим последовательность расширенных состояний
σ
j
, λ
j
j
для
(Π)
α
β
(σ). Так как (Π)
α
β
(σ) определено, то последовательность расширен-
ных состояний
σ
j
, λ
j
j
является конечной. Пусть (σ
m
, λ
m
) — ее послед-
ний элемент. Это означает, что λ
m
— заключительная метка программы