Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



Рассмотрим формальное доказательство программы, заданной структурной логической схемой и совокупностью утверждений, задаваемых логическими операторами, комбинациями переменных (true/false), операциями (конъюнкция, дизъюнкция и др.) и кванторами всеобщности и существования (табл. 6.1).

Таблица 6.1. Список логических операций
Логические операции
Название Примеры Значение
Конъюнкция и
Дизъюнкция или
Отрицание не
Импликация если то
Эквивалентность равнозначно
Квантор всеобщности для всех , условие истинно
Квантор существования существует , для которого истина

Цель алгоритма программы - построение для массива целых чисел длины эквивалентного массива той же длины , что и массив . Элементы в массиве должны располагаться в порядке возрастания их значений. Данный алгоритм реализуется сортировкой элементов исходного массива по их возрастанию. Доказательство правильности алгоритма сортировки элементов массива проводится с использованием ряда утверждений относительно элементов этого алгоритма, которые описываются пунктами П1- П6.

1. Входное условие алгоритма задается в виде начального утверждения:

Выходное утверждение - это конъюнкция таких условий:

o ,

o ,

o ,

т.е.

Расположение элементов массива в порядке возрастания их величин в массиве осуществляется алгоритмом пузырьковой сортировки, суть которого заключается в предварительном копировании массив в массив , а затем проводится сортировка элементов согласно условия их возрастания. Алгоритм сортировки представлен на блоксхеме (рис. 6.2).

Операторы алгоритма размещены в прямоугольниках, условия выбора альтернативных путей - параллелограммами, точки с начальным и конечным условиями и состояниями алгоритма - кружками. В кружках также заданы: начальное состояние - , состояние после обмена местами двух соседних элементов в массиве - одна звездочка, состояние после обмена местами всех пар за один проход всего массива - две звездочки.

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

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

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

Так, оператор присваивания означает, что для всех () выполняется (). Результат выполнения алгоритма в точке с нулем может быть выражен утверждением

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


увеличить изображение
Рис. 6.2. Схема сортировки элементов массива Т

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

В точке с одной звездочкой выполнен оператор который меняет местами элементы.

В результате работы оператора будет справедливым такое утверждение:

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

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

В этой точке также справедливо утверждение

Часть алгоритма, обозначенная точкой с двумя звездочками, выполняется до тех пор, пока не будет упорядочен весь массив, т.е. не будет выполняться условие в) утверждения для всех элементов массива .

Итак, выполнение исходных условий обеспечено порядком и соответствующей cемантикой операторов преобразования массива.

Доказано, что выполнение алгоритма программы завершено успешно, что означает ее правильность.

3. Этот алгоритм можно представить в виде серии теорем, которые доказываются. Начиная с первого утверждения и переходя от одного преобразования к другому, определяется индуктивный путь вывода. Если одно утверждение - истинно, то истинно и другое. Иными словами, если дано первое утверждение и первая точка преобразования , то первая теорема -

Если - следующая точка преобразования, то второй теоремой будет .

Таким образом, формулируется общая теорема , где и - смежные точки преобразования. Эта теорема формулируетсятак, что если условие "истинное" в последней точке, то истинно и выходное утверждение .

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

4. Далее специфицируются утверждения типа - .

5. Чтобы доказать, что программа корректная, необходимо последовательно расположить все утверждения, начиная с и заканчивая , этим подтверждает истинность входного и выходного условий.

6. Доказательство алгоритма программы завершено.





Дата публикования: 2014-11-03; Прочитано: 510 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...