
- •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.2. Спецификация программы
Для определения связи программы со своей спецификацией рассмотрим следующую модель применения программы (рис. 1). Вычисление по программе является необходимым звеном в цепочке действий некоторого реального процесса, который будем называть базовым процессом программы. Вычисление применяется для преобразования информации. Результат преобразования используется в дальнейших действиях процесса. Взаимодействие программы с процессом реализуется через входные и выходные информационные потоки программы. Части процесса, непосредственно взаимодействующие с вычисляемой программой и реализующие потоки, определяют окружение программы.
Рис. 1. Модель применения программы
Описание преобразования информации, реализуемого вычислением программы, называется спецификацией программы. Спецификация описывает связь между входными и выходными потоками информации. Связь, описываемая спецификацией, имеет объективный характер и отражает реально существующие отношения (зависимости) между объектами базового процесса. Связь либо отражает закон природы, выраженный в математической форме, либо является интерфейсом, спроектированным человеком. В любом случае связь является законом для программы.
В качестве спецификации может выступать любое описание на произвольном языке спецификации. Таким языком часто оказывается язык предметной области, используемый для описания базового процесса.
Проблематика спецификации программ обширна и здесь не рассматривается. Мы ограничиваемся лишь представлением некоторых свойств, отражающих основные связи между спецификацией и программой.
Свойство 1. Спецификация первична по отношению к программе. Действительно, спецификация появляется раньше программы. Спецификация необходима человеку для построения программы. Однако для программы, созданных не человеком, спецификация может и не существовать. Примером подобной программы является ДНК, за которой укрепился термин «биокомпьютер».
Свойство 2. Программа должна соответствовать спецификации. По определению входные и выходные информационные потоки программы должны соответствовать спецификации. Однако на практике возможны несоответствия между спецификацией и программой, что может иметь следствием неадекватный результат базового процесса, поскольку исполнение программы, как звено базового процесса, не выполнит своей функции.
Свойство 3. Будучи написанной, программа всегда существует и является строго определенной в силу строгости языка программирования. Спецификация, напротив, может быть нестрогой, неполной, устаревшей, отсутствовать или быть ошибочной. Этот парадокс типичен для современного программирования. Спецификация существует при разработке программы, однако формы ее представления могут быть самыми различными. Спецификация может быть математически строгой и при этом существовать лишь в голове разработчика программы. При исполнении программы спецификация не нужна. Поэтому модификации программы не всегда сопровождаются соответствующими корректировками спецификации программы.
Спецификация программы не нужна также и при разработке транслятора с языка программирования здесь программа рассматривается только в качестве теста для транслятора. Разумеется, описание языка программирования никак не касается спецификации. Как следствие, в представлении программиста спецификация часто становится чем-то необязательным. Отметим, что концепция спецификации появилась лишь при разработке больших программных комплексов в системном программировании, т. е. значительно позже первых программ.
Свойство 4. Программа на языке программирования является абсолютно точной и полной спецификацией самой себя. Следует из того, что язык программирования с абсолютной строгостью определяет процесс исполнения и результаты для каждого набора входных данных. Из-за отсутствия или неполноты спецификации программа может оказаться единственно существующей спецификацией. Отметим, что программа является неадекватной в качестве спецификации самой себя.
Свойство 5. Спецификация может быть невычислимой. Программа автоматически вычислима.