
- •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. Заключение
- •Список литература
3.2. Наименьшая неподвижная точка
Далее будем считать, что (D, ⊑, ⊥) – полная решетка с наименьшим элементом, т. е. "a Î D. ⊥⊑ a.
Пусть F: D→D произвольная тотальная (т. е. всюду определённая) функция на D. Функция F называется монотонной, если "a,b Î D. a ⊑ b Þ F(a) ⊑ F(b). Последовательность {am}m³0 является возрастающей цепью, если a0 ⊑ a1 ⊑ … ⊑ am ⊑ … . Для натурального n и x Î D определим: F0(x) = x, Fn+1(x) = Fn(F(x)).
Лемма 3.2. {Fn(⊥)}n≥0 – для монотонной функции F определяют возрастающую цепь: ⊥⊑ F(⊥) ⊑ F2(⊥) ⊑ … ⊑ Fn(⊥) ⊑ … .
Лемма 3.3. Если F монотонна и a0 ⊑ a1 ⊑ a2 ⊑ … – возрастающая цепь, то F(a0) ⊑ F(a1) ⊑ F(a2) ⊑ … – также возрастающая цепь.
Для наименьшей верхней грани цепи будем использовать обозначение: Èm³0am @ lub {am}m³0. Здесь верхняя грань играет роль предела цепи.
Тотальная функция F: D→D называется непрерывной, если для любой возрастающей цепи {am}m³0 выполняется равенство F(Èm³0am) = Èm³0 F(am).
Лемма 3.4. Непрерывная функция является монотонной.
Неподвижной точкой функции F называется решение уравнения x = F(x).
Теорема 3.1 Клини. Пусть F – непрерывная функция. Тогда Èn³0{Fn(⊥)} является наименьшей неподвижной точкой F.
3.3. Математическая индукция
Математическая индукция – это метод доказательства некоторого утверждения P(n) для всех значений натурального параметра n; n = 0, 1, 2, … . Доказательство проводится по следующей схеме.
Начальный шаг: утверждение P(n) доказывается для n = 0 (база индукции);
Индуктивный шаг: утверждение P(n) считается истинным для значения n (индуктивное предположение) и доказывается для значения n + 1.
Переменная n называется индукционной переменной. Метод математической индукции базируется на аксиоме индукции:
( P(0) & "k.[ P(k) Þ P(k + 1) ] ) Þ "n.P(n) . (3.2)
На практике используются различные обобщения метода в зависимости от природы утверждения P(n). База индукции может быть отлична от нуля. Шаг индукции может быть отрицательным. Индукционных переменных может быть несколько. Эти и другие особенности учитываются методами полной индукции и структурной индукции. Их доказательство реализуется применением классического метода математической индукции. Индукционное предположение для полной индукции определяет истинность P(j) для всех j k; при его использовании требуется доказать P(k + 1).
Далее будем использовать метод, сочетающий структурную и полную индукцию. Пусть утверждение, которое требуется доказать, есть W(t); t Î X. Параметр t определяет одну или несколько индукционных переменных. На множестве X задан строгий частичный порядок ⊏, удовлетворяющий свойству (3.1) обрыва бесконечных убывающих цепей. Метод структурной (и полной) индукции определяется следующей формулой:
t Î X. [ (y Î X. y ⊏ t W(y) ) W(t) ] . (3.3)
Если элемент t в формуле (3.3) является минимальным, то формула (3.3) вырождается в t Î X. W(t). Это значит, что для минимальных элементов доказательство W(t) надо проводить отдельно, что соответствует начальному шагу классической схемы. Пусть истинное значение предиката (t) определяет набор значений t, составляющих базу индукции, которая, по меньшей мере 11, должна содержать все минимальные элементы. Тогда формула (3.3) переписывается в виде
t Î X. [ ((t) W(t)) & y Î X. ((t) & y ⊏ t W(y) ) W(t) ] . (3.4)
Формула (3.4) определяет общую схему доказательства по индукции.