Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Метод индуктивных утверждений



Определение 1. Пусть А – некоторое утверждение, описывающее предполагаемые свойства данных в программе. С – утверждение, описывающее то, что мы по предположению должны получить в результате процесса выполнения программы, т.е. утверждение о правильности. Будем говорить, что программа частично правильна по отношению к А и С, если при каждом выполнении этой программы с данными, удовлетворяющими А, будет справедливо С при условии, что программа закончит свою работу, т.е. если выполнять программу с данными, удовлетворяющими утверждению А, то либо она не заканчивается, либо заканчивается, и будет справедливо С.

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

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

1. утверждение А связывают с началом программы, а утверждение С – с конечной точкой программы;

2. выявляют некоторые закономерности, относящиеся к значениям переменных, и связывают соответствующие утверждения с другими точками программы;

3. для каждого пути, ведущего из точки i, связанной с утверждением Аi, в точку j, связанную с утверждением Аj, доказывают, что если попасть в точку i и при этом будет справедливо утверждение Аi, а затем пройти в точку j, то будет справедливо утверждение Аj. Для циклов точки i и j могут быть одной и той же точкой.

 

 Если справедливо А1, то при прохождении по пути 1→2 будет справедливо А2 и т.д.

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

Теорема. Если можно выполнить все действия, описанные в методе индуктивных утверждений для некоторых программ, то эта программа частично правильна относительно А и С.

Доказательство будем проводить с помощью индукции по n - числу точек программы, через которые мы уже прошли.

1. Предположим, что в процессе выполнения программы мы попали в первую из точек n=1. Нужно показать, что связанные с этой точкой утверждения справедливы. Но первая точка – это начальная точка программы, и с ней связано исходное допущение А о начальных данных. Это допущение предполагается справедливым, т.е. для n=1 утверждение справедливо.

2. Предположим, что мы прошли n точек и попали в некоторую точку in, с которой связано утверждение . Предположим, что утверждение  справедливо (гипотеза индукции). Нужно доказать, что если выполнение программы продолжается, и мы из точки in попали в точку in+1, то при ее достижении будет справедливо утверждение . Справедливость этого факта для каждого пути, связывающего точки in и in+1, мы доказали в методе индуктивных утверждений (пункт 2). Таким образом, если программа написана по правилам структурного программирования и является простой, то для каждой точки i будет справедливо утверждение Аi, так как существует путь через каждый узел от начала к концу программы. Тогда, если будет достигнута конечная точка программы, то будет справедливо и утверждение С.


Пример доказательства правильности программы методом индуктивных утверждений

Пусть имеется следующая программа поиска максимального значения среди элементов хi,j.


1-8 – это точки, в которых предположительно имеют место следующие утверждения:

· А1 : х – массив чисел, состоящий из m строк и n столбцов,

(исходная предпосылка);

 

· А2 : , кроме того

· А3: , , при этом .

 

· А8 : .

 

Доказательство.

1) Путь 1→2: , и т.к. из , то , т.е. утверждение А2 справедливо.

2) Путь 2→3: Дано утверждение А2. Требуется доказать А3. При первом вхождении в точку 3 ,следовательно, , т.к. . Из утверждения А2, т.к. i не менялось, имеем , но в силу ограничения цикла в точке 2 в точке 3 получаем . Если , то из утверждения А2 следует , иначе, когда , из утверждения А2 получаем, что . Более того, можно утверждать, что , т.к. . Таким образом, видно, что при переходе из точки 2 в точку 3 утверждение А3 оказывается справедливым.

3) Путь 3→4→5→3. Пусть справедливо утверждение А3. Покажем, что оно остается справедливым при переходе по данному пути. Пусть в точке 3 в какой-то момент времени , для которых выполняются неравенства: , . Тогда при переходе по пути 3→4→5→3 получаем , где . Так как мы двигались по указанному выше пути, то проверка  в цикле была истинной, следовательно, . Значение  не менялось, кроме того, мы приходим в точку 3 с условием , следовательно,  остается максимальным и для нового значения j, т.е. утверждение А3 остается справедливым.

4) Путь 3→4→6→3. Доказательство аналогично пункту 3 за исключением того, что здесь нашлось , и переменной  присвоено это значение. Таким образом, утверждение А3 остается также справедливым.

5) Путь 3→7→2. Пусть справедливо утверждение А3. Покажем, что при прохождении пути 3→7→2 будет справедливо утверждение А2. Из точки 3 в точку 2 мы попадаем, когда ложна проверка , но из А3 известно, что . Отсюда следует, что  или . Тогда утверждение A3 относительно  перепишется в виде . Но при прохождении пути 3→7→2 , поэтому , . Утверждение А2 справедливо.

6) Путь 2→8. Так как мы вышли из точки 2 в точку 8 проверка неравенства  оказалась ложной, следовательно,  и утверждение A2 , что , преобразуется в утверждение A8 о частичной правильности программы: .


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 239; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.013 с.)
Главная | Случайная страница | Обратная связь