Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lectures / lecture5.ppt
Скачиваний:
8
Добавлен:
06.06.2015
Размер:
545.79 Кб
Скачать

17.10.12 Лекция 5

Предикатное программирование

4. Система правил доказательства корректности программы

Правила для общего случая

Правила для вхождений операторов под квантором существования и в левой части

Правила для однозначной спецификации

Задачи верификации и синтеза

5. Построение языка предикатного программирования. Методы док-ва корректности предикатных программ

Язык P1: подстановка определения предиката на место вызова

Язык P2: оператор суперпозиции и параллельный оператор общего вида

Язык P2: другое обобщение оператора суперпозиции

Язык P3: выражения

3. Математические основы 3.3. Матиндукция

[P(x), Q(x, y)] спецификация программы S(x: y), P(x) предусловие, Q(x, y) постусловие.

Тотальная корректность программы S(x: y) относительно спецификации [P(x), Q(x, y)] :

Corr(S(x: y), P(x), Q(x, y))

P(x) [ L(S(x: y)) Q(x, y) ] & y. L(S(x: Однозначность программы S(x, y) :

P(x) & L(S(x: y1)) & L(S(x: y2)) y1 = y2

Тотальность спецификации [P(x), Q(x, y)] :

T(P(x), Q(x, y)) P(x) y. Q(x, y)

Однозначность спецификации [P(x), Q(x, y)] :

SV(P(x), Q(x, y)) P(x) & Q(x, y1) & Q(x, y2)

y))

y1

(6)

(7)

(8)

= y2 (9)

Теорема 2.1 тождества спецификации и программы

P(x) { S (x, y) } Q(x, y)

(2.1)

Оператор S(x, y) является однозначным, а спецификация [P(x), Q(x, y)] тотальной. Пусть истина формула:

P(x) & Q(x, y) L(x, y)

(2.6)

Тогда программа (2.1) является корректной.

T1:

T0:

T(P(x), Q(x, y)); P(x) & Q(x, y) ├ L(S(x: y)) Corr(S(x: y), P(x), Q(x, y))

P(x) ├ y. L(S(x: y)); P(x) & L(S(x: y) ├ Q(x, y)

Corr(S(x: y), P(x), Q(x, y))

посылки T1.1 и T1.2

Система правил декомпозиции доказательства корректности программы.

Общий случай

Параллельный оператор

Corr(B(x: y), P(x), Q(x, y)); Corr(C(x: z), P(x),

QP R(x, z))

:

Corr(B(x: y) || C(x: z), P(x), Q(x, y) & R(x, z))

Доказательство истинности правила QP. Допустим, истинно предусловие P(x). Необходимо доказать тотальность формулы L(A(x: y) || B(x: z)) и выводимость из этой формулы постусловия Q(x, y) & R(x, z). Формула L(B(x: y) || C(x: z)) эквивалентна L(B(x: y) & L(C(x: z)). Из истинности P(x) и корректности операторов B(x: y) и С(x: z) следует истинность следующих формул: L(B(x: y)) Q(x, y), y. L(B(x: y)),

L(C(x: z)) R(x, z) и z. L(C(x: z)). Конъюнкция y. L(B(x: y)) иz. L(C(x: z)) дает тотальность формулы L(A(x: y) || B(x: z)). Выводимость Q(x, y) & R(x, z) также очевидна. □

Условный оператор

Corr(B(x: y), P(x) & E, Q(x, y));

Corr(C(x: y), P(x) & E, Q(x, z))

: Corr(if (E) B(x: y) else C(x: y), P(x), Q(x, y))

Доказательство QC. Пусть истинно P(x). Необходимо доказать тотальность L(if (E) B(x: y) else C(x: y)) и

выводимость из нее постусловия Q(x, y). Формула L(if (E) B(x: y) else C(x: y)) эквивалентна:

(E L(B(x: y))) ( E L(C(x: y))) .

Пусть E истинно. Из истинности P(x) & E и корректности

B(x: y) следует y. L(B(x: y)). Далее, будет истинной формулаy. (E L(B(x: y))). Из истинности E следует истинность

E L(C(x: y)) и, значит, формулы

y. [(E L(B(x: y))) & ( E L(C(x: y)))] .

Это доказывает тотальность L(if (E) B(x: y) else C(x: y)) для истинного E. Тотальность в случае ложного E доказывается аналогичным образом.

4. Система правил доказательства корректности операторов (прод1)

 

Оператор суперпозиции

 

P(x) ├ z. L(B(x: z));

QS:

Corr( C(z: y), P(x) & L(B(x: z)), Q(x, y))

Corr( B(x: z); C(z: y), P(x), Q(x, y))

Доказательство QS. Необходимо доказать тотальность L(B(x: z); C(z: y)) и выводимость постусловия Q(x, y) из L(B(x: z); C(z: y)). Формула L(B(x: z); C(z: y)) эквивалентнаz. L(B(x: z)) & L(C(z: y)). Из истинности предусловия P(x) и QS.1 следует z. L(B(x: z)). Допустим, для некоторого z0

формула L(B(x: z0)) истинна. Из QS.2 следует истинность L(C(z0: y)) Q(x, y) и y. L(C(z0: y)). Тогда

y. z. L(B(x: z)) & L(C(z: y)) ( тотальность L(B(x: z); C(z: y)) ). Пусть L(B(x: z); C(z: y)) истинно, т. е. z. L(B(x: z)) & L(C(z: y)). Пусть формула истинна при z1. Подставляя z1 в QS.2 получим

истинность Q(x, y). □

Оператор суперпозиции с корректным первым подоператором

 

Corr( B, PB, QB); P(x) ├ PB(x);

QSB

Corr( C(z: y), P(x) & QB (x, z), Q(x, y))

Corr( B(x: z); C(z: y), P(x), Q(x, y))

:

Декомпозиция формул для:

-вхождения оператора под квантором в правой части

-вхождения оператора в левой части

Декомпозиция вхождений операторов

Оператор суперпозиции

R(x) ├ z. L(B(x: z)); R(x) & L(B(x: z))├ y.

FE: L(C(z: y))

Доказательство FER(x). Формула├ y. L(B(x:y. L(B(xz);: z);C(z:C(zy): y))) эквивалентна y. z.(L(B(x: z)) L(C(z: y))). Пусть истинно R(x). Из FE.1 истинна z. L(B(x: z)). Допустим, для z0 истинна L(B(x: z0)). Из FE.2 истинна формула y. L(C(z0: y)). В итоге

будет истинна y. z.(L(B(x: z)) L(C(z: y))). □

FL: R(x) & L(B(x: z)) & L(C(z: y))├ H(x, y)

R(x) & L(B(x: z); C(z: y)) ├ H(x, y)

Доказательство FL. Пусть истинно R(x) & L(B(x: z); C(z: y)). Формупа L(B(x: z); C(z: y)) эквивалентна z. L(B(x: z)) L(C(z: y)). Допустим, формула истинна при z0. Тогда истинны L(B(x: z0)) и

L(C(z0: y)). Применение FL.1 доказывает истинность H(x, y).

Правила для корректных подоператоров

Правило для параллельного оператора

Corr(B, PB, QB); Corr(C, PC, QC); P(x) ├ PB(x) & PC(x);

RP: QB(x, y) & QC(x, z) ├ Q(x, y, z) Corr(B(x: y) || C(x: z), P(x), Q(x, y, z))

Доказательство RP. Пусть P(x) истинно. Следует доказать тотальность L(B(x: y) || C(x: z)) и выводимость постусловия Q(x, y, z) из L(B(x: y) || C(x: z)). Формула L(B(x: y) || C(x: z))

эквивалентна L(B(x: y)) & L(C(x: z)). Из истинности P(x) и RP.3 следует истинность PB(x) и PC(x). Далее, из корректности

операторов B(x: y) и C(x: z) следует истинность формулy. L(B(x: y)) и z. L(C(x: z)). Их конъюнкция определяет тотальность L(B(x: y) || C(x: z)).

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