Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
pred_prog_tutor.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.03 Mб
Скачать

Список литературы

1. Гончаров С. С. Математическая логика: Учеб. пособие. Новосибирск, 2007. 166 с.

2. Hopcroft JE., Motwani R., Ullman J. D. Introduction to Automata Theory, Languages, and Computation, 2nd ed. Addison Wesley, 2001. 521 p.

3. Кнут Д. Искусство программирования для ЭВМ. М.: Мир, 1976. Т. 1. С. 38–50.

4. Клини С. К. Введение в метаматематику: Пер. с англ. М.: 1957. 526 с.

5. Mathematical induction. URL: http://en.wikipedia.org/wiki/Mathematical_induction.

4. Язык исчисления вычислимых предикатов, его логическая и операционная семантика

Нас интересуют языки программирования, допускающие построение логической семантики. Во-первых, следует исключить из рассмотрения языки для реактивных систем, определяющих взаимодействующие параллельные процессы. Адекватной моделью для таких систем является алгебра процессов Р. Милнера [8] или Т. Хоара [9]. Проблематично построение логической семантики для императивных языков. Логическая семантика может быть построена для чистых языков функционального программирования. Каждой конструкции языка функционального программирования может быть сопоставлена эквивалентная формула на языке исчисления предикатов.

Множество вычислимых формул исчисления предикатов будем рассматривать в качестве общего базиса для всех языков, допускающих построение логической семантики. Вычислимые формулы будем записывать на языке исчисления вычислимых предикатов. Исчисление определяет набор базисных вычислимых предикатов, три базисных оператора (оператор суперпозиции, параллельный оператор и условный оператор) и механизм рекурсивного определения предикатов. Данный язык исчисления определен в форме языка программирования CCP (Calculus of Computable Predicates). Язык CCP определяет минимальный полный базис, достаточный, чтобы запрограммировать любой алгоритм, реализуемый в классе языков с логической семантикой. Язык неудобен для программирования и не предназначен для этого. Простота языка облегчает изучение математических свойств программ.

Язык CCP определяется в качестве минимального ядра для чистых языков функционального программирования. Система типов данных представлена в виде математической модели. Определяется логическая и операционная семантика языка. Доказывается теорема согласованности логической и операционной семантики.

4.1. Структура программы на языке ccp

Язык CCP (Calculus of Computable Predicates)  язык исчисления вычислимых предикатов, определяющий множество вычислимых формул исчисления предикатов. К языку предъявляются два требования: полноты и простоты. Язык CCP должен предоставлять достаточно полный набор конструкций, чтобы запрограммировать любой алгоритм, представимый на некотором чистом функциональном языке. Язык должен быть максимально простым, чтобы облегчить исследование свойств программ.

Программа на языке CCP состоит из набора определений предикатов. Определение предиката A º K сопоставляет вычислимую формулу K определяемому предикату A. Вычислимая формула K представляется в виде параллельного оператора, оператора суперпозиции или условного оператора. Всякий оператор определяет композицию двух предикатов. Вхождение предиката в составе оператора называется вызовом предиката. Вызов предиката имеет следующее представление:

(d1, d2, …, dn: e1, e2, …, em) , (4.1)

где n  0, m > 0,   имя предиката или переменной предикатного типа (см. разд. 4.2); d1, d2, …, dn  имена переменных, называемых аргументами вызова; e1, e2, …, em  имена переменных, различающихся между собой и отличных от d1, d2, …, dn. Переменные e1, e2, …, em называются результатами вызова. Вычисление предиката по значениям аргументов определяет значения результатов. Для предиката (4.1) будем также использовать компактное обозначение (d: e), где d и e обозначают наборы имен d1, d2, …, dn и e1, e2, …, em соответственно.

В случае, когда требуется вычислить логическое значение предиката  (т. е. набор e пуст), будем использовать в качестве результата дополнительный параметр b логического типа и записывать предикат в виде (d: b). Предикат (d: e) в случае пустого набора d (т. е. без аргументов при n = 0) соответствует константе. Выражений 12 и констант нет в языке CCP.

Определение нового предиката есть конструкция вида

A(x: y) º K(x: y) . (4.2)

Здесь A обозначает имя определяемого предиката; x и y  наборы переменных, причем все переменные различны; K(x: y) обозначает параллельный оператор, оператор суперпозиции или условный оператор. Переменные набора x называются аргументами предиката, а набора y  результатами предиката. Определение предиката может быть рекурсивным (см. разд. 4.11).

Произвольный предикат языка CCP либо имеет определение вида (4.2), либо является базисным вычислимым предикатом, используемым для константы и элементарной операции. Каждый тип данных однозначно определяется некоторым набором базисных предикатов. Совокупность всех базисных предикатов определяет систему типов данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]