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

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

1. 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.

2. Hoare C. A. R. О структурной организации данных // Структурное программирование. М.: Мир, 1975. С. 98197.

3. Tennent R. D. Semantics of Programming Languages. Pentice Hall, 1991. 236 p.

4. Крицкий С. П. Трансляция языков программирования: синтаксис, семантика, перевод: Учеб. пособие. Р.-на-Дон.: РГУ, 2005.

URL: http://public.uic.rsu.ru/~skritski/scourses/Transl/Langs1.htm.

5. Гретцер Г. Общая теория решеток: Пер. с англ. 1982. 456 с.

7. Лавров С. С. Программирование. Математические основы, средства, теория. СПб.: БХВ-Петербург, 2001. 320 с.

8. Milner R. A Calculus of Communicating Systems // Lecture Notes in Computer Science. 1980.Vol. 92.

9. Hoare C. A. R.. Communicating Sequential Processes. Prentice-Hall. 1985.

5. Семантика языка предикатного программирования. Методы доказательства корректности предикатных программ

Язык CCP (язык исчисления вычислимых предикатов; см. разд. 4) определяет минимальное полное ядро для построения произвольного (чистого) языка функционального программирования в виде иерархической системы обозначений на базе конструкций ядра. Язык предикатного программирования P (Predicate programming language) конструируется как результат последовательного расширения цепочки языков (слоев):

CCP = P0  P1  P2  P3 ...  P.

Каждый очередной слой языка определяется в виде набора производных конструкций от предыдущего слоя.

Каждая новая конструкция C очередного слоя вводится как обозначение некоторой языковой композиции K предыдущего слоя. Логическая семантика LS(C) новой конструкции получается тождественным логическим преобразованием формулы LS(K), а операционная семантика  эквивалентным преобразованием метапрограммы для композиции K. Такой механизм построения логической и операционной семантики конструкции C гарантирует их согласованность в соответствии с определением (4.11). В большинстве случаев правила доказательства корректности конструкции C удается построить преобразованием соответствующих правил для композиции K. Предлагается две серии правил: R и L. Серия R определяет правила доказательства истинности постусловия из программы по формуле (2.10). Серия L определяет правила вывода программы из спецификации по теореме 2.1 тождества спецификации и программы; в этой теореме требуется однозначность программы и спецификации. Однозначность операторов программы гарантируется в случае однозначности базисных предикатов в соответствии с теоремой 4.2.

5.1. Язык p1: подстановка определения предиката на место вызова

Определим подстановку определения предиката A(xy) º K(xy) (см. (4.2)) на место вызова A(t: z), где x, y, t и z  наборы переменных. Результатом подстановки является конструкция { K(t: z) }, называемая блоком, которая вставляется в программу на место вызова A(t: z). Конструкция K(t: z) получается из K(xy) заменой всех вхождений переменных наборов x и y на соответствующие переменные наборов t и z. Здесь и далее мы полагаем, что для любого определения предиката параметры и локальные переменные имеют уникальные имена, не встречающиеся в других определениях программы. Кроме того, если K(xy)  оператор суперпозиции, то при построении блока { K(t: z) } дополнительно проводится переименование локальных переменных, обеспечивающее их уникальность. С учетом данных соглашений замена x и y на t и z в конструкции K(xy) не приведет к коллизиям. Определим

LS({ K(tz) })   LS(K(tz)) . (5.1)

Поскольку A(tz) º K(tz), то LS({ K(tz) }) º LS(A(tz)).

Исполнение блока { K(t: z) } в секции s определяется на метаязыке вызовом runBlock(s, { K(t: z) }). Тело процедуры runBlock представлено оператором

runStat(s, K(tz)) . (5.2)

Исходя из операционной семантики вызова предиката (4.14) нетрудно показать, что исполнение вызова A(t: z) эквивалентно исполнению блока { K(t: z) }. Таким образом, программа П’, получаемая из программы П подстановкой определения предиката на место вызова, эквивалентна программе П: исполнение любого предиката программы П’ на фиксированном наборе аргументов дает тот же результат, что и в программе П.

Язык программы, получающийся многократным произвольным применением подстановок определений предикатов на место вызовов, обозначим через P1. Язык P1 является расширением языка CCP. В языке P1 правой частью определения предиката является оператор суперпозиции (4.16), параллельный оператор (4.19) или условный оператор (4.20), причем в данных операторах на месте вызовов предикатов B и C может также находиться конструкция «блок». Блок может содержать блоки внутри себя. По построению конструкции языка P1 (операторы и блоки), полученные подстановками определений предикатов на место вызовов, обладают свойством согласованности.

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