5.3.
∗
Исчисление предусловий 131
Спецификация может быть выполнена до написания текста програм-
мы. Если мы перед тем как писать программу определяем, из каких
частей она должна состоять, то мы в состоянии сформулировать, что
эти части должны делать, следовательно, мы в состоянии определить
предусловие и постусловие для каждой из них.
Определение 5.14. (Верификация программы) Верифиация — до-
казательство корректности (частичной или полной) каждой тройки
{ϕ}Π {ψ}, построенной в ходе спецификации.
Итак, спецификация — условия, которым должна удовлетворять про-
грамма. Верификация — доказательство того, что она им действительно
удовлетворяет.
Обычно спецификация и верификация выполняются в виде коммен-
тариев к программе. Конечно, подробно записывать доказательство кор-
ректности обычно не требуется, достаточно написать только наиболее
сложные вещи: инварианты циклов, ограничители циклов и ограничи-
тели вызовов (для рекурсивных подпрограмм), а так же предусловия и
постусловия для подпрограмм.
5.3
∗
Исчисление предусловий
Легко понять, что для одной и той же программы можно составить много
корректных троек Хоара. Однако не все из них представляют практиче-
ский интерес. Например, если предусловие является тождественно лож-
ным, то такая тройка будет полностью корректной, однако это ничего
не говорит о корректности программы. Поэтому интерес представляют,
прежде всего, такие тройки, у которых предусловие описывает как мож-
но больше ситуаций, то есть является как можно более слабым.
Определение 5.15. (Слабейшее предусловие) Пусть Π — про-
грамма, ψ — условие. Условие ϕ называется слабейшим предусловием
для Π {ψ}, если тройка Хоара {ϕ}Π {ψ} частично корректна и для лю-
бого состояния σ, если Π (σ) определено и Π (σ) |= ψ, то σ |= ϕ.
Интуитивно, слабейшее предусловие — необходимое и достаточное усло-
вие для того, чтобы после выполнения программы выполнялось посту-
словие.