
- •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. Заключение
- •Список литература
6.4. Программа
Программа состоит из одного или нескольких модулей. Модуль определяет независимую часть программы.
ОПИСАНИЕ-МОДУЛЯ ::= [ЗАГОЛОВОК-МОДУЛЯ] СПИСОК-ОПИСАНИЙ
ЗАГОЛОВОК-МОДУЛЯ ::= module ИМЯ-МОДУЛЯ [ ( ОПИСАНИЯ-АРГУМЕНТОВ ) ];
ИМЯ-МОДУЛЯ ::= ИДЕНТИФИКАТОР
Аргументы, описанные в круглых скобках, являются формальными параметрами модуля. Структура ОПИСАНИЙ-АРГУМЕНТОВ определена в разд. 6.3.1.
СПИСОК-ОПИСАНИЙ ::= ОПИСАНИЕ (; ОПИСАНИЕ)*
ОПИСАНИЕ ::=
ИМПОРТ-МОДУЛЯ | ОПИСАНИЕ-ТИПА |
ОПИСАНИЕ-ГЛОБАЛЬНЫХ-ПЕРЕМЕННЫХ |
ОПРЕДЕЛЕНИЕ-ПРЕДИКАТА | СПЕЦИФИКАЦИЯ-ПРЕДИКАТА |
ОПИСАНИЕ-ФОРМУЛЫ | ОПРЕДЕЛЕНИЕ-КЛАССА |
ОПИСАНИЕ-СООБЩЕНИЯ | ОПРЕДЕЛЕНИЕ-ПРОЦЕССА
ОПИСАНИЕ-ФОРМУЛЫ (см. разд. 6.9) определяет функцию или предикат; они встречаются в предусловиях, постусловиях и формулах. Три последние альтернативы ОПИСАНИЯ используются для задания процессов; см. разд. 6.10.
ИМПОРТ-МОДУЛЯ ::=
import ИМЯ-МОДУЛЯ [ ( АРГУМЕНТЫ )] [ as ЛОКАЛЬНОЕ-ИМЯ-МОДУЛЯ ]
ЛОКАЛЬНОЕ-ИМЯ-МОДУЛЯ ::= ИДЕНТИФИКАТОР
Имена модулей, встречающиеся в описаниях данного модуля, должны быть определены конструкцией ИМПОРТ-МОДУЛЯ. Если импортируемый модуль имеет формальные параметры, то в круглых скобках задается соответствующий набор фактических параметров. Конструкция АРГУМЕНТЫ определена в разд. 6.3.3. Правила подстановки фактических параметров на место формальных те же самые, что и для вызова предиката. ЛОКАЛЬНОЕ-ИМЯ-МОДУЛЯ используется в теле модуля как эквивалент ИМЯ-МОДУЛЯ ( АРГУМЕНТЫ ).
ОПИСАНИЕ-ГЛОБАЛЬНЫХ-ПЕРЕМЕННЫХ ::=
ОПИСАНИЕ-ПЕРЕМЕННЫХ | ОПИСАНИЕ-ПЕРЕМЕННЫХ-С-ИНИЦИАЛИЗАЦИЕЙ
Глобальные переменные обычно определяют внешние параметры задачи. В нижеследующих определениях предикатов эти переменные считаются аргументами. Они используются в теле предиката, но не упоминаются в заголовке.
ОПИСАНИЕ-ПЕРЕМЕННЫХ ::=
ИЗОБРАЖЕНИЕ-ТИПА-ПЕРЕМЕННОЙ ИМЯ-ПЕРЕМЕННОЙ (, ИМЯ-ПЕРЕМЕННОЙ)*
ОПИСАНИЕ-ПЕРЕМЕННЫХ-С-ИНИЦИАЛИЗАЦИЕЙ ::=
ИЗОБРАЖЕНИЕ-ТИПА-ПЕРЕМЕННОЙ ОПРЕДЕЛЕНИЕ-ПЕРЕМЕННОЙ
(, ОПРЕДЕЛЕНИЕ-ПЕРЕМЕННОЙ)*
ОПРЕДЕЛЕНИЕ-ПЕРЕМЕННОЙ ::= ИМЯ-ПЕРЕМЕННОЙ = ВЫРАЖЕНИЕ |
ИМЯ-ПЕРЕМЕННОЙ
Тип выражения должен быть совместим с типом переменой, которой присваивается значение переменной.
Модуль определяет совокупность имен и обозначаемых ими объектов: предикатов, типов, переменных, полей структур, конструкторов и распознавателей объединений, процессов, классов и сообщений. Объекты, представленные описаниями модуля, определяют область глобальных имен. Каждое описание предиката определяет автономную систему локализации имен: параметров, меток и локальных переменных. В описании предиката одно имя не может использоваться для двух разных объектов. Если глобальное имя используется в определении предиката, то это имя не может определяться в качестве имени метки, локальной переменной или параметра.
Следующей областью локализации являются конструкции: изображение подтипа, определение массива, элемент агрегата вида “итерация выражений”. Переменные, определенные в каждой из этих конструкций, локализованы в конструкции и недоступны вне нее. Класс также определяет независимую область локализации. Поля класса доступны префиксацией объекта класса (см. разд. 6.6).
Исполнение программы начинается исполнением предиката с именем main. Рекомендован предикат со следующими параметрами: main( seq(string)argv: int ret_code ). Параметр argv поставляет массив входных аргументов при исполнении программы. Параметру ret_code присваивается значение кода выхода.
Для вывода информации используется оператор print, аргументы которого выражения и массивы.