- •17.10.12 Лекция 5
- •[P(x), Q(x, y)] спецификация программы S(x: y), P(x) предусловие, Q(x, y) постусловие.
- •Теорема 2.1 тождества спецификации и программы
- •Система правил декомпозиции доказательства корректности программы.
- •Условный оператор
- •4. Система правил доказательства корректности операторов (прод1)
- •Оператор суперпозиции с корректным первым подоператором
- •Декомпозиция вхождений операторов
- •Правила для корректных подоператоров
- •Правило для параллельного оператора
- •Правило для оператора суперпозиции
- •Правило для оператора суперпозиции
- •Правило для оператора суперпозиции
- •Декомпозиция в случае однозначной спецификации
- •Задачи верификации и синтеза
- •5. Построение языка предикатного программирования. Методы доказательства корректности предикатных программ
- •Система правил доказательства корректности оператора суперпозиции, параллельного оператора и условного оператора
- •Язык P1: подстановка определения предиката на место вызова
- •Язык P2: оператор суперпозиции и параллельный оператор общего вида
- •Параллельный оператор общего вида
- •Правило опускания скобок:
- •Язык P2: другое обобщение оператора суперпозиции
- •Язык P3: выражения
- •Понятие выражения.
- •Правило для выражений в качестве аргументов:
- •3.Математические основы
- •Математическая индукция ― метод доказательства некоторого утверждения P(n) для всех значений натурального параметра
- •Индукционное предположение для полной индукции определяет истинность P(j) для всех j k; используя
- •Метод индукции, использующий меру
Правило для параллельного оператора
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))