Здравствуйте,при покупке печатной формы сертификата,будут ли выданы обе печатные сторны? |
Лекция 7: Формальные спецификации, доказательство и верификация программ
6.2.2. Доказательство конкретности с помощью утверждений
Рассмотрим формальное доказательство программы, заданной структурной логической схемой и совокупностью утверждений, задаваемых логическими операторами, комбинациями переменных (true/false), операциями (конъюнкция, дизъюнкция и др.) и кванторами всеобщности и существования (табл. 6.1).
Логические операции | ||
---|---|---|
Название | Примеры | Значение |
Конъюнкция | и | |
Дизъюнкция | или | |
Отрицание | не | |
Импликация | если то | |
Эквивалентность | равнозначно | |
Квантор всеобщности | для всех , условие истинно | |
Квантор существования | существует , для которого истина |
Цель алгоритма программы - построение для массива целых чисел длины эквивалентного массива той же длины , что и массив . Элементы в массиве должны располагаться в порядке возрастания их значений. Данный алгоритм реализуется сортировкой элементов исходного массива по их возрастанию. Доказательство правильности алгоритма сортировки элементов массива проводится с использованием ряда утверждений относительно элементов этого алгоритма, которые описываются пунктами П1- П6.
- Входное условие алгоритма задается в виде начального утверждения:
Выходное утверждение - это конъюнкция таких условий:
- ,
- ,
- ,
т.е.
Расположение элементов массива в порядке возрастания их величин в массиве осуществляется алгоритмом пузырьковой сортировки, суть которого заключается в предварительном копировании массив в массив , а затем проводится сортировка элементов согласно условия их возрастания. Алгоритм сортировки представлен на блоксхеме (рис. 6.2).
Операторы алгоритма размещены в прямоугольниках, условия выбора альтернативных путей - параллелограммами, точки с начальным и конечным условиями и состояниями алгоритма - кружками. В кружках также заданы: начальное состояние - , состояние после обмена местами двух соседних элементов в массиве - одна звездочка, состояние после обмена местами всех пар за один проход всего массива - две звездочки.
Кроме уже известных переменных , и , в алгоритме использованы еще две переменные: - целое и - булева переменная, значением которой являются логические константы и .
- Для доказательства того, что алгоритм действительно обеспечивает выполнение исходных условий, рассмотрим динамику их выполнения последовательно в определенных точках алгоритма.
Заметим, что точки делят алгоритм на соответствующие части, правильность любой из них обосновывается в отдельности.
Так, оператор присваивания означает, что для всех ( ) выполняется ( ). Результат выполнения алгоритма в точке с нулем может быть выражен утверждением
Доказательство очевидно, поскольку за семантикой оператора присваивания (поэлементная пересылка чисел из в ) сами элементы при этом не изменяются, к тому же в данной точке их порядокв и одинаковый. Итак, получили, что выполняется условие б) исходного утверждения.
Заметим, что первая строка доказанного утверждения совпадает с условием а) исходного утверждения и остается справедливой до конца работы алгоритма, поэтому в следующих утверждениях приводиться не будет.
В точке с одной звездочкой выполнен оператор который меняет местами элементы.
В результате работы оператора будет справедливым такое утверждение:
которое является частью условия в) утверждения (для одной конкретной пары смежных элементов массива ). Очевидно также, что семантика оператора обмена местами не нарушает условие б) выходного утверждения .
В точке с двумя звездочками выполнены все возможные обмены местами пар смежных элементов массива за один проход через , т.е. оператор обмена работал один или больше раз. Однако пузырьковая сортировка не дает гарантии, что достигнуто упорядочение за один проход по массиву , поскольку после очередного обмена индекс увеличивается на единицу независимо от того, как соотносится новый элемент с элементом .
В этой точке также справедливо утверждение
Часть алгоритма, обозначенная точкой с двумя звездочками, выполняется до тех пор, пока не будет упорядочен весь массив, т.е. не будет выполняться условие в) утверждения для всех элементов массива .
Итак, выполнение исходных условий обеспечено порядком и соответствующей cемантикой операторов преобразования массива.
Доказано, что выполнение алгоритма программы завершено успешно, что означает ее правильность.
- Этот алгоритм можно представить в виде серии теорем, которые доказываются.
Начиная с первого утверждения и переходя от одного преобразования к другому, определяется индуктивный путь вывода.
Если одно утверждение - истинно, то истинно и другое.
Иными словами, если дано первое утверждение и первая точка преобразования ,
то первая теорема -
Если - следующая точка преобразования, то второй теоремой будет .
Таким образом, формулируется общая теорема , где и - смежные точки преобразования. Эта теорема формулируетсятак, что если условие "истинное" в последней точке, то истинно и выходное утверждение .
Следовательно, можно возвратиться к точке преобразования и к предшествующей точке преобразования. Доказав, что верно, значит, верно и и так далее, пока не получим, что .
- Далее специфицируются утверждения типа - .
- Чтобы доказать, что программа корректная, необходимо последовательно расположить все утверждения, начиная с и заканчивая , этим подтверждает истинность входного и выходного условий.
- Доказательство алгоритма программы завершено.