Московский государственный индустриальный университет
Опубликован: 27.09.2006 | Доступ: свободный | Студентов: 3332 / 380 | Оценка: 4.17 / 3.79 | Длительность: 24:17:00
Специальности: Программист
Лекция 6:

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

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

Вычисление слабейшего предусловия

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

Задача 6.9. Вычислите и упростите wp("i=i+2; j=j-2;", i+j=0).

Решение. Для вычисления воспользуемся определениями слабейшего предусловия для последовательного выполнения операторов и оператора присваивания. Так как в данном случае все выражения заведомо являются определенными, то истинный предикат domain(e) будет опущен изначально.

wp("i=i+2; j=j-2;", i+j=0) = wp("i=i+2;", wp("j=j-2;",
i+j=0)) =
wp("i=i+2;", i+j-2=0) = (i+2+j-2=0) = (i=-j).

Задача 6.10. Вычислите и упростите wp("x=(x+y)*(x-y);", x+y^2 \ne 0).

Решение. wp("x=(x+y)*(x-y);", x+y^2 \ne 0) = ( x^2 -y^2 + y^2 \ne 0 ) =
(x^2 \ne 0) = (x\ne0).

Задача 6.11. Вычислите и упростите wp("x=a/b;", x^2 \geqslant 0).

Решение. В данном случае ответ T является ошибочным, так как wp("x=a/b;", x^2 \geqslant 0) = (domain(a/b) \lands {(a/b)}^2
\geqslant 0) = (b\ne 0).

Задача 6.12. Вычислите и упростите wp("i=1; s=b[0];",
1 \leqslant i < n \ \land \ s = b[0]+\ldots+b[i-1] ).

Решение.

wp("i=1; s=b[0];", 1 \leqslant i < n \ \land \ s =
b[0]+\ldots+b[i-1] ) =\\
wp("i=1;", wp("s=b[0];", 1 \leqslant i < n \ \land \ s =
b[0]+\ldots+b[i-1])) =
wp("i=1;", 1 \leqslant i < n \ \land \ b[0] = 
b[0]+\ldots+b[i-1]) = \\
( 1 \leqslant 1 < n \land (b[0] =
b[0])) = (1<n \land (b[0] = b[0])) = (n>1).

Задача 6.13. Вычислите и упростите wp("if(true);", R) для произвольного предиката R.

Решение.

wp(\Cmd{if(true);}, R) = wp(\Cmd{if(true); else ;}, R) =
\\
((T \Rightarrow wp(\Cmd{;}, R)) \land (F \Rightarrow wp(\Cmd{;}, R))) =
((F \lor R) \land (T \lor R)) = (R \land T) = R

Рассмотрим в заключение задачу на решение уравнения, связанного со слабейшим предусловием.

Задача 6.14. Найдите такое значение выражения x, включающее другие переменные, для которого спецификация \{Q\} \; S \; \{R\} становится тавтологией: \{T\} \; "a=a+1; b=x;" \; \{b=a+1\}.

Решение. Вспомним, что имеет место эквивалентность \{Q\}\; S\; \{R\} = (Q \Rightarrow  wp(S,R)). Таким образом, нам необходимо подобрать такое x, для которого (T \Rightarrow wp("a=a+1; b=x;", b=a+1)) = T. Вычислим сначала слабейшее предусловие, входящее в этот предикат:

wp(\Cmd{a=a+1; b=x;},b=a+1) = wp(\Cmd{a=a+1;}, wp(\Cmd{b=x;}, b=a+1)) = 
\\
wp(\Cmd{a=a+1;}, x=a+1) = (x = a+2).

Легко убедиться, однако, что мы получили неверный результат! И все дело в том, что переменная x зависит от a. Проведем вычисления повторно, заменив x на x(a): wp("a=a+1; b=x(a);",
b=a+1) = 
wp("a=a+1;", wp("b=x(a);", b=a+1)) = wp("a=a+1;", x(a)=a+1) =
(x(a+1) = a+2).

Вернемся к исходной задаче. Нам нужно выяснить, при каких значениях x выражение (T \Rightarrow (x(a+1) = a+2)) = T окажется тавтологией. Упростим данное выражение:

((T \Rightarrow (x(a+1)= a+2)) = T) = (T \Rightarrow
(x(a+1) = a+2)) = 
\\
(F \lor (x(a+1) = a+2)) = (x(a+1)=a+2)

Теперь ответ очевиден: x(a)=a+1 или просто x=a+1.

Задачи для самостоятельного решения

Задача 6.15. Запишите предикат, утверждающий, что самое большее одно из следующих утверждений истинно: a<b, b<c.

Задача 6.16. Запишите предикат, утверждающий, что следующие утверждения не являются истинными одновременно: a<b, b<c и x=y.

Задача 6.17. Запишите предикат, утверждающий следующее: когда x<y, y<z означает, что v=w, но если x\geqslant y, то y<z не может выполняться; однако если v=w, то x<y.

Задача 6.18. Запишите предикат, утверждающий, что для массива b[0..n-1] длины n>0 все нули массива находятся в вырезке b[j..k].

Задача 6.19. Запишите предикат, утверждающий, что для массива b[0..n-1] длины n>0 некоторые нули массива находятся в вырезке b[j..k].

Задача 6.20. Запишите предикат, утверждающий, что для массива b[0..n-1] длины n>0 справедливо высказывание: неверно, что все нули массива находятся в вырезке b[j..k].

Задача 6.21. Запишите предикат, утверждающий, что для массива b[0..n-1] длины n>0 справедливо высказывание: неверно, что не все нули массива находятся в вырезке b[j..k].

Задача 6.22. Запишите предикат, который утверждает, что функция f\colon \{1, 2, 3, 4, 5\}
\rightarrow \{1, 2, 3, 4, 5\} является инъективной и отрицание этого факта. Упростите получившиеся предикаты, если это возможно.

Задача 6.23. Запишите предикат, который утверждает, что функция f\colon \{1, 2, 3, 4, 5\}
\rightarrow \{1, 2, 3, 4, 5\} является биективной и отрицание этого факта. Упростите получившиеся предикаты, если это возможно.

Задача 6.24. Запишите предикат, который утверждает, что функция f\colon \{1, 2, 3, 4, 5\}
\rightarrow \{1, 2, 3, 4, 5\} все существует единственный элемент x \in \{1, 2, 3, 4, 5\}, который функция f уменьшает, и отрицание этого факта. Не используйте при этом квантора \exists!.

Задача 6.25. Основываясь на определении 6.4 и спецификации программы 6.1, докажите истинность эквивалентности \{Q\}\; S\; \{R\} = (Q \Rightarrow  wp(S,R)).

Задача 6.26. Основываясь на определении 6.4, докажите закон монотонности (Q \Rightarrow R) \Rightarrow (wp(S,Q) \Rightarrow wp(S,R)).

Задача 6.27. Основываясь на определении 6.4, докажите закон дистрибутивности дизъюнкции wp(S,Q) \lor wp(S,R) = wp(S, Q \lor R) .

Задача 6.28. Вычислите и упростите wp("i=i+1; j=j-1;", i\cdot j=0).

Задача 6.29. Вычислите и упростите wp("x=x+y;", x < 2y).

Задача 6.30. Вычислите и упростите wp("i=i+1; j=j+1;", i=j).

Задача 6.31. Вычислите и упростите wp("a=0; n=1;", a^2 < n \ \land \ (a + 1)^2 \geqslant n).

Задача 6.32. Вычислите и упростите wp("s=s+b[i]; i=i+1;", 0<i<n\ \land\ s=b[0]+\ldots+b[i-1]).

Задача 6.33. Вычислите и упростите следующее слабейшее предусловие wp("if (a > b) a=a-b; else b=b-a;",a>0 \ \land \ b > 0).

Задача 6.34. Найдите такое значение выражения x, включающее другие переменные, для которого спецификация \{Q\} \; S \; \{R\} становится тавтологией: \{T\} \; "b=x; a=a+1;" \; \{b=a+1\}.

Задача 6.35. Найдите такое значение выражения x, включающее другие переменные, для которого спецификация \{Q\} \; S \; \{R\} становится тавтологией: \{i=j\} \; "i=i+1; j=x;" \; \{i=j\}.

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева