Выдержки из лекций по теме:
Семантика Языков программирования для IB-части Экзамена по Информатике Доктора Эндрю М. Питтса Компьютерная Лаборатория Кембриджского Университета
© . М. Pitts, 1997-2000 Первое издание 1997. Пересмотренный 1998,1999, 1999 (повторно), 2000. _A
Содержание Изучение второго Руководства 1 Введение ………………………………………………………………………………5 1.1 Операционная семантика...........................................................................................7 1.2 Абстрактная машина.................................................................................................. 8 1.3 Структурированная операционная семантика........................ ……………………12 2 Индукции …………………………………………………………………………….13 2.1 Примечание относительно абстрактного синтаксиса............................................ 13 2.2 Структурная индукция.............................................................................................. 15 2.3 Правила, основанные на индуктивных формулировках (правилах).................... 17 2.4 Правило индукции..................................................................................................... 20 2.5 Упражнения.................................... …………………………………………………21 3 Структурная Операционная Семантика ……………………………………….. 21 3.1 Семантика перехода LC ............................................................................................ 21 3.2 Семантика оценки LC................................................................................................ 26 _
2
Изучение Руководства Эти примечания предназначены для того, чтобы провести 12 лекций по семантике языка программирования для IB части экзамена по Информатики Кембриджского Университета. Целью курса является внедрение структуры, использующей операторный подход к программированию языка семантики. Он показывает, как используется формализм для определения значения конструирования некоторого простого языка программирования и формального рассуждения о семантических свойствах программ. По окончании курса Вы должны: — быть знакомыми с представлениями, основанными на правилах операционной семантики какой-либо простой команды, функциональным и интерактивным построением программ; — уметь доказывать свойства операционной семантики, используя различные формы индукции (математической, структурной, и на основе правил); — и быть знакомыми с некоторыми, основанными на операторах, идеями семантической эквивалентности программных выражений и их основных свойств. Зависимость между материалом в этих примечаниях и лекциях будет подобна соответствию: раздел 1 2 3 4 5 6 лекции 1 2 3–5 6 7–9 10–12.
Экзаменационные вопросы. Из многих экзаменационных вопросов прошлых лет по семантике языка программирования, здесь представлены те, которые соответствуют текущему курсу. Год 00 00 99 99 98 98 97 97 96 95 94 93 92 91 90 90 88 88 87 Бумага 5 6 5 6 5 6 5 6 5 6 7 7 7 7 7 8 2 4 2 Вопрос 9 9 9 9 12 12 12 12 12 12 13 10 9 5 4 11 1 2
†1 ‡
† не часть (c) ‡ не часть (b)
К тому же, некоторые упражнения даются в конце большинства разделов. Усложненные вопросы помечены ∗.
Рекомендуемая литература •
Winskel, G. (1993). The Formal Semantics of Programming Languages. MIT Press. Это превосходное введение в операционную и денотационную семантики языков программирования. Что касается этого курса, важными главами являются 2–4, 9 (разделы 1, 2, и 5), 11 (разделы 1, 2, 5, и 6) и 14.
•
Hennessy, M. (1990). The Semantics of Programming Languages. Wiley. Книга имеет подзаголовок «Элементарное Введение, использующее Структурную Операционную Семантику», а также очень хорошее введение во многие из ключевых разделов этого курса, представленное неспешным и более детальным способом, чем книга Winskel. К сожалению, эта книга распродана.
3
Последующее чтение •
Gunter, C. A. (1992). The Semantics of Programming Languages. Structures and Techniques. MIT Press. Это текст уровня дипломированного специалиста, содержащий много материалов, не охваченного в этом курсе. Я упоминаю его, потому что его первая, вводная глава заслуживает прочтения.
•
Plotkin, G. D. (1981). A structural approach to operational semantics. Технический отчет DAIMI FN19, Университет Орхуса. В начале этих примечаний представлен «структурный» подход к операционной семантике — подход, подчеркнутый в этом курсе — но изложенный исключительно в терминах транзитивных отношений (семантика «маленького шага»), а не оценочных отношений (семантика «большого шага», «естественная» или «относительная» семантика). Несмотря на то, что эти примечания отчасти устарели и их сложно достать (в Библиотеке Компьютерной Лаборатории хранится копия), они - все еще источник интересных примеров.
•
Два эссе: Hoare, C. A. R.. Алгебра и Модели. Milner, R. Семантические Идеи в Вычислительной технике. В: Wand, I. и R. Milner (Редакторы) (1996). Вычислительная техника завтра. CUP. Два доступных эссе, придающих различные перспективы семантике вычислений и языкам программирования.
Примечание Материал был взят из нескольких различных источников, включая книги, упомянутые выше, предыдущие версии этого курса, изложенные автором и другими, и подобные курсы других университетов. Любые ошибки являются авторскими. Список исправлений будет доступен на webстранице курса (следуйте ссылке www.cl.cam.ac.uk/teaching/). Лекционная форма оценки включена в конце примечания. Пожалуйста, найдите время, чтобы заполнить и отправить ее. В альтернативном случае, заполните электронную версию формы через URL (www.cl.cam.ac.uk./cgi-bin/lr/login).
Эндрю Питтс (
[email protected]) 4
1 Введение 1.1
Операционная семантика
Некоторые аспекты дизайна и использования языков программирования представлены на Слайде 1. Математические инструментальные средства для точного определения синтаксиса (регулярные выражения, контекстно-свободные грамматики, БНФ, и т.д) к настоящему времени хорошо осознаны и широко использованы: Вы можете встретить теорию по этому аспекту в Части IA курса Регулярные Языки и Конечные Автоматы и увидеть, как она использована в IB-части курса Построение Компиляторов. По контрасту, эффективная технология для точного определения поведения программы во время выполнения, оказалось значительно сложнее для развития. Именно то, что описание языка программирования очень часто дает только неформальные определения (на естественном языке) значений различных конструкций, было основой примера фрагмента кода. Но есть серьезные основания двигаться дальше и дать полное формальное математическое определение семантики языка; некоторые из этих оснований резюмированы на Слайде 2.
Непосредственные составляющие определения языка программирования
Синтаксис. Алфавит символов и формального описания правильно построенных выражений, фраз, программ, и т.д. Прагматика. Описание и примеры использования различных особенностей языка. Реализация языка (компиляторы и интерпретаторы). Вспомогательные инструментальные средства (программы синтаксического контроля, отладчики, и т.д.). Семантика. Значение особенностей языка (например, изменение их поведения во время выполнения) – в большинстве случаев лишь неформально указанно, либо указанно через предыдущую вершину.
Слайд 1
5
Направления использования формальной, математической семантики
Проблемы реализации. Машинно-независимая специфика поведения. Корректность программного анализа и оптимизации. Проверка. Базис методов для размышления о программных свойствах и программной специфике. Дизайн языка. Может привести к легкой неоднозначности и непредвиденной тонкости в конструкциях языка программирования. Математические инструментальные средства, используемые для семантики, предлагают новые полезные стили программирования. (Например, влияние Церковного лямбда-исчисления (приблизительно 1934) на функциональное программирование).
Слайд 2
Стили семантики
Денотационные. Значения для программных выражений, определены абстрактно, как элементы некоторой подходящей математической структуры. Аксиоматические. Значения для программных выражений, определенны косвенно через аксиомы и некоторые логические правила программных свойств. Операционные. Значения для программных выражений, определенны в терминах шагов вычисления, которые выявляются по ходу выполнения программы.
Слайд 3
6
1.1 Операционная семантика Некоторые различные подходы к семантике языка программирования изображены на Слайде 3. Этот курс связан с Операционной Семантикой. Денотационные подход (и его отношение к операционной семантике) представлен во второй части курса по Денотационной Семантике. Примеры аксиоматического подхода раскрыты во второй части курса по Специфике и Проверке I. У каждого подхода есть свои преимущества и недостатки и между ними существуют прочная связь. Однако, это оптимально для начинания с операционной семантики, потому что проще связать операционные описания с практическими отношениями и математическая теория, лежащая в основе таких описаний, вполне конкретна. Например, некоторые из операционных описаний в этом курсе будут выражены в терминах простых понятий транзитивных систем, изображенных на Слайде 4. Определение системы перехода
Система перехода определена • классом Config, и • бинарным отношением →
Config x Config.
Элементы Config часто называют конфигурациями (или «состояниями») и бинарное отношение характеризуется помещением бинарного оператора между компонентами операции, то есть
означают, что c и c ′ связаны →.
Слайд 4
Определение 1.1.1. Здесь представлены различные примечания и терминологии связанные с системой перехода (Config, →). (i)
→ * обозначает бинарное отношение Config, которое является рефлексивно-транзитивным замыканием →. Другими словами c → * c ′ выполняются в случае для некоторого с0..., cn
(ii) (iii)
c
Config (где n ≥ 0 ; в случае, когда n = 0, c = c′).
↛ означает, что нет никакого c ′
_
Config, для которого выполняется c → c ′.
Система перехода называется детерминированной если для всех c, c1, c2
Config
(Термин «моногенный» возможно является наиболее подходящим, но реже используемым для этого свойства.) (iv)
Очень часто структура системы перехода дополнена отмеченным подмножеством I и T из Сonfig, элементы которого называются начальными и конечными конфигурациями соответственно. («Последний» - используется, как синоним для «конечный» в данном контексте). Идея в том, что пара (i, t), где i I, t T и i →* обозначает «пробег» системы 7
перехода. Обычно, при упорядочивании, когда c удовлетворяющие c ∉ T и c
↛,
T, тогда c
↛; конфигурации,
называются промежуточными.
1.2 Абстрактная машина Из истории, первый подход представления математически-строгой операционной семантики в языки программирования был в терминах адекватной абстрактной машины – транзитивной системы, которая является интерпретатором языка программирования. Примером этого служит простой Язык Команд, называемый LC11. Абстрактная машина, которую мы описываем, часто называется SMC-машиной (Plotkin 1981, 1.5.2). Название является результатом того, что ее конфигурации могут быть определены, как тройка (S, М, C), где S – Стек (промежуточных и конечных) значений, М - Память, то есть распределение целых чисел на некотором конечном множестве переменных, и C - Стек управления выражениями, которые будут определены. Таким образом, название является несколько произвольным. Хотя мы предпочитаем называть состояния блоков памяти и упорядочивать компоненты конфигурация по-другому, но, все же, мы придерживаемся традиционного названия «SMC». LC Синтаксис
Выражения
Команды
Целочисленные выражения
Булевы выражения
Слайд 5
LC- очень простой язык для описания (структурным способом) вычисления алгоритмов на числах через манипуляцию состояний. В этом контексте мы можем выбрать «состояние», включающее в себя конечное число ячеек (регистров) для хранения целых чисел. Целочисленные и булевы выражения из LC являются отображением для целочисленных и булевых значений определяемых состоянием; LC команды являются отображением для операций, изменяющих состояние. Синтаксис LC фраз приведен на Слайде 5, где ____
, набор целых чисел; , набор булевых переменных;
1 LC по существу такой же, как IMP в Winskel 1993, 2.1 и WhileL в Hennessy 1990, 4.3. 8
фиксированный, бесконечный набор символов, чьи элементы мы будем называть переменными (также обычно используется термин «ячейка»), потому что они обозначают ячейки для хранения целых чисел — целочисленное выражение !l обозначает целое число, записанное в ℓ; _
фиксированное, конечное множество целочисленных бинарных операторов; фиксированное, конечное множество булевых бинарных операторов; SMC-машинные конфигурации
являются тройками
состоящими из • стека управления •
стека (промежуточных и конечных) значений r:: =nil | Pr | lr стека памяти, s, который по определению является частично вычисляемой функцией отображения переменных в целые числа, определенного только конечным множеством переменных.
•
Слайд 6
Набор T конфигураций SMC машины представлен на слайде 6, а его транзитивное отношение изображено на Рисунке 1. Не сложно увидеть, что это - детерминированная система перехода: голова стека управления c однозначно определяет, какой тип перехода следующий (для всех), если голова не if или while, то голова выражения стека p, определяет какой переход применить. SMC-машина может быть использована для определения влияния LC команд (в свою очередь включающих в себя вычисление целых и булевых LC выражений) на состояние. Мы определяем: начальные конфигурации должны иметь форму , где C – команда LC и s состояние; конечные конфигурации должны иметь форму , где s - состояние. Тогда наличие прогона в SMC-машине, , обеспечивает точное определение того, что подразумевается под фразой «C, перешедшее в состояние s, в случае успешного завершения порождает состояния s ′». Некоторые из переходов в примере прогона показаны на Слайде 7. _
9
(Итерация) (Композиция) (Переменная) (Константа) (Оператор) (До тех пор, пока - истина)
…. ___________________________________________________________________________
где
Слайд 7
Целочисленные выражения
Константа Переменная(1) Композиция Оператор (2) Булевы выражения Константа Композиция Оператор (2)
Команды Skip Присваивание Назначение(3) Условное выражение If-True Упорядочение 10
Итерация While-True While-False
Примечания (1) Дополнительные условия подразумевают: частично вычислимая функция s определена на ℓ и имеет значение n. (2) Дополнительные условия подразумевают, что n и b (целое и булево) - значения операции iop и bop в целочисленных n1 и n2. SMC-машина абстрактно анализирует, как рассчитаны в действительности основные арифметические операции. Примечание: порядок параметров (n2*n1) левосторонний! (3) Состояние s [ℓ→ n] - конечная частично вычисляемая функция, которая отображает ℓ в n, в противном случае действует подобно s.
Рисунок 1: SMC-машинные переходы
Неформальная Семантика Вот - неформальное определение While B do C используемое у B. W. Kernighan и D. М. Ritchie, Язык программирования С (Prentice-Hall, 1978), стр. 202: ________________________________________________ Команда C выполняется неоднократно до тех пор, пока значение выражение B истинно. Проверка происходит перед каждым выполнением команды. ________________________________________________
Слайд 8
Цели Структурной Операционной Семантики Плоткина
Транзитивные системы должны быть структурированы путем отражения структуры языка: возможные переходы для составного выражения должны быть индуктивно построены от переходов к составной части подвыражения. В то же время, существует один подход увеличения ясности семантических определений путем минимизации роли специальных, анализирующих выражения переходов и становлением наиболее простым (абстрактным), по возможности, строением системы перехода.
11
Слайд 9
1.3 Структурированная операционная семантика SMC-машина является наиболее подходящей для представления абстрактных машин для пошагового выполнения программ. Она обладает недостатками, типичными при подходе к операционной семантике, основанном на использовании абстрактных машин. • Только некоторые из переходов действительно выполняют вычисления, остальные участвуют в анализе выражения. • Существует множество разветвленных структур, которые (мы надеемся), никогда не смогут быть достигнуты из начального состояния. (Например ). • SMC-машина не формализует непосредственно наше интуитивное понимание контрольной конструкции (Пример такого цикла – while, представлен на слайде 8). Скорее, это более-менее очевидно корректируется благодаря интуитивному понимания. • Машина имеет “тенденцию разбивать синтаксис на части или, во всяком случае, «блуждать где-то рядом с синтаксисом», создавая различные сложные символьные структуры, которые не выглядят, как должным образом поставленные требования к языку непосредственно” (цитата Плоткина 1981,страница 21). По этой причине, весьма тяжело использовать машину как основание для формального размышления о свойствах LC программ. Плоткин (1981) разработал структурный подход к операционной семантике, основанный на транзитивных системах, который успешно избегает многие из этих ошибок. Его суть отображена на Слайде 9. Этот подход — относящийся к связанными событиями,— основан на отношениях оценки вместо отношений перехода (Kahn 1987; Milner, Tofte и Harper 1990), что мы и отобразим в этом курсе, связанным с множеством маленьких языков программирования, из которых LC является наиболее простым. Языки выбраны таким образом, чтобы они были маленькими и с «идеализированным» синтаксисом, в порядке выявления более ясной операционной семантики различных особенностей, или комбинации из реализованных ими особенностей. В качестве примера спецификации структурных операционных семантик для полномасштабного языка, смотрите. (Milner, Tofte, и Арфист 1990).
2 Индукция. Индуктивные определения и доказательства с использованием индукции - всеобьемлющие в структурном подходе к операционной семантике. Хорошо знакомый вам (надеемся!) принцип Математической Индукции и эквивалентный ему Принцип Наименьшего числа отображены на Слайде 10. Большинство методов используемой нами индукции, могут быть доказаны с помощью Математической Индукции. Тем не менее, удобно извлечь из него множество индуктивных принципов, более адекватных к структурам, с которыми мы имеем дело. Этот раздел кратко дает обзор некоторых идей и методов; много примеров их использования будут встречать повсюду в остальной части курса. Помимо важности этих методов для предмета, они также должны быть важны и для Вас, т.к. изучение вопросов этого курса предполагает способность приводить доказательства, используя различные индуктивные методы.
12
Математическая Индукция
Для любого свойства Ф (х) из натуральных чисел , удовлетворяющих условию
достаточно доказать, что
Эквивалентно: Принципу Наименьшего Числа: любое непустое подмножество имеет минимальный элемент.
Слайд 10
2.1 Примечание относительно абстрактного синтаксиса Когда кто-то дает семантику для языка программирования, он должен ориентироваться только на абстрактный синтаксис языка, то есть представление в виде дерева грамматического разбора выражений является следствием лексического и синтаксического анализов текста программы. Соответственно, в этом курсе, при рассмотрении различных примеров языка, мы будем иметь дело только с абстрактными синтаксическими деревьями.1 Таким образом, подобное этому определение на Слайде 5 действительно означает определение LC выражений не как строки лексем, а скорее как конечные помеченные деревья. В этом случае конечные вершины деревьев помечаются, как элементы множества
(используя примечание, введенное в Разделе 1.2), в то время как не конечные вершины деревьев помечены, как элементами множества
Пример такого дерева дается на Слайде 11, вместе с неофициальным текстовым описанием, который мы будем постоянно использовать. В текстовом описании используются круглые скобки, чтобы однозначно показать, какое дерево синтаксиса упоминается; а различные вставки и соединения используются для удобства чтения. С такой точки зрения об абстрактных синтаксических деревьях, цель грамматики, как на Слайде 5 определить, какие символы могут быть узловыми, а также номер и тип потомка для каждого вида узла. Таким образом, грамматика аналогична SML объявлению трех взаимно рекурсивных типов данных, представлена на Слайде 12. Соответственно мы будем часто относиться к элементам (не конечных) вершин синтаксических деревьев как к конструкторам, а элементамкорневых узлов дерева, как к наиболее удаленным конструкторам. 1 В Разделе 5, когда мы рассматриваем связывающую конструкцию, мы будем даже более абстрагировать и идентифицировать деревья только как отличие до переименования связанных переменных.
13
Абстрактное синтаксическое дерево LC команд
Текстовое описание:
Слайд 11
тип данных SML LC выражений
где int, loc, iop и bop являются подходящими, предопределенными числовыми типами данных, переменными, целочисленными и булевыми операциями. Слайд 12
2.2 Структурная индукция Принцип Структурной Индукции для какого-либо набора конечных помеченных деревьев гласит, что доказать то, что все деревья обладают свойтсвами, все равно что показать: основные случаи: существуют свойства для каждого типа листа (все равно что дерево с одним элементом) и шаг индукции: для каждого конструктора дерева c (принимающего n ≥ 1 аргумент), если существуют свойства для любых деревьев t1, …, tn, тогда они также существуют для дерева c (t1, …, tn).
14
Например, принцип для целочисленных LC выражений показан на Слайде 13. Отсюда должно быть понятно, как формулировать принципы для других множеств синтаксических деревьев, таких как множество всех LC выражений. Структурная Индукция для целочисленных LC выражений
Доказать, что свойств Ф (Е) существует для всех целочисленных LC выражений E, значит доказать: основные случаи: существует Ф (n) для всех целых чисел существует
для всех переменных
и
;и
шаг индукции: для всех целочисленных выражений E, E ′ и операторов
, если существуют Ф (Е) и Ф (Е ′), тогда
Слайд 13
Структурная индукция может быть доказана обращением к Математической Индукции, полагая, что рассматриваемые деревья конечны, то есть каждое дерево имеет конечное число узлов. Предположим, мы пробуем доказать, что свойство Ф (Е) существует для всегх целочисленных LC выражений E, учитывая отмеченные утверждения основные случаи и шаг индукции в Слайде 13. Для каждого , определить для всех E не больших, чем n узлов, существует Ф (Е). Так как все E обладают конечным множеством узлов, мы имеем
Тогда может быть доказано методом Математической Индукции, используя основные случаи и шаг индукции из Слайда 13. Действительно Ф′(0) автоматически существует (так как нет никаких деревьев с нулевыми узлами), а если Ф′(n) существует, и E имеет не более, чем n+1 узлов, то • Любое E является листом – так что Ф (Е) существует в соответствии с основными случаями, • или форма E 1 iop E 2 - в этом случае E1 и E2 имеют каждый не более n узлов, и из P′(n) мы имеем Ф(Е1) и Ф(Е2) и следовательно Ф(Е) в соответствии с предположением шага индукции. Таким образом Ф′(n+1) существует, если Ф′(n) существует, что и требовалось доказать, используя Математическую Индукцию. Вот - пример использования Структурной Индукции. Пример 2.2.1. Предположим, что E - целочисленное LC выражение, и s – состояние, область определения которого содержит переменную loc(E) лежащую на E. (Вспомним, что LC состояние является конечной частично вычислимой функцией от переменных до целых чисел.) Ссылаясь на SMCмашину, описанную в разделе 1.2, мы утверждаем, что есть целое число n , 15
существующее для любого стека управления с и стека выражений p. (Фактически n однозначно определяется из E и s, потому что SMC-машина – это детерминированная система перехода.) Доказательство. Мы должны доказать индукцию по структуре E.
E.Ф(Е), где Ф определена из Слайда 14, и мы используем
Основные случаи: Ф(n) существует из Константы на рисунке 1; Переменная подразумевает, что Ф(!ℓ) тоже существует, где n=s(ℓ) (тут мы нуждаемся в предположении loc(E ) dom(s)) Шаг индукции: предположим Ф(Е1) и Ф(Е2) существуют. Тогда мы имеем: <(E1 iop E2) · c, p, s> → < E1 · E2 · iop · c,p,s> →* < E1 · iop · c,n1 · p,s> →* < iop · c,n1 · n1 · p,s> → < c,n · p,s>
(Композиция) из рисунка 1 для некоторого n1 , из Ф(Е1) для некоторого n2 , из Ф(Е2) (Оператор) из рисунка 1, где n=n1 iop n2.
(Обратите внимание на способ, которым мы выбрали условие в определении Ф: в середине второго →* шага индукции мы нуждаемся в применении «гипотезы об индукции» для E1 и E1 со стеком управления и стеком выражения отличными от тех c, p, с которых мы начали.)
Завершение SMC-машины в выражениях
Определяем Ф(Е), чтобы:
где loc (E) обозначает конечное множество переменных, входящих в E, и dom (s) обозначает область определения s. Тогда E .Ф(Е).
Слайд 14
16
2.3 Правила, основанные на индуктивных формулировках. Аналогично доказательству свойств, при помощи индукции, мы должны будем создать индуктивно определенные подмножества некоторого данного множества, называемого T. Метод и терминология, которую мы используем, заимствованы из математической логики, где теоремы конкретной формальной системы созданы индуктивно, начиная с некоторых аксиом, неоднократно применяя правила вывода. В этом случае аксиома, α, всего лишь определяет элемент α T множества. Правило, r, является парой (H, c) где • H конечное, непустое1 подмножество T (элементы H называются гипотезами правила r); и • c - элемент T (названный заключением правила r).1 Индуктивно определенное подмножество множества T
Данные аксиомы А и правила R по T, доказывают, что конечное дерево, узлы которого являются элементами T означает, что: • каждая конечная вершина является аксиомой а A • для любой не конечной вершины, если H - множество дочерних узлов и c - узел, тогда (H, c) R. По определению, подмножество T, индуктивно определенное аксиомами и правилами (A, R), состоит из таких t T, которые являются корневыми узлами.
Слайд 15
Слайд 15 дает определение подмножества Т индуктивно определенное, как набор аксиом и правил, в терминах понятия «доказательство»11. Например
является деревом доказательства, где t5, t 6 и t7 – аксиомы, а ({t1, t2}, t0), ({t3, t4}, t2), ({t5, t6}, t3) и ({t7}, t4) правила. В этом контексте мы преобразуем такие деревья к следующему виду
1 Правило с пустым множеством гипотез играет ту же роль что и аксиома. 1 Если допустить правила с бесконечным множеством предположений, необходимо рассмотреть доказательства, не обязательно являющиеся конечными деревьями, но обоснованными деревьями - это значит, что любой путь от узла к конечным вершинам дерева должен быть конечным.
17
Корневой узел дерева доказательства называется заключением доказательства. Если взять доказательство, заключение которого - t, то говорится, что t доказывается из аксиом и правил (A, R), или, что t выводится, или просто что t верно. Совокупность всех таких t - по определению подмножество индуктивно определенное аксиомами и правилами (A, R). _
Пример 2.3.1 (Оценочное отношение для LC выражений). Пример 2.2.1 показывает, что SMC-машинная оценка целочисленного LC выражения зависит только от выражения, требующего оценку, и текущего состояния. Вот - индуктивно определенное отношение, которое непосредственно фиксирует эту оценку (то есть без надобности в управляющих стеках и стеках выражений). Мы применим это ко всем LC фразам в следующем разделе. Отношение оценки, ⇓, является подмножеством множества всех троек (E, s, n), где E целочисленное LC выражение, s - состояние, и n - целое число. Это индуктивно определено аксиомами и правилами на Слайде 16, где мы используем инфиксное примечание E, s ⇓ n вместо того, чтобы написать (E, s, n)
⇓.
Здесь, например, доказательство того, что (! ℓ * 2) — 3, {ℓ → 4} ⇓ 5 – является правильным примером отношения оценки:
Отношение оценки для LC выражений может быть индуктивно определено аксиомами
и правилами
где E1, E2 - целочисленные LC выражения, s - состояние, ℓ - переменная, и n1, n2, n - целые числа.
Слайд 16
Это наш первый (хотя и очень простой) пример структурной операционной семантики. Структурной, потому что аксиомы и правила для доказательства, являющиеся экземплярами (1)
E, s ⇓ n 18
индуктивно определенного отношения оценки, следуют за выражением E. Так как (1) имеет доказательство, мы можем восстановить его от обратного, руководствуясь структурой E: если E целое число или переменная, доказательством должна быть только аксиома, тогда как, если E является составным, доказательство должно заканчиваться применением соответствующего правила. Примечание. Аксиомы и правила, представленные на Слайде 16, и всюду по курсу, должны быть «схематичными» — в том смысле, например, что существует одна аксиома вида n, s ⇓ n для всевозможных вариантов из целого числа n и состояния s. Выражение, начинающееся «если... », определяющее вторую аксиому и правило, часто называют дополнительными условиями. Они накладывают ограничения на то, чтобы иллюстрация схематического представление аксиом или правил соответствовала фактическим аксиомам или правилам. Например, !ℓ, s⇓n - аксиома только данной конкретной системы для некоторого конкретного выбора переменной ℓ, состояния s и целого числа n, обеспечивает, что ℓ находится в области определения s и значение s в ℓ есть n.
Правила Индукции Данные аксиомы и правила R множества T, свидетельствуют о том, что I является подмножеством T, индуктивно определенного (A, R) (сравни Слайд 15). Приведенное свойство Ф(t) элементов t T, доказывает, что Этого достаточно, чтобы показать замкнутость по аксиомам: Ф(a) фиксировано для всех a
A; и
замкнутость по правилам: для каждого правила
Слайд 17
2.4 Правило индукции Предположим, что (A, R) - некоторые аксиомы и правила множества T и что I T является подмножеством индуктивно определенным ими. Принцип Правила Индукции для I представлен на Слайде 17. Он может быть доказан обращением к Математической Индукции аналогичным способом, которым мы доказывали Структурную Индукцию в Разделе 2.2: замкнутость I по аксиомам и правилам позволяет доказать если t - результат доказательства с n, меньшим количества узлов, тогда Ф(t) существует по индукции n. И, так как любое доказательство - конечное11 дерево, то t I.Ф (t) тоже существует. 1 Вследствие того, что мы рассматриваем только правила с конечным множеством гипотез. Без 19
Пример 2.4.1. С помощью Правила Индукции покажем, что E, s ⇓ n подразумевает, что в SMC-машине существует для любого стека управления с и стека выражений p. Доказательство. Пусть Ф (E, s, n), является свойством Согласно Слайду 17 мы должны показать что, Ф (E, s, n) замкнут по аксиомам и правилами (Слайд 16.) Замкнутость по аксиомам: Ф(E, s, n) существует - Константа на Рисунке 1; и если ℓ dom(s) и s(ℓ) = n , то Переменная подразумевает, что и Ф (ℓ, s, n) существует. _
Замкнутость по правилам: Мы должны показать
и это следует из шага Индукции в доказательстве из Примера 2.2.1.
2.5 Упражнения Упражнение 2.5.1. Дайте пример SMC-машинной конфигурации, в которой присутствует бесконечная последовательность переходов. Упражнение 2.5.2. Рассмотрите подмножество D множества определенных следующими аксиомами и правилами
пар натуральных чисел индуктивно
Используя Правило Индукции, докажите
(где * обозначает умножение). Используйте Математическую Индукцию по k, чтобы показать обратное тому, что если n ′ = k*n, тогда (n, n ′) D. Упражнение 2.5.3. Пусть (Config, →) – транзитивная система (сравните слайд 4). Дайте индуктивное определение подмножества Config Config, состоящего из рефлексивно-транзитивного замыкания →. Используйте Математическую Индукцию и Правило Индукции, для доказательства того, что отношение в вашем определении аналогично отношению в Определении 1.1.1 (i).
3 Структурная Операционная Семантика В этом разделе мы рассмотрим структурную операционную семантику для LC языка, описанного в разделе 2.1. Определение будет дано в рамках индуктивно определенного транзитивного соотношения и в рамках индуктивно определенного оценочного соотношения. Индуктивные принципы предыдущего раздела необходимы, чтобы связывать эти два подхода. этого условия, Правила Индукция допустимы, но не обязательно сводимы к Математической Индукции.
20
3.1 Транзитивная LC семантика. __
Обратимся к отношению LC, выражений на слайде 5. Отметим так же, что позиция - по определению, - есть конечная частично вычисленная функция от переменных к целым числам, мы допускаем возможность, что множество позиций где s определена - dom(s), где нет— мы просто записываем для этого s. Определяем транзитивную систему для LC, как конфигурацию пары , состоящий из Р выражений и s состояний. Транзитивное соотношение точно определено при помощи правил и аксиом на слайдах 18, 19, 20. Правило образом, dom(s [ℓ→ n]) = dom(s) {ℓ} и:
показывает состояние s, при переходе ℓ к n. Таким
Заметим, что аксиомы и правила для
→
соответствуют синтаксической структуре выражения P. Аксиом и правил не существует для при Р- целое число, булево, skip или P =! ℓ, где ℓ - переменная не из области определения s. Первые три из этих альтернатив определены как конечные LC конфигурации; 4-я альтернатива - основной пример промежуточной конфигурации. Это показано на слайде 21.
Транзитивное LC Отношение — выражение
Слайд 18
21
Транзитивное LC Отношение — : =and;
Слайд 19
Транзитивное LC Отношение — условное выражение & while
Слайд 20
22
Конечные и промежуточные LC конфигурации Конечные конфигурации - по определению Конфигурация
промежуточная, тогда и только тогда, когда она не конечная, но (Например,
промежуточные если
)
Слайд 21
Пример последовательности правильных переходов показан на слайде 22. Сравнивая с работой SMCмашины, описанной на слайде 7, каждый переход делает несколько настоящих вычислений, нежели простой перебор символов. С другой стороны, правильность каждого перехода вытекает из определения SMC-машины (слайд 7), в то время как переход на слайде 22 должен быть доказан из аксиом и правил на слайдах 18-20. Например, доказательство второго перехода представлено ниже:
К счастью, структурная природа аксиом и правил позволяет с легкостью проверить правильность перехода
→
: попытаться доказать от обратного, где на каждом уровне синтаксическая структура P показывает, какую аксиому или правило нужно использовать, чтобы вывести этот переход.
23
Слайд 22
Некоторые свойства LC транзакций
Определение. Если
→
и
→
, тогда P ′ = P ′′ и s ′ = s ′′. Тематическое преобразование. Если
→
, то P ′ имеет тот же самый тип (команда/целочисленное выражение /булево выражение), что и P. Выражения без побочных эффектов. Если
→
, где P является целочисленным или булевым выражением, тогда s = s ′.
Слайд 23
Некоторые свойства LC транзитивных отношений показаны на слайде 23. Они могут быть доказаны с помощью правила индукции (смотреть слайд 17). Например, для доказательства детерминированности транзитивной системы, достаточно доказать для Ф(P, s, P ′, s ′)
Необходимо доказать, что каждый правильный переход
→
удовлетворяет Ф(P, s, P ′, s ′), и по принципу Правила Индуктивности следует проверить соответствие Ф(P, s, P ′, s ′), правилам и аксиомам, определяющим отношение → Мы даем аргумент замкнутый по правилу Доказательство замкнутости по правилу
.
. Допустим Ф(E,s,E′,s′) существует . Надо доказать, что 24
Ф(ℓ := E,s, ℓ := E′,s′) существует , т.е <ℓ := E,s>→<ℓ := E′,s′> (которое следует за Ф(E,s,E′,s′) по правилу ) и если
, то P′′ = (ℓ:= E′ ) и s′′ = s′ Теперь последний шаг в доказательстве (2) может быть только
или
(в
, пока Е имеет некоторое целое соответствии с ℓ:= E). Но на самом деле он не может быть значение n; итак (см. слайд 21), что противоречит Ф(E,s,E′,s′).** Следовательно последний шаг для доказательства (2) использует
и отсюда
для некоторых Е'', удовлетворяющих: Затем по определению (E,s,E′,s′), (4) предполагаем, что E′ = E′′ и s′ = s′′ и следовательно из (3) P′′ = ℓ := E′′ = ℓ := E′ Таким образом имеем Ф(ℓ := E,s, ℓ := E′,s′ ) , как и требовалось. _
Замечание 3.1.1 Заметим, что необходима некоторая предусмотрительность в выборе свойств при использовании Правила Индукции. Например, если мы определим Ф(P,s,P′,s′) как
Что будет не верным в доказательстве замкнутости по правилу доказательстве помеченный *.]
? [Подсказка: смотри пункт в
3.2 Оценочная LC семантика. Если заданы выражение Р и состояние s, если транзитивная LC система детерминированна, существует однозначная последовательность переходов, начиная с
и максимальной длины:
Она называется оценочная последовательность для
. В общем, для детерминированных языков есть три возможных типа оценочной последовательности, показанных на слайде 24. Для LC, промежуточной последовательности можно избежать путем ограничения внимания к «чувствительным» конфигурациям, удовлетворяющим loc(P) dom(s): смотри упражнение 3.5.4. LC, конечно, обладает дивергентной оценкой последовательностей - простейший возможный пример дан на слайде 25. В этом разделе мы даем индуктивное определение конечным оценочным *
См. Замечание 3.1.1.
25
последовательностям, т.е в отношении *
→
- конец.
Типы оценочной последовательности → → → … Конечная: в конечном счете, последовательность достигает конечной конфигурации (смотри Слайд 21). Промежуточная: в конечном счете, последовательность достигает промежуточной конфигурации. Дивергентная: последовательность бесконечна.
Слайд 24
Дивергентная команда
Поскольку
мы имеем
Слайд 25
LC оценочное отношение должно быть дано как индуктивно определенное подмножество (выражение состояние) (выражение состояние), в инфиксной форме:
Аксиомы и правила, индуктивно определяющие (5) показаны на рисунке 2 и слайде 26. Заметим, если (5) выводимо, то конечная конфигурация (это элементарно доказывается из Правила Индукции).
26
Оценочные правила для while
Слайд 26
Что касается транзитивного отношения, аксиомы и правила, определяющие (5) следуют структуре Р, и это помогает нам построить доказательство оценки от противного. Данная конфигурация , пока ⇓, объединяет целую последовательность шагов вычисления в одно отношение (это было определено ранее теоремой на слайде 27), и становится сложным определить для какой конечной конфигурации мы должны восстановить доказательство (5). Иногда возможно вывести эту информацию одновременно с построением дерева доказательства снизу - процесс иллюстрирован на рисунке 3. Однако, тот факт (который мы не рассматриваем), что LC способно кодировать любую, частично вычисленную рекурсивную функцию, означает, что нет определенного алгоритма, который по данной конфигурации , решает, существует ли , для которой выполняется (5). Мы видели, как используется структура LC оценочного отношения для построения доказательств оценки. Следующий пример иллюстрирует, как доказать, что конфигурация ничего не оценивает.
где с значение n1 op n2 (где op целочисленная или булева операция)
27
Плюс правило
и
на слайде 26.
Рисунок 2: Аксиомы и правила LC оценок
мы пытаемся найти s'' для которого ⇓ <skip, s′′ > доказываемо. Пока 0, s> ⇓ <true, s> (доказательство показано ранее), последнее правило должно быть вида (⇓wh1):
для некоторых s' и s''. Промежуточное предположение (⇓wh1) должно быть выведена используя(⇓set). Итак s′ = {ℓ → 0} и мы имеем:
Наконец, пока 0, s′ > ⇓ (доказательство представлено ранее) последнее правило использующее в доказательстве ветвление правосторонний обход, должно быть(⇓wh2). Таким образом So s′′ = s′ = {ℓ → 0}, и в итоге имеем: 28
Рисунок 3: Вывод доказательства оценки.
Пример 3.2.1. Рассмотрим такого что
и любое состояние s. Мы утверждаем, что нет s′
справедливо. Докажем от противного. Предположим (6) имеет доказательство. Тогда по Принципу тогда по Принцип Наименьшего Числа (смотри слайд 10), среди всех деревьев доказательств из (6) как вывод, есть одно с наименьшим количеством узлов – назовем его . В связи со структурой С, последняя часть может быть только
- также доказательство (6). Но - соответственно поддерево и таким образом имеет меньше где узлов - это противоречит минимальности узлов . Так что не может существовать никакого s ′, для которого существует ⇓ <кожа, s ′>.
29
Эквивалентность LC транзакции и оценочной семантики Теорема. Для всех конфигураций и всех конечных конфигураций
Три части доказательства:
Slide 27
30