- •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; используя
- •Метод индукции, использующий меру
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))
QС
: 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)).