Если S — программа, корректность которой установливается, то нотация
(7.1) — это то, что требуется доказать, причем P — соотношение, которому
должны удовлетворять начальные значения переменных, а Q — соотношение,
которому должны удовлетворять конечные значения переменных. Например,
если S — алгоритм, изображенный на рис. 7.1, то соотношение, которое надо
доказать, таково: {(x ≥ 0) ∧ (y > 0)}S{ (x = q ∗ у + r) ∧ (0 ≤ r < у)}, где знак
∧ используется в качестве формальной нотации для «и».
Как уже отмечалось, соотношение {P }S{Q} означает, что если P истин-
но перед выполнением S, то Q должно быть истинно при завершении S. Это
означает, что {P }S{Q} тождественно истинно, если S не завершается, т. е.
если на рис. 7.2 точка выхода никогда не достигается. Другими словами,
(7.1) определяет только частичную корректность S. Частично корректной
является такая программа, в которой гарантируется получение требуемого
результата при условии ее завершения. Но действительно ли завершается
программа для некоторых исходных значений — другой вопрос. Если допол-
нительно можно показать, что программа завершается для всех исходных
значений, удовлетворяющих соотношению P , то говорят, что программа пол-
ностью корректна. Чтобы доказать завершение программы, получаемой при-
менением правил композиции, введенных ранее, необходим анализ циклов,
т.е. операторов итерации.
Можно подвести итог рассматриваемому подходу к проектированию про-
грамм.
1. Проектирование должно начинаться со спецификации {P }S{Q}, которой
должна удовлетворять проектируемая программа, т.е. с ясного и недву-
смысленного определения того, когда программа должна использоваться
(предусловие P ), и результата ее использования при этом (постусловие Q).
2. Процесс проектирования сверху вниз определяет спецификации
{P
i
}S
i
{Q
i
} для компонентов S
i
, из которых строится программа.
3. Проектирование программы осуществляется одновременно с доказатель-
ством корректности указанных спецификаций.
7.2. Правила вывода для простых операторов
Правила вывода — схемы рассуждений, позволяющие доказывать свойства
программ. Правила вывода имеют вид
H
1
, . . . , H
n
H
. (7.2)
Если H
1
, . . . , H
n
— истинные утверждения, то H — также истинное утвер-
ждение. Рассмотрим два простейших правила вывода. Первое утверждает,
73