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

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

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 (прод). Докажем выводимость Q(x, y, z) из L(B(x: y)) & L(C(x: z)). Допустим, истинна формула

L(B(x: y)) & L(C(x: z)). Из истинности PB(x) и PC(x) и

корректности операторов B(x: y) и C(x: z) следует истинность формул L(B(x: y)) QB(x, y) и L(C(x: z)) QC(x, z). Как

следствие, будут истинны QB(x, y) и QC(x, z). Наконец, из RP.4 следует истинность постусловия Q(x, y, z). □

Правило для оператора суперпозиции

 

Corr(B, PB, QB); Corr(C, PC, QC);

 

P(x) ├ PB(x); P(x) & QB(x, z) ├ PC(z);

 

P(x) & QB(x, z) & QC(z, y) ├ Q(x, y)

RS:

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

Доказательство RS. Пусть P(x) истинно. Следует доказать тотальность 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) и RS.3 следует PB(x). Далее, из RS.4 следует QB(x, z) PC(z). Из истинности PB(x) и

корректности оператора B(x: z) следует истинность формулz. L(B(x: z)) и L(B(x: z)) QB(x, z). Допустим, для некоторого

z0 формула L(B(x: z0)) истинна. Как следствие, истинно QB(x, z0).

Правило для оператора суперпозиции

 

Corr(B, PB, QB); Corr(C, PC, QC);

 

P(x) ├ PB(x); P(x) & QB(x, z) ├ PC(z);

 

P(x) & QB(x, z) & QC(z, y) ├ Q(x, y)

RS:

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

Доказательство RS (прод1). Далее, из истинности

z (QB(x, z) PC(z)) следует истинность PC(z0). Ввиду

корректности оператора C(z: y) истинна формула

y L(C(z0: y)). Далее, истинна L(B(x: z0)) & y L(C(z0: y)), и

затем – формула y. z. L(B(x: z)) & L(C(z: y)), т. е. доказана тотальность L(B(x: z); C(z: y)).

Правило для оператора суперпозиции

 

Corr(B, PB, QB); Corr(C, PC, QC);

 

P(x) ├ PB(x); P(x) & QB(x, z) ├ PC(z);

 

P(x) & QB(x, z) & QC(z, y) ├ Q(x, y)

RS:

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

Доказательство RS (прод2). Докажем выводимость 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)). Пусть формула истинна для некоторого z1. Ввиду корректности оператора B(x: z)

истинна формула L(B(x: z1)) QB(x, z1) и далее – QB(x, z1). Истинность QB(x, z1) и z (QB(x, z) PC(z)) влечет PC(z1). Из корректности оператора C(z: y) истинно L(C(z1, y)) QC(z1, y). Поскольку L(C(z1, y)) истинно, то истинно QC(z1, y). В итоге,

истинна правая часть RS.5, а значит – и левая, т. е. истинно постусловие Q(x, y). □

Декомпозиция в случае однозначной спецификации

FP

:

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

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

 

Правило для оператора суперпозиции

FS:

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

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

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

на примере оператора суперпозиции

A(x: y) pre P(x) { B(x: z); C(z: y) } post Q(x, y) (3)

 

Corr(B, PB, QB); Corr(C, PC, QC);

 

P(x) ├ PB(x); P(x) & QB(x, z) ├ PC(z);

 

P(x) & QB(x, z) & QC(z, y) ├ Q(x, y)

RS:

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

Задача дедуктивной верификации

Задача программного синтеза: требуется построить

программу предиката A, представленного спецификацией [P(x), Q(x, y)].

Пусть для некоторых предикатов PB(x), QB(x, z), PC(z) и QC(z, y)

доказана истинность посылок RS.3, RS.4 и RS.5 . Тогда синтезируем программу (3). Дальнейшей целью является синтез программ предикатов B(x: z) и C(z: y).

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

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

Исчисление вычислимых предикатов ― язык

CCP (Calculus of Computable Predicates)

минимальный полный базис языка предикатного программирования

Язык предикатного программирования P (Predicate programming language).

Расширяющаяся последовательность языков: CCP = P0, P1, P2, P3, P4 = P.

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

Подстановка определения предиката A(x: y) K(x: y) на место вызова A(t: z) блок { K(t: z) }, где x, y, t, z

наборы переменных. Происходит замена вхождений переменных и переименование локалов.

L({ K(t: z) }) L(K(t: z)) (5.1) runBlock(s, { K(t: z) }):

runStat(s, K(t: z)) (5.2)

Программа П’, получаемая из программы П подстановкой определения предиката на место вызова, эквивалентна программе П’: исполнение любого предиката программы П’ на фиксированном наборе аргументов дает тот же результат, что и в программе П.

Язык P1: многократное произвольное применение подстановок определений предикатов на место вызовов.

Конструкция: вызов или блок как подоператор в трех базисных операторах

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

Операторы { A(…); B(…) }; C(…) и

A(…); { B(…); C(…) } являются эквивалентными

Эквивалентны { A(…) || B(…) } || C(…) и A(…) || { B(…) || C(…) }

Язык P2: оператор суперпозиции и параллельный оператор общего вида: A1(…); A2(…); … ; An(…) и A1(…) || A2(…) || … || An(…) для n > 1.

P(x){B1(x: z1); B2(z1: z2);...; Bj(zj-1: zj);...; Bn(zn-1: y)}Q(x, y) (5.3)

x, z1, z2, …, zn-1, y различные непересекающиеся наборы переменных, B1, B2, …, Bn обозначают предикаты или блоки языка P1 со спецификациями (предусловиями и постусловиями) PB1(x), QB1(x, z1), PB2(z1), QB2(z1, z2), …, PBn(zn-1), QBn(zn-1, y).

L(B1(x: z1); B2(z1: z2);...; Bj(zj-1: zj);...; Bn(zn-1: y))

z1, z2, …, zn-1.L(B1(x: z1)) & L(B2(z1: z2)) &...&

& L(Bj(zj-1: zj)) &...& L(Bn(zn-1: y)) (5.4) runStat(s, B1(x: z1); …; Bn(zn-1: y))

runCallBlock(s, B1(x: z1));

(5.5)

runCallBlock(s, B2(z1: z2)); .....; runCallBlock(s, Bj(zj-1: zj)); .....; runCallBlock(s, Bn(zn-1: y))

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