
- •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. Заключение
- •Список литература
Список литературы
1. Дейкстра Э. Дисциплина программирования: Пер. с англ. М.: Мир, 1978. 272 с.
2. Шелехов В. И. Модель корректности программ на языке исчисления вычислимых предикатов. Новосибирск, 2007. 51 с. (Препр. / ИСИ СО РАН; № 145).
3. Шелехов В. И. Исчисление вычислимых предикатов. Новосибирск, 2007. 24 с. (Препр. / ИСИ СО РАН; № 143).
4. Шелехов В. И. Анализ общего понятия программы // Методы предикатного программирования. Новосибирск, 2006. Вып. 2. C. 7–16.
5. Шелехов В. И. Язык спецификации процессов // Методы предикатного программирования. Вып.2. Новосибирск, 2006. C. 17–34.
6. Шелехов В. И. Разработка программы построения дерева суффиксов в технологии предикатного программирования. Новосибирск, 2004. 52 с. (Препр. / ИСИ СО РАН; № 115).
7. Шелехов В. И. Введение в предикатное программирование. Новосибирск, 2002. 82 с. (Препр. / ИСИ СО РАН; № 100).
8. Scott D. S. and Strachey C. Towards a mathematical semantics for computer languages // Computers and Automata. 1971. P. 19–46.
9. Hoare C. A. R. An axiomatic basis for computer programming // Communications of the ACM. 1969. Vol. 12 (10). P. 576–585.
10. Floyd R. W. Assigning meanings to programs // Proceedings Symposium in Applied Mathematics, Mathematical Aspects of Computer Science. AMS, 1967. P. 19–32.
11. McCarthy J. A basis for a mathematical theory of computation // Computer Programming and Formal Systems. 1963. P. 33–70.
12. Milner R. A. Calculus of Communicating Systems // Lecture Notes in Computer Science, 1980. Vol. 92.
13. Hoare C. A. R. Communicating Sequential Processes. Prentice-Hall. 1985.
14. Andrews J. H. A logical semantics for depth-first Prolog with ground negation // Theoretical computer science. 1997. Val. 184. P. 105–143.
15. Hehner E. C. R. A Practical Theory of Programming, 2nd edition. 2004; URL: http://www.cs.toronto.edu/~hehner/aPToP/
16. Автоматизированный реинжиниринг программ / Под ред. проф. А. Н. Терехова и А. А. Терехова. СПб.: Изд-во С.-Петерб. ун-та, 2000. 332 с.
17. Backus J. Can programming be liberated from the von Neumann style? A. Functional Style and Its Algebra of Programs // Communications of the ACM. 1978. Vol. 21 (8). P. 613–641.
3. Математические основы
В данном разделе собраны известные математические понятия, используемые в дальнейшем изложении.
3.1. Отношения порядка
R называется бинарным отношением на множестве D, если R D D. Утверждение (a, b) R принято записывать в виде a R b. Для произвольного отношения R используются следующие понятия:
R рефлексивно "aÎD. a R a,
R иррефлексивно "aÎD. a R a,
R симметрично a R b Þ b R a,
R антисимметрично a R b & b R a Þ a = b,
R транзитивно a R b & b R c Þ a R c.
Эквивалентностью называется рефлексивное, симметричное и транзитивное бинарное отношение R на D.
Обозначим через (D, ⊑) непустое множество D с отношением порядка ⊑. (D, ⊑) – частично упорядоченное множество (чум), если ⊑ рефлексивно, антисимметрично и транзитивно; при этом порядок ⊑ называется частичным. Частичный порядок ⊑ является линейным (или тотальным), если "a,bD. (a ⊑ b b ⊑ a). Бинарное отношение ⊏ называется строгим частичным порядком, если ⊏ иррефлексивно, антисимметрично и транзитивно.
Пусть (D, ⊑) частично упорядоченное множество. Для произвольного подмножества S D определим следующие понятия. Наименьшим (наибольшим) элементом S называется a S, такой что a ⊑ x (x ⊑ a) для всех x S. Для наименьшего и наибольшего элементов D используются обозначения: ⊥ (bottom) и ┬ (top). Верхней гранью S называется a D, такой что x ⊑ a для всех x S. Нижней гранью S называется a D, такой что a ⊑ x для всех x S. Наименьшая верхняя грань (least upper bound) подмножества S обозначается lub(S).
Частично упорядоченное множество (D, ⊑) называется нижней (верхней) полурешёткой, если для любого его подмножества (в том числе и пустого) существует наименьшая верхняя (наибольшая нижняя) грань. Частично упорядоченное множество называется полной решёткой, если оно является верхней и нижней полурешеткой.
Лемма 3.1. Нижняя (верхняя) полурешетка является полной решеткой.
Частично упорядоченное множество (D, ⊏) со строгим порядком ⊏ обладает свойством обрыва бесконечно убывающих цепей (well-founded partial order), если всякое непустое подмножество S имеет минимальный элемент, т. е.
"SD. (S Þ aS "sS. s ⊏ a) . (3.1)
Из данного определения следует, что в подмножестве S не существует бесконечно убывающих цепей.
Множество (D, ⊑) с линейным порядком, обладающее свойством обрыва бесконечно убывающих цепей, является вполне упорядоченным: любое подмножество содержит нижнюю грань.
Более полное изложение материала по отношениям порядка см. в учебном пособии [1].