Спецификация программ и преобразователь предикатов
Вычисление слабейшего предусловия
Покажем на ряде примеров, как решаются задачи на вычисление слабейшего предусловия.
Задача 6.9. Вычислите и упростите .
Решение. Для вычисления воспользуемся определениями слабейшего предусловия для последовательного выполнения операторов и оператора присваивания. Так как в данном случае все выражения заведомо являются определенными, то истинный предикат будет опущен изначально.
.
Задача 6.10. Вычислите и упростите .
Решение. .
Задача 6.11. Вычислите и упростите .
Решение. В данном случае ответ является ошибочным, так как .
Задача 6.12. Вычислите и упростите .
Решение.
Задача 6.13. Вычислите и упростите для произвольного предиката .
Решение.
Рассмотрим в заключение задачу на решение уравнения, связанного со слабейшим предусловием.
Задача 6.14. Найдите такое значение выражения , включающее другие переменные, для которого спецификация становится тавтологией: .
Решение. Вспомним, что имеет место эквивалентность . Таким образом, нам необходимо подобрать такое , для которого . Вычислим сначала слабейшее предусловие, входящее в этот предикат:
Легко убедиться, однако, что мы получили неверный результат! И все дело в том, что переменная зависит от . Проведем вычисления повторно, заменив на : .
Вернемся к исходной задаче. Нам нужно выяснить, при каких значениях выражение окажется тавтологией. Упростим данное выражение:
Теперь ответ очевиден: или просто .
Задачи для самостоятельного решения
Задача 6.15. Запишите предикат, утверждающий, что самое большее одно из следующих утверждений истинно: , .
Задача 6.16. Запишите предикат, утверждающий, что следующие утверждения не являются истинными одновременно: , и .
Задача 6.17. Запишите предикат, утверждающий следующее: когда , означает, что , но если , то не может выполняться; однако если , то .
Задача 6.18. Запишите предикат, утверждающий, что для массива длины все нули массива находятся в вырезке .
Задача 6.19. Запишите предикат, утверждающий, что для массива длины некоторые нули массива находятся в вырезке .
Задача 6.20. Запишите предикат, утверждающий, что для массива длины справедливо высказывание: неверно, что все нули массива находятся в вырезке .
Задача 6.21. Запишите предикат, утверждающий, что для массива длины справедливо высказывание: неверно, что не все нули массива находятся в вырезке .
Задача 6.22. Запишите предикат, который утверждает, что функция является инъективной и отрицание этого факта. Упростите получившиеся предикаты, если это возможно.
Задача 6.23. Запишите предикат, который утверждает, что функция является биективной и отрицание этого факта. Упростите получившиеся предикаты, если это возможно.
Задача 6.24. Запишите предикат, который утверждает, что функция все существует единственный элемент , который функция уменьшает, и отрицание этого факта. Не используйте при этом квантора !.
Задача 6.25. Основываясь на определении 6.4 и спецификации программы 6.1, докажите истинность эквивалентности .
Задача 6.26. Основываясь на определении 6.4, докажите закон монотонности .
Задача 6.27. Основываясь на определении 6.4, докажите закон дистрибутивности дизъюнкции .
Задача 6.28. Вычислите и упростите .
Задача 6.29. Вычислите и упростите .
Задача 6.30. Вычислите и упростите .
Задача 6.31. Вычислите и упростите .
Задача 6.32. Вычислите и упростите .
Задача 6.33. Вычислите и упростите следующее слабейшее предусловие .
Задача 6.34. Найдите такое значение выражения , включающее другие переменные, для которого спецификация становится тавтологией: .
Задача 6.35. Найдите такое значение выражения , включающее другие переменные, для которого спецификация становится тавтологией: .