Теория и практика защиты программ

Предусловия и постусловия в доказательствах правильности


Условие — это алгебраическое выражение, значение которого либо «ложно», либо «истинно». Обычно в выражениях присутствуют имена переменных программы; каждому имени соответствует значение соответствующей переменной. Условия также называют логическими выражениями, булевыми выражениями или суждениями.

Если из истинности условия V непосредственно перед выполнением оператора S следует истинность условия Р после выполнения этого оператора, то говорят, что V

есть предусловие для постусловия Р по отношению к оператору S. Подобная взаимозависимость V, Р и S обычно записывается как {V} S {Р}. Оператор S может быть простым или составным, содержащим любое число отдельных операторов, то есть может быть сегментом программы или же целой программой.

Результат выполнения оператора, сегмента программы или программы будет корректным, если он удовлетворяется заданному постусловию. Оператор программы (либо сегмент программы, либо программа) завершается, если его выполнение доходит до конца за конечное время и при этом отсутствуют ошибки фазы выполнения (и ошибки фазы компиляции)  - то есть его выполнение приводит к получению вполне определенного результата.

Если выполнение оператора, сегмента программы или программы приводит к получению корректного результата, когда бы он ни завершился, то говорят, что оператор (сегмент программы или программа) частично корректный. Если, кроме того, доказано, что его выполнение действительно заканчивается, то говорят, что оператор (сегмент программы или программа) полностью корректный. За счет выделения таких двух аспектов в корректности упрощаются доказательства.

Предусловия и постусловия представляют ключевые моменты в доказательствах корректности. Они выражают понятие «корректности» конкретной программы или сегмента программы. При записи различным образом, предусловие и постусловие вместе образуют общую спецификацию рассматриваемой программы. Основные части стандартного доказательства правильности предусловия и постусловия и, в час­тности, их взаимозависимости. Иногда можно алгебраическим путем вывести предусловие для заданного постусловия и заданного оператора (простого или составного). Такой подход особенно плодотворен в случае операторов присваивания. Часто задача сводится к проверке (доказательству) утверждения о корректности предусловий и постусловий сегмента программы. В таком случае доказываемое утверждение о корректности разбивается на утверждения о корректности частей рассматриваемого сегмента программы, и они доказываются раздельно. Ряд полезных правил, которые будут введены в последующих подразделах, окажут помощь при выполнении таких шагов.



Содержание раздела