Скачать презентацию Аналитическая верификация программ Предусловие и постусловие 1 доказательство Скачать презентацию Аналитическая верификация программ Предусловие и постусловие 1 доказательство

02.Аналитическая верификация.ppt

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

Аналитическая верификация программ Предусловие и постусловие 1) доказательство завершимости; 2) доказательство истинности постусловия после Аналитическая верификация программ Предусловие и постусловие 1) доказательство завершимости; 2) доказательство истинности постусловия после завершения программы. Присваивание. Если имеется некоторое условие P(x), в запись которого входит переменная x, то {P(w)} x: =w {P(x)} Последовательность операторов. Если S 1 и S 2 – операторы, для которых выполняются условия {P} S 1 {Q} и {Q} S 2 {R}, то {P} S 1; S 2 {R}.

Ветвление. Если S 1 и S 2 – операторы, для которых выполняются условия {P, Ветвление. Если S 1 и S 2 – операторы, для которых выполняются условия {P, B} S 1 {Q} и {P, not B} S 2 {Q}, то {P} if B then S 1 else S 2 {Q}. Цикл. Если S – оператор, для которого выполняется условие {P, B} S { P }, то {P} while B do S { P, not B }. Условие P здесь не изменяется в процессе выполнения цикла, оно называется инвариантом цикла.

Методы доказательства 1) последовательное перечисление выполняемых действий; 2) перечисление вариантов, применяется для ветвлений; 3) Методы доказательства 1) последовательное перечисление выполняемых действий; 2) перечисление вариантов, применяется для ветвлений; 3) метод математической индукции, применяется для циклов; 4) инвариант, также применяется для циклов; 5) метод эквивалентов; 6) абстракция,

Примеры 1. Предусловие: x=a, y=b z: =y; y: =x; x: =z Постусловие: x=b, y=a Примеры 1. Предусловие: x=a, y=b z: =y; y: =x; x: =z Постусловие: x=b, y=a __________________ 2. Предусловие x=a, y=b if x

Метод математической индукции 1) базис, 2) предположение, 3) индуктивный вывод. На этапе базиса проверяют, Метод математической индукции 1) базис, 2) предположение, 3) индуктивный вывод. На этапе базиса проверяют, что доказываемое утверждение P(n) относительно параметра индукции n справедливо при n = n 0. На втором этапе делается предположение, что утверждение P(n) справедливо для всех значений n, не бóльших, чем некоторое k, k ≥ n 0. На этапе индуктивного вывода доказывается, что P(n) будет справедливо при n = k + 1 > n 0. Из этого следует, что утверждение P(n) справедливо для любого n ≥ n 0.

Пример математической индукции Sn = 12 + 22 + … + n 2 , Пример математической индукции Sn = 12 + 22 + … + n 2 , ≈ n 3 / 3 Базис. При n = 0 сумма Sn = 0, с другой стороны, при n = 0 формула верна. Предположение. Пусть при n ≥ 0 формула верна. Индуктивный вывод. При n + 1:

предусловие: n=M, M≥ 1. f: =1; i: =2; while i<=n do begin f: =f*i; предусловие: n=M, M≥ 1. f: =1; i: =2; while i<=n do begin f: =f*i; i: =i+1 end постусловие: f=1*2*. . . *M, i=n+1. Базис. Если M=1, то f=1, i=2. Предположение: при M=k, k≥ 1 постусловие f=1*2*. . . *k, i=k+1. Индуктивный вывод: дополнительный шаг цикла при i=k+1 : f=1*2*. . . *k*(k+1), i=k+2. Т. е. постусловие справедливо при n=M+1.

Пример 1. Инвариант предусловие: n=M, M≥ 1. f: =1; i: =2; while i<=n do Пример 1. Инвариант предусловие: n=M, M≥ 1. f: =1; i: =2; while i<=n do begin f: =f*i; i: =i+1 end постусловие: f=1*2*. . . *M, i=n+1. Полное предусловие: n=M, M≥ 1, i=2, f=1*. . . *(i-1) Полное постусловие: n=M, M≥ 1, i=n+1, f=1*. . . *(i-1). Инвариант: f=1*. . . *(i-1).

Пример 2. Инвариант предусловие: i=2, min=A[1]. min: =A[1]; for i: =2 to n do Пример 2. Инвариант предусловие: i=2, min=A[1]. min: =A[1]; for i: =2 to n do if min>A[i] then min: =A[i]; постусловие: i=n+1, min = min{A[1], . . . , A[n]}. Инвариант: min = min{A[1], . . . , A[i-1]}.

Пример 3. Инвариант предусловие: i=2, k=1. k: =1; for i: =2 to n do Пример 3. Инвариант предусловие: i=2, k=1. k: =1; for i: =2 to n do if A[k]>A[i] then k: =i; постусловие: i=n+1, k = argmin{A[1], . . . , A[n]}. Инвариант: k = argmin{A[1], . . . , A[i-1]}.

Пример 4. Вложенные циклы: абстракция {предусловие: j=1} for j: =1 to n-1 do begin Пример 4. Вложенные циклы: абстракция {предусловие: j=1} for j: =1 to n-1 do begin k: =j; {предусловие: i=j+1, k=j} for i: =j+1 to n do if A[k]>A[i] then k: =i; {постусловие: i=n+1} {инвариант: k = argmin{A[j], . . . , A[i-1]}} z: =A[j]; A[j]: =A[k]; A[k]: =z end; {постусловие: j=n} {инвариант: A[1] ≤ A[2] ≤, . . . ≤ A[j-1]}, A[j-1] ≤ min{A[j], . . . , A[n]}} Следствие: A[1] ≤ A[2] ≤, . . . ≤ A[n]

Анализ трудоемкости Трудоемкость: функция зависимости количества элементарных действий в программе от входного параметра n, Анализ трудоемкости Трудоемкость: функция зависимости количества элементарных действий в программе от входного параметра n, при n →∞. Пример 3: k: =1; for i: =2 to n do if A[k]>A[i] then k: =i; Здесь T(n) = A·n + B. При n →∞ величиной B можно пренебречь. Коэффициент A зависит от компьютера, от качества транслятора, поэтому пишут: T(n) = O(n). Здесь порядок трудоемкости – линейный. При сравнении двух алгоритмов (решающих одну и ту же задачу): тот алгоритм лучше (имеет меньшую трудоемкость), у которого порядок трудоемкости меньше. Например, O(n) лучше, чем O(n 2). Если же у них порядок одинаков, то лучше тот алгоритм, у которого множитель перед функцией меньше.

Пример 4: for j: =1 to n-1 do begin k: =j; for i: =j+1 Пример 4: for j: =1 to n-1 do begin k: =j; for i: =j+1 to n do if A[k]>A[i] then k: =i; z: =A[j]; A[j]: =A[k]; A[k]: =z end; Количество повторений внутреннего цикла: при j=1 равно n – 1, при j=2 равно n – 2, . . . , при j=n-1 равно 1. Всего: (n – 1)+(n – 2)+. . . + 1 = n·(n – 1)/2 ≈ n 2/2. Трудоемкость: T(n) = A·n 2+ B·n + С = O(n 2). Здесь порядок трудоемкости – квадратичный. В примерах 3 и 4 вычислена трудоемкость в наихудшем случае, т. е. гарантированная трудоемкость Иногда полезно также вычислять трудоемкость в наилучшем.