
Lektsia_1_2 (1).pptx
- Количество слайдов: 38
ВЕРИФИКАЦИЯ ПРОГРАММ ДВС Лектор - С. А. Ивановский
ВЕРИФИКАЦИЯ ПРОГРАММ Лекция 1. 2 • Метод индуктивных утверждений • Пример • ММИ 07. 02. 2018 Верификация программ 2
Метод индуктивных утверждений Пример. Целочисленное деление. Дано: int x, y; x 0; y>0; Найти: q и r такие, что x = q*y + r; q 0; 0 r
r = x; q = 0; while ( y r ) { r = r – y; q = q + 1; } 07. 02. 2018 Верификация программ 4
q = 0; r = x; r y r = r – y; q = q + 1; 07. 02. 2018 Верификация программ 5
Основные правила аналитической верификации программ 1) Утверждения P и Q Предусловие P S Постусловие Q 07. 02. 2018 Верификация программ 6
Основные правила аналитической верификации программ 2)Объединение путей: Qi P (для i=1. . n) S 1 S 2 Q 1 Sn Q 2 Qn P T 07. 02. 2018 Верификация программ 7
Основные правила аналитической верификации программ 3) Ветвление (выбор) P t B P & B 07. 02. 2018 Верификация программ f P & !B 8
Основные правила аналитической верификации программ 4) Присваивание u = v; Предусловие P (? ) u = v; Постусловие Q (? ) 07. 02. 2018 Верификация программ 9
Цикл Инициал. Разрез: Гипотеза H B t f H & B S 07. 02. 2018 Верификация программ 10
Разрез и склеивание цикла Pn H H & B S 1 Pn Sn S 2 Pn-1 07. 02. 2018 Верификация программ 11
q = 0; r = x; Разрез: Гипотеза H ? r y r = r – y; q = q + 1; 07. 02. 2018 Верификация программ 12
Гипотеза Постусловие цикла: x = q*y + r; q 0; 0 r
q = 0; r = x; q = 0, r =x x = q*y + r, q 0 r y x = q*y + r, q 0, r y, r = r – y; q = q + 1; ? 07. 02. 2018 Верификация программ 14
Гипотеза x = q*y + r, q 0, & r y (условие продолжения цикла), x = (q+1)*y + r - y, r-y 0, r+=r-y, r+ 0 x = q*y + r, q 0, r y, r = r – y x = (q+1)*y + r, q 0, r 0, q = q + 1 x = q*y + r, q>0, r 0, 07. 02. 2018 Верификация программ 15
q = 0; r = x; q = 0, r =x x = q*y + r, q 0 r y x = q*y + r, q 0, r y, r = r – y; q = q + 1; x = q*y + r, q>0, r 0, x = q*y + r, q>0, 0 r
Обоснование метода индуктивных утверждений См. метод математической индукции по шагам вычислительного процесса 07. 02. 2018 Верификация программ 17
Доказательство завершения цикла • r 0 • На каждом шаге (при r y) r убывает (!) Не существует бесконечной убывающей последовательности натуральных чисел. 07. 02. 2018 Верификация программ 18
Метод математической индукции Пусть сформулировано утверждение P(n) для всех натуральных n или для части натуральных чисел (например, для подмножества (n 0) ={x | x n 0}, где n 0 ). Для того чтобы доказать справедливость P(n) для всех n или n (n 0), применяют следующий способ, называемый принципом или методом математической индукции (ММИ). Способ доказательства: (а) Доказать, что P(n 0) справедливо. (б) Доказать, что из справедливости утверждений P(n 0), P(n 0 + 1), …, P(n) следует справедливость утверждения P(n + 1). Это доказательство должно годиться для любого n n 0. 24. 09. 2009 Схема итерации 19
Другая форма записи (б) Доказать, что из справедливости утверждений P(n 0), P(n 0 + 1), …, P(n) следует справедливость утверждения P(n + 1). (б) Доказать, что из справедливости утверждений P(k) при всех k, таких, что n 0 k n, следует справедливость утверждения P(n + 1). 24. 09. 2009 Схема итерации 20
Метод математической индукции Доказательство (а) называют базой или основанием, а доказательство (б) – индукцией или индуктивным переходом. Упрощённый вариант метода математической индукции - шаг (б) в следующем виде: (б) Доказать, что из справедливости утверждения P(n) следует справедливость утверждения P(n + 1) для любого n n 0. Шень А. Математическая индукция. ( 3 -е изд. , дополн. ) М. : МЦНМО, 2007. 24. 09. 2009 Схема итерации 21
Пример 1. Докажем, что S (n) = 1 + 2 + 3 + … + (n – 1) + n Доказательство: (а) (база индукции) S (1) = 1(1+1)/2 = 1, (б) (индуктивный переход) S (n + 1) = S (n) + (n + 1) = 24. 09. 2009 Схема итерации 22
Пример 2. Утверждение: в полном графе из n вершин имеется ровно рёбер. n = 1 n = 2 n = 3 n = 4 n = 5 Полные графы при n = 1, 2, 3, 4, 5 24. 09. 2009 Схема итерации 23
Индуктивный переход: n + 1 n 24. 09. 2009 Схема итерации 24
Пример 3. Числами Фибоначчи называются элементы числовой последовательности, определяемые рекуррентным (возвратным) уравнением Fn + 2 = Fn + 1 + Fn при n = 0, 1, 2, … и начальными элементами F 0 = 0 и F 1 = 1. Вот несколько первых чисел Фибоначчи: F 0 F 1 F 2 F 3 F 4 F 5 F 6 F 7 F 8 F 9 F 10 F 11 F 12 F 13 F 14 F 15 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 Фибоначчи – Леонардо Пизанский (Leonardo Pisano) или Леонардо Фибоначчи (Filius Bonaccii – сын Боначчо), 1202 г. 24. 09. 2009 Схема итерации 25
Утверждение: где и есть корни квадратного уравнения и Число 1. 61803… называют «золотым сечением» 24. 09. 2009 Схема итерации 26
Действительно, (а) при n = 0 имеем при n = 1 Индукция (б) Ч. т. д. 24. 09. 2009 Схема итерации 27
Пример 4. Утверждение. Каждое n можно представить в виде произведения одного и более простых сомножителей. Предположим, что утверждение справедливо для чисел 1, 2, 3, …, n. Покажем, что число n + 1 также можно представить в виде произведения одного и более простых сомножителей. 24. 09. 2009 Схема итерации 28
Действительно, если n + 1 простое число, то n + 1 = (n + 1) 1. Если n + 1 не простое, то существует некоторое положительное число a, такое, что 1 < a < (n + 1) и оно делит n + 1 без остатка. Это означает, что n + 1 = q a, где q частное от деления и 1 < q < (n + 1). Поскольку каждое из чисел a и q меньше n + 1, то по предположению их можно представить в виде произведения одного и более простых сомножителей, а следовательно, это верно и для n + 1 = q a. 24. 09. 2009 Схема итерации 29
Пример некорректного использования ММИ. Утверждение 1. В любой куче камешков все камешки одного цвета. n n + 1 24. 09. 2009 Ошибку в представленном доказательстве легко обнаружить, если попытаться выполнить алгоритм ММИ Схема итерации 30
Пример некорректного использования ММИ. Утверждение 2. an-1 = 1 для всех n N. Доказательство: • a 1 -1 = a 0 = 1 • Пусть ak-1 = 1 для всех k =1, …, n. Рассмотрим a(n + 1) -1 : a(n + 1) -1 = an-1 a 1= 1 1 = 1 Ошибку в представленном доказательстве легко обнаружить, если попытаться выполнить алгоритм ММИ 24. 09. 2009 Схема итерации 31
Алгоритм ММИ (выдает для заданных n 0 и n (n 0) доказательство того, что P(n 0), P(n 0 + 1), …, P(n) верны) начало Заданы n 0 и n n 0 Док. P(n 0) Согласно (а) доказать P(n 0) k = n 0 k< n Да Нет С огласно (б) доказать P(k+1) Доказаны P(n 0), P(n 0 + 1), …, P(k) k = k + 1 k: =k+1 Доказано P( n) Доказано P(n) конец 24. 09. 2009 Схема итерации 32
Структурная индукция Пример. Структурная индукция для доказательства свойств рекурсивных функций Функция Concat, соединяющая два списка в один. Например, Concat (y, z) = (a b c d) для y = (a b) и z = (c d). 07. 02. 2018 Верификация программ 33
Функция Concat Анализ случаев: Случай 1: y = Nil Concat (y, z) = z Случай 2: z = Nil Concat (y, z) = y Случай 3: y Nil и z Nil пусть Concat (Tail (y), z) = u, тогда Concat (y, z) = Cons (Head (y), u) Рекурсивная функция Concat (y, z) = if Null (y) then z else Cons (Head (y), Concat (Tail (y), z)). В форме сопоставления с образцом: o Concat (Nil, z) z; o Concat ( x: : y, z) x: : Concat(y, z); Обозначение x: : y Cons(x, y) 07. 02. 2018 Верификация программ 34
Функция Concat Пусть требуется доказать свойство ассоциативности операции Concat: Concat(p, Concat(q, r)) = Concat(p, q), r). Действительно, индукцией по структуре p получим • p = Nil Concat(Nil, Concat(q, r)) = Concat(q, r) и Concat(Nil, q), r) = Concat(q, r). • p Nil p Cons(hp, tp) Cons(Head (p), Tail (p)) (!) по определению при p Nil Concat(Cons(a, b), c)) = Cons(a, Concat(b, c)) (!) 07. 02. 2018 Верификация программ 35
Функция Concat(Cons(hp, tp), Concat(q, r)) = {def Concat} = = Cons(hp, Concat(tp, Concat(q, r))) = = {по индуктивному предположению} = = Cons(hp, Concat(tp, q), r))) = = { Cons(a, Concat(b, c)) = Concat(Cons(a, b), c)) по определению } = = Concat(Cons(hp, Concat(tp, q)), r) = {аналогично} = Concat(Cons(hp, tp), q)), r) = = Concat(p, q), r) //QED ЧТД 07. 02. 2018 Верификация программ 36
Функция Concat О пользе обозначений a : : (b c) = (a : : b) c или (a : : b) c = a : : (b c) 07. 02. 2018 Верификация программ 37
КОНЕЦ 07. 02. 2018 Верификация программ 38