КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Пример доказательства свойства программы
Завершимость выполнения программы. Одно из свойств программы, которое нас может интересовать, чтобы избежать возможных ошибок в ПС, является ее завершимость, т.е. отсутствие в ней зацикливания при тех или иных исходных данных. В рассмотренных нами структурированных программах источником зацикливания может быть только конструкция повторения. Поэтому для доказательства завершимости программы достаточно уметь доказывать завершимость оператора цикла. Для этого полезна следующая теорема. Теорема 9.7. Пусть F - целочисленная функция, зависящая от состояния информационной среды и удовлетворяющая следующим условиям: если для данного состояния информационной среды истинен предикат Q, то ее значение положительно; она убывает при изменении состояния информационной среды в результате выполнения оператора S. Тогда выполнение оператора цикла ПОКА Q ДЕЛАТЬ S ВСЕ ПОКА завершается. Доказательство. Пусть IS - состояние информационной среды перед выполнением оператора цикла и пусть F(IS)= k. Если предикат Q(IS) ложен, то выполнение оператора цикла завершается. Если же предикат Q(IS) истинен, то по условию теоремы k>0. В этом случае будет выполняться оператор S один или более раз. После каждого выполнения оператора S по условию теоремы значение функции F уменьшается, а так как перед выполнением оператора S предикат Q должен быть истинен (по семантике оператора цикла), то значение функции F в этот момент должно быть положительно (по условию теоремы). Поэтому в силу целочисленности функции F оператор S в этом цикле не может выполняться более k раз. Теорема доказана. Например, для рассмотренного выше примера оператора цикла условиям теоремы 9.7 удовлетворяет функция f(n, m)= n-m. Так как перед выполнением оператора цикла m=1, то тело этого цикла будет выполняться (n-1) раз, т.е. этот оператор цикла завершается. На основании доказанных правил верификации программ можно доказывать свойства программ, состоящих из операторов присваивания и пустых операторов и использующих три основные композиции структурного программирования. Для этого, анализируя структуру программы и используя заданные ее пред- и постусловия, необходимо на каждом шаге анализа применять подходящее правило верификации. В случае применения композиции повторения потребуется подобрать подходящий инвариант цикла. В качестве примера докажем свойство (9.4). Это доказательство будет состоять из следующих шагов. (Шаг 1). n>0 Þ (n>0, p - любое, m - любое). (Шаг 2). Имеет место {n>0, p - любое, m - любое} p:=1 {n>0, p=1, m - любое}. -- По теореме 9.2. (Шаг 3). Имеет место {n>0, p=1, m - любое} m:=1 {n>0, p=1, m=1}. -- По теореме 9.2. (Шаг 4). Имеет место {n>0, p - любое, m - любое} p:=1; m:=1 {n>0, p=1, m=1}. -- По теореме 9.3 в силу результатов шагов 2 и 3. Докажем, что предикат p= m! является инвариантом цикла, т.е. {p=m!} m:=m+1; p:=p*m {p=m!}. (Шаг 5). Имеет место {p= m!} m:= m+1 {p= (m-1)!}. -- По теореме 9.2, если представить предусловие в виде {p= ((m+1)-1)!}. (Шаг 6). Имеет место {p= (m-1)!} p:= p*m {p= m!}. -- По теореме 9.2, если представить предусловие в виде {p*m= m!}. (Шаг 7). Имеет место инвариант цикл {p= m!} m:= m+1; p:= p*m {p= m!}. -- По теореме 9.3 в силу результатов шагов 5 и 6. (Шаг 8). Имеет место {n>0, p=1, m=1} ПОКА m <> n ДЕЛАТЬ m:= m+1; p:= p*m ВСЕ ПОКА {p= n!}. -- По теореме 9.6 в силу результата шага 7 и имея в виду, что (n>0, p=1, m= 1) Þ p= m!; (p= m!, m= n) Þ p= n!. (Шаг 9). Имеет место {n>0, p - любое, m - любое} p:=1; m:=1; ПОКА m <> n ДЕЛАТЬ m:= m+1; p:= p*m ВСЕ ПОКА {p= n!}. -- По теореме 9.3 в силу результатов шагов 3 и 8. (Шаг 10). Имеет место свойство (9.4) по теореме 9.5 в силу результатов шагов 1 и 9. Лишь та - ошибка, что не исправляется. Конфуций
Дата добавления: 2014-01-11; Просмотров: 502; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |