Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

AlgStr / Библиотека / ЛЕКЦИИ / POSIBNIK / Верификация

.DOC
Скачиваний:
39
Добавлен:
23.03.2015
Размер:
19.97 Кб
Скачать

Логические спецификации или введение в верификацию программы

Верификация программ осуществляется на основе анализа ее текста. Проводится на основе формул полной коректности. Формула коректности включает в себя предикаты P и Q, а между ними находится сегмент верификационной программы P{S1, ... ,Sn}Q.

P - называется предусловием;

Q - называется постусловием.

Если перед выполнением последовательных операций предикат P выполняется, то гарантируется и выполнение предиката Q, т.е. (FALSE =>P) = TRUE

Пример:

TRUE

{x := 0; y := 1}

y > x

1 > 0 - TRUE

Аксиома для оператора присваивания

Пусть Р есть любой предикат, а е - это выражение свободное от побочных эффектов, тогда если Р истинно после присваивания x := e, то Р с е подставленным во все свободные выражения х перед этими присваиваниями, должен быть истинен.

P[e -> x] {x := e}P

Пример:

x > n {x := x + 1} x > n + 1

x > n => x + 1 > n + 1

x > n => x > n

TRUE

Способы доказательства. Методы прохода вперед и назад.

Метод рохода назад приводит к получению предусловия, т.е. выполнения его достаточно для получения результата и его включает в себя любое достаточное предусловие.

Метод прохода вперед сводится к тому, что двигаясь от предусловия мы доказываем самое сильное постусловие, т.е. оно включает и требуемое нами постусловие.

P{ S }Q

Аксиома последовательного выполнения.

Если P{ А }Q и Q{ B }R, то выполняется P{ A;B }R

Пример:

(0 < x < 1) {x := 1/x + y; x := x + 1} (x > y + 2)

(0 < x < 1) {x := 1/x + y} (x + 1 > y + 2)

(0 < x < 1) {x := 1/x + y} (x > y + 1)

Обозначим n = y + 1.

(0 < x < 1) {x := 1/x + y} (x > n)

( x > n) {x := x + 1} (x > n + 1) => TRUE

Аксиома ветвления.

Если некоторое условие В не имеет побочных эффектов, то доказательства

P{ if B then S1 else S2}Q

эквивалентно доказательству пары

P&B{ S1 }Q и P&ØB{ S2 }Q

Пример:

(x > 0)&(y = 0)

{while Ø(y = x) do y := y + 1}

(y = x)

Соседние файлы в папке POSIBNIK