Скачать презентацию ВЕРИФИКАЦИЯ ПРОГРАММ ДВС Лектор — С А Ивановский Скачать презентацию ВЕРИФИКАЦИЯ ПРОГРАММ ДВС Лектор — С А Ивановский

Lektsia_1_2 (1).pptx

  • Количество слайдов: 38

ВЕРИФИКАЦИЯ ПРОГРАММ ДВС Лектор - С. А. Ивановский ВЕРИФИКАЦИЯ ПРОГРАММ ДВС Лектор - С. А. Ивановский

ВЕРИФИКАЦИЯ ПРОГРАММ Лекция 1. 2 • Метод индуктивных утверждений • Пример • ММИ 07. ВЕРИФИКАЦИЯ ПРОГРАММ Лекция 1. 2 • Метод индуктивных утверждений • Пример • ММИ 07. 02. 2018 Верификация программ 2

Метод индуктивных утверждений Пример. Целочисленное деление. Дано: int x, y; x 0; y>0; Найти: Метод индуктивных утверждений Пример. Целочисленное деление. Дано: 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 = 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 = 0; r = x; r y r = r – y; q = q + 1; 07. 02. 2018 Верификация программ 5

Основные правила аналитической верификации программ 1) Утверждения P и Q Предусловие P S Постусловие Основные правила аналитической верификации программ 1) Утверждения P и Q Предусловие P S Постусловие Q 07. 02. 2018 Верификация программ 6

Основные правила аналитической верификации программ 2)Объединение путей: Qi P (для i=1. . n) S Основные правила аналитической верификации программ 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 Основные правила аналитической верификации программ 3) Ветвление (выбор) P t B P & B 07. 02. 2018 Верификация программ f P & !B 8

Основные правила аналитической верификации программ 4) Присваивание u = v; Предусловие P (? ) Основные правила аналитической верификации программ 4) Присваивание u = v; Предусловие P (? ) u = v; Постусловие Q (? ) 07. 02. 2018 Верификация программ 9

Цикл Инициал. Разрез: Гипотеза H B t f H & B S 07. 02. Цикл Инициал. Разрез: Гипотеза H B t f H & B S 07. 02. 2018 Верификация программ 10

Разрез и склеивание цикла Pn H H & B S 1 Pn Sn S Разрез и склеивание цикла Pn H H & B S 1 Pn Sn S 2 Pn-1 07. 02. 2018 Верификация программ 11

q = 0; r = x; Разрез: Гипотеза H ? r y r = 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<y; Тело цикла: Гипотеза Постусловие цикла: x = q*y + r; q 0; 0 r

q = 0; r = x; q = 0, r =x x = q*y 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*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 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. Обоснование метода индуктивных утверждений См. метод математической индукции по шагам вычислительного процесса 07. 02. 2018 Верификация программ 17

Доказательство завершения цикла • r 0 • На каждом шаге (при r y) r Доказательство завершения цикла • r 0 • На каждом шаге (при r y) r убывает (!) Не существует бесконечной убывающей последовательности натуральных чисел. 07. 02. 2018 Верификация программ 18

Метод математической индукции Пусть сформулировано утверждение P(n) для всех натуральных n или для части Метод математической индукции Пусть сформулировано утверждение 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 + Другая форма записи (б) Доказать, что из справедливости утверждений 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 + … Пример 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 = Пример 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 Индуктивный переход: n + 1 n 24. 09. 2009 Схема итерации 24

Пример 3. Числами Фибоначчи называются элементы числовой последовательности, определяемые рекуррентным (возвратным) уравнением Fn + Пример 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… называют «золотым сечением» Утверждение: где и есть корни квадратного уравнения и Число 1. 61803… называют «золотым сечением» 24. 09. 2009 Схема итерации 26

Действительно, (а) при n = 0 имеем при n = 1 Индукция (б) Ч. Действительно, (а) при n = 0 имеем при n = 1 Индукция (б) Ч. т. д. 24. 09. 2009 Схема итерации 27

Пример 4. Утверждение. Каждое n можно представить в виде произведения одного и более простых Пример 4. Утверждение. Каждое n можно представить в виде произведения одного и более простых сомножителей. Предположим, что утверждение справедливо для чисел 1, 2, 3, …, n. Покажем, что число n + 1 также можно представить в виде произведения одного и более простых сомножителей. 24. 09. 2009 Схема итерации 28

Действительно, если n + 1 простое число, то n + 1 = (n + Действительно, если 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. В любой куче камешков все камешки одного цвета. Пример некорректного использования ММИ. Утверждение 1. В любой куче камешков все камешки одного цвета. n n + 1 24. 09. 2009 Ошибку в представленном доказательстве легко обнаружить, если попытаться выполнить алгоритм ММИ Схема итерации 30

Пример некорректного использования ММИ. Утверждение 2. an-1 = 1 для всех n N. Доказательство: Пример некорректного использования ММИ. Утверждение 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) доказательство того, что Алгоритм ММИ (выдает для заданных 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, соединяющая два списка в один. Например, 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 Функция 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, Функция 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))) Функция 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 : : Функция Concat О пользе обозначений a : : (b c) = (a : : b) c или (a : : b) c = a : : (b c) 07. 02. 2018 Верификация программ 37

КОНЕЦ 07. 02. 2018 Верификация программ 38 КОНЕЦ 07. 02. 2018 Верификация программ 38