Опубликован: 27.09.2006 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный индустриальный университет
Лекция 6:

Спецификация программ и преобразователь предикатов

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >

Спецификация программы и преобразователь предикатов wp

Для того чтобы доказывать правильность программ необходимо прежде всего дать строгое определение понятию правильная программа. Ясно, что оно зависит не только от результата, который должен быть получен в процессе выполнения программы, но и от того, в каких условиях начинается ее выполнение.

Определение 6.1. Спецификацией \{Q\} \; S \; \{R\} программы S, где Q и R — предикаты, называется предикат, означающий, что если выполнение S началось в состоянии, удовлетворяющем Q , то имеется гарантия, что оно завершится через конечное время в состоянии, удовлетворяющем R.

Под программой S в данном определении может пониматься один или несколько отдельных операторов или же действительно целая большая программа.

Определение 6.2. Предикат Q называется предусловием или входным утверждением S ; Rпостусловием или выходным утверждением программы S.

Так как спецификация программы является предикатом, то она может быть истинной, а может быть и ложной. Возможна и такая ситуация, когда в некоторых состояниях она истинна, а в других — ложна. Вот соответствующие примеры.

Спецификация \{i=0\} \; "i++;" \; \{i=1\} является тавтологией, спецификация \{i=0\} \; "i++;" \; \{i=0\} ложна во всех состояниях, а спецификация \{i=0\} \; "i++;" \; \{i=j\} истинна при j=1 и ложна в остальных состояниях.

Спецификация программы является единственным корректным способом постановки задачи. Только четко сформулировав пред- и постусловия, можно обсуждать затем правильность программы.

Определение 6.3. Программа S является правильной при заданных Q и R, если спецификация \{Q\} \; S \; \{R\} является тавтологией.

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

Слабейшее предусловиепредикат, описывающий максимально широкое множество в пространстве состояний переменных программы S, на котором гарантируется получение постусловия R. Сильнейшее постусловиепредикат, описывающий максимально сильные ограничения на состояние переменных программы S, которые могут быть получены при данном предусловии Q.

Для целей доказательства правильности программ особенно важен следующий предикат.

Определение 6.4. Слабейшее предусловие wp(S,R)предикат, представляющий множество всех состояний переменных программы S, для которых выполнение команды S, начавшееся в таком состоянии, обязательно закончится через конечное время в состоянии, удовлетворяющем R.

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

wp(\Cmd{i = i + 1;}, i\leqslant 1) = (i\leqslant 0), так как если переменная i удовлетворяла условию i\leqslant 0, то после выполнения программы \Cmd{i = i + 1;} она действительно будет удовлетворять неравенству i\leqslant 1.

wp(\Cmd{if (x >= y) z=x; else z=y;}, z = max(x, y)) = T, ибо выполнение программы \Cmd{if (x >= y) z=x; else z=y;} при любых начальных условиях приведет к тому, что переменная z станет равной максимальному значению из величин x и y.

wp(\Cmd{if (x >= y) z=x; else z=y;}, z = y) = (y \geqslant x), потому что y будет равно максимуму из чисел x и y (а именно таково будет z после выполнения программы \Cmd{if (x >= y) z=x; else z=y;} ) тогда и только тогда, если именно переменная y имеет большее значение.

wp(\Cmd{if (x >= y) z=x; else z=y;}, z = y-1) = F. Это (пустое множество состояний) означает, что ни при каких начальных условиях программа \Cmd{if (x >= y) z=x; else z=y;} не сможет сделать величину z меньше, чем y.

wp(\Cmd{if (x >= y) z=x; else z=y;}, z = y+1) = (x=y+1), ибо только при таком начальном условии после выполнения приведенной программы переменная z станет равной y+1.

Заметим, что из определений спецификации программы и ее слабейшего предусловия вытекает следующее утверждение.

Предложение 6.1. \{Q\}\; S\; \{R\} = (Q \Rightarrow  wp(S,R)).

Определение 6.5. Преобразователем предикатов (обозначаемый через wp_S(R) ) называют wp(S,R) когда фиксируют программу S и рассматривают wp(S,R) как функцию одной переменной R.

Предложение 6.2. Преобразователь предикатов wp(S,R) обладает следующими свойствами:

1) wp(S,F) = F (закон исключенного чуда);

2) wp(S,Q)\land wp(S,R) = wp(S, Q \land R) (дистрибутивность конъюнкции);

3) (Q \Rightarrow R) \Rightarrow (wp(S,Q) \Rightarrow wp(S,R)) (закон монотонности);

4) wp(S,Q) \lor wp(S,R) = wp(S, Q \lor R) (дистрибутивность дизъюнкции).

Величина wp(S,F) описывает такое множество начальных условий, при которых выполнение программы S завершится через конечное время в состояний, удовлетворяющем F, то есть ни в каком состоянии. Этого, конечно, быть не может, что и поясняет название свойства — закон исключенного чуда.

Докажем аккуратно дистрибутивность конъюнкции. Для доказательства эквивалентности достаточно показать, что из условия wp(S,Q)\land
wp(S,R), стоящего в левой части, вытекает условие wp(S, Q \land R), размещенное в правой, и наоборот. Для доказательства импликации wp(S,Q)\land wp(S,R) \Rightarrow wp(S, Q \land R) рассмотрим произвольное состояние s, удовлетворяющее условию wp(S,Q)\land
wp(S,R). Так как выполнение программы S, начавшееся в s, завершится при истинных Q и R, то истинным будет и предикат Q \land R.

Для доказательства обратной импликации wp(S, Q \land R) \Rightarrow wp(S,Q)\land wp(S,R) рассмотрим состояние s, удовлетворяющее условию wp(S, Q
\land R). Тогда выполнение S, начавшееся в s, обязательно завершится в некотором состоянии s', удовлетворяющем Q \land R. Но любое такое s' обязательно удовлетворяет и Q и R, так что s удовлетворяет и wp(S,Q) и wp(S,R), что и завершает доказательство.

Закон монотонности докажите самостоятельно, а вот по поводу последнего свойства преобразователя предикатов — дистрибутивности дизъюнкции — надо сделать некоторые замечания. Дело в том, что если в качестве S рассмотреть операцию бросания монеты, которая может завершиться либо выпадением герба ( G ), либо решки ( R ), то wp(S,G) =
wp(S,R) = F, ибо нельзя гарантированно предсказать результат бросания ни при каких начальных условиях. С другой стороны, wp(S,G \lor R) = T, так как всегда выпадет либо герб, либо решка.

Если S является недетерминированной, то эквивалентность в законе дистрибутивности дизъюнкции превращается в импликацию. Однако для программ S, реализованных с помощью большинства языков программирования, подобная ситуация невозможна.

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева
Ирина Тютрина
Ирина Тютрина
Россия, Усолье-Сибирское
Глеб Бочкарёв
Глеб Бочкарёв
Россия