
- •2.6. Заключение .............................................................................................................. 22
- •4. Язык исчисления вычислимых предикатов,
- •4.12. Однозначность предикатов .......................................................................................... 45
- •5. Семантика языка предикатного программирования.
- •6.9. Формулы .......................................................................................................................... 78
- •6.9. Процессы ......................................................................................................................... 79
- •6.11. Императивное расширение .......................................................................................... 82
- •7.8. Заключение ................................................................................................................... 108
- •Введение в курс предикатного программирования
- •1. Общее понятие программы
- •1.1. Автоматическая вычислимость
- •1.2. Спецификация программы
- •1.3. Формы спецификации программы
- •Список литературы
- •2. Корректность программ с предикатной спецификацией
- •2.1. Предикатная спецификация программы
- •2.2. Логическая семантика языка программирования
- •2.3. Модель корректности программы
- •2.4. Система правил доказательства корректности операторов
- •2.4.1. Правила для корректного оператора
- •2.4.2. Правила корректности для параллельного оператора
- •2.4.3. Правила корректности для оператора суперпозиции
- •2.4.4. Правила корректности для условного оператора
- •2.5. Система правил вывода программы из спецификации
- •2.5.1. Однозначность предикатов
- •2.5.2. Теорема тождества спецификации и программы
- •2.5.3. Правила корректности для параллельного оператора
- •2.5.4. Правила корректности для оператора суперпозиции
- •2.5.5. Правила корректности для условного оператора
- •2.6. Заключение
- •Список литературы
- •3. Математические основы
- •3.1. Отношения порядка
- •3.2. Наименьшая неподвижная точка
- •3.3. Математическая индукция
- •Список литературы
- •4. Язык исчисления вычислимых предикатов, его логическая и операционная семантика
- •4.1. Структура программы на языке ccp
- •4.2. Система типов данных
- •4.3. Логическая и операционная семантика языка ccp
- •4.4. Семантика вызова предиката
- •4.5. Оператор суперпозиции
- •4.6. Параллельный оператор
- •4.7. Условный оператор
- •4.8. Конструктор предиката
- •4.9. Конструктор массива
- •4.10. Программа
- •4.11. Рекурсивные определения предикатов
- •4.12. Однозначность предикатов
- •Список литературы
- •5. Семантика языка предикатного программирования. Методы доказательства корректности предикатных программ
- •5.1. Язык p1: подстановка определения предиката на место вызова
- •5.2. Язык p2: оператор суперпозиции и параллельный оператор общего вида
- •5.3. Язык p2: другое обобщение оператора суперпозиции
- •5.4. Язык p3: выражения
- •5.5. Методы доказательства корректности рекурсивных программ
- •6. Язык предикатного программирования
- •6.1. Введение
- •6.2. Лексемы
- •6.3. Предикаты
- •6.3.1. Определение предиката
- •6.3.2. Спецификация предиката
- •6.3.3. Вызов предиката
- •6.4. Программа
- •6.5. Операторы
- •6.6. Выражения
- •6.7. Типы
- •6.8. Массивы
- •6.8.1. Описание типа массива
- •6.8.2. Вырезка массива
- •6.8.3. Определение массива
- •6.8.4. Объединение массивов
- •6.9. Формулы
- •6.10. Процессы
- •6.11. Императивное расширение
- •Список литературы
- •7. Технология предикатного программирования
- •7.1. Подстановка определения предиката на место вызова
- •7.2. Замена хвостовой рекурсии циклом
- •7.3. Склеивание переменных
- •7.4. Метод обобщения исходной задачи
- •7.5. Трансформация кодирования структурных объектов
- •7.6. Пример. Сортировка простыми вставками
- •7.7. Гиперфункции
- •7.8. Заключение
- •Список литература
2.5.3. Правила корректности для параллельного оператора
Рассмотрим спецификацию параллельного оператора в виде тройки Хоара:
{P(x)} A || B {Q(x, y, z)} 8 . (2.17)
Допустим, операторы A и B корректны. Их спецификации представлены тройками:
{PA(x)} A {QA(x, y)} , {PB(x)} B {QB(x, z)} .
Определим правила, гарантирующие корректность параллельного оператора.
Правило LP1. P(x) ├ PA(x) & PB(x).
Правило LP2. P(x) & Q(x, y, z) ├ QA(x, y).
Правило LP3. P(x) & Q(x, y, z) ├ QB(x, z).
Лемма 2.10. Допустим, спецификация параллельного оператора (2.17) реализуема, операторы A и B однозначны в области предусловий и корректны, а их спецификации однозначны. Если правила LP1, LP2 и LP3 истинны (т. е. правая часть доказуема из левой части для каждого правила), то параллельный оператор (2.17) является корректным.
Доказательство. Поскольку операторы A и B однозначны, то и параллельный оператор (2.17) является однозначным. Поскольку спецификация оператора (2.17) реализуема, в соответствии с теоремой 2.1 для доказательства леммы достаточно доказать истинность формулы:
P(x) & Q(x, y, z) Þ LS(A || B)(x, y, z) .
В соответствии с (2.2) формула LS(A || B)(x, y, z) эквивалентна LS(A)(x, y) & LS(B)(x, z).
Пусть истинны P(x) и Q(x, y, z). Докажем истинность LS(A)(x, y) и LS(B)(x, z). Из истинности предусловия P(x) по правилу LP1 следует истинность PA(x) и PB(x). По правилам LP2 и LP3 становятся истинными QA(x, y) и QB(x, z). Для предикатов A и B выполняются условия леммы 2.9. Поэтому истинны формулы:
PA(x) & QA(x, y) Þ LS(A)(x, y);
PB(x) & QB(x, z) Þ LS(B)(x, z).
Поскольку посылки этих формул истинны, то истинны LS(A)(x, y) и LS(B)(x, z). □
2.5.4. Правила корректности для оператора суперпозиции
Рассмотрим спецификацию оператора суперпозиции в виде тройки Хоара:
{P(x)} A; B {Q(x, y)} 9 . (2.18)
Предположим, что операторы A и B корректны. Их спецификации представлены тройками:
{PA(x)} A {QA(x, z)} , {PB(z)} B {QB(z, y)} .
Определим правила, гарантирующие корректность оператора суперпозиции (2.18).
Правило LS1. P(x) ├ PA(x).
Правило LS2. P(x) & Q(x, y) & QA(x, z) ├ PB(z) & QB(z, y).
Лемма 2.11. Допустим, спецификация оператора суперпозиции (2.18) реализуема, операторы A и B однозначны в области предусловий и корректны, а их спецификация B однозначна. Если правила LS1 и LS2 истинны, то оператор суперпозиции (2.18) является корректным.
Доказательство. Поскольку операторы A и B однозначны, то и оператор суперпозиции (2.18) является однозначным. В соответствии с теоремой 2.1 для доказательства леммы достаточно доказать истинность формулы:
P(x) & Q(x, y) Þ LS(A; B)(x, y) .
В соответствии с (2.1) формула LS(A; B)(x, y) эквивалентна $z.(LS(A)(x, z) & LS(B)(z, y)).
Пусть истинны P(x) и Q(x, y). Докажем истинность $z.(LS(A)(x, z) & LS(B)(z, y)). Из истинности предусловия P(x) по правилу LS1 следует истинность PA(x). Из корректности оператора A следует истинность формул $z. LS(A)(x, z) и LS(A)(x, z) Þ QA(x, z). Допустим для некоторого z0 истинно LS(A)(x, z0). Тогда истинно QA(x, z0). В соответствии с правилом LS2 истинна формула PB(z0) & QB(z0, y). В соответствии с леммой 2.9 истинна формула
PB(z) & QB(z, y) Þ LS(B)(z, y) .
Тогда истинна LS(B)(z0, y). В итоге, будет истинна формула $z.(LS(A)(x, z) & LS(B)(z, y)). □