- •10.10.11 Лекция 4
- •Логическая семантика:
- •3. Теория невзаимодействующих программ.
- •Программа на языке CCP
- •Исполнение программы: исполнение вызова A(z: u)
- •Рекурсивные определения предикатов
- •Рекурсивное кольцо предикатов A1, A2,…, An:
- •Отношение “ ” на множестве вектор-графиков, является полной решеткой. Минимальный элемент пустой график.
- •Лемма 3.12. Пусть {Hm}m 0 возрастающая цепь вектор- графиков. Тогда : m 0Hm
- •Лемма 3.15. Функции GrS, GrP и GrC (3.33-3.35) графиков оператора суперпозиции, параллельного оператора
- •График GrC(P, Q) условного оператора
- •Структура рекурсивного кольца предикатов
- •Рекурсивное кольцо предикатов представим в виде:
- •Допустим, что для фиксированных значений u исполнение вызова D(u: v) завершается значениями набора
- •Теорема 3.1. При наличии в программе вызова вида ConsArray(x, B: A) предикат B
- •Допустим, программа на языке CCP содержит несколько рекурсивных
- •Рассмотрим общий случай, когда программа П может содержать переменные предикатного типа. Обозначим через
- •Однозначность предикатов
- •Лемма 3.19. Вызов C(…), где C переменная предикатного типа, является однозначным, если для
- •Имеется рекурсивных дерево колец (теорема 3.1). Для колец, являющихся листьями, однозначность следует из
- •4. Система правил доказательства корректности операторов
- •[P(x), Q(x, y)] спецификация программы S(x: y), P(x) предусловие, Q(x, y) постусловие.
- •Теорема 2.1 тождества спецификации и программы
- •Логика базисных операторов
- •Система правил декомпозиции доказательства корректности программы.
- •Условный оператор
- •Условный оператор (прод.)
Система правил декомпозиции доказательства корректности программы.
Общий случай
Параллельный оператор
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 доказывается аналогичным образом.
Условный оператор (прод.)
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))
Пусть формула L(if (E) B(x: y) else C(x: y)) истинна. Докажем истинность Q(x, y). Допустим, E истинно. Из истинности
P(x) & E и корректности оператора B(x: y) следует истинность формулы L(B(x, y)) Q(x, y). Из истинности (E L(B(x: y)) следует истинность L(B(x: y) и далее – Q(x, y). Истинность Q(x, y) при ложном E доказывается аналогично. □