В другом потоке Андрей Бауэр определил денотационную семантику как:
значение программы является функцией значений ее частей.
Что беспокоит меня в этом определении, так это то, что оно, кажется, не выделяет то, что обычно считается денотационной семантикой, из того, что принято считать неденотационной семантикой, а именно структурную операционную семантику .
Точнее говоря, ключевым компонентом здесь является модульность или композиционность семантики или, иначе говоря, тот факт, что они определены в соответствии с абстрактной структурой программы.
Поскольку в настоящее время большинство (все?) Формальных семантик имеют тенденцию быть структурными, является ли это обязательным определением?
Итак, мой вопрос: что такое денотационная семантика?
Ответы:
Различие, которое я лично делаю между денотационной и операционной семантикой, выглядит примерно так:
Различие может быть довольно тонким, и может быть трудно сказать, является ли это просто различием в стиле или по существу.
Тем не менее, мы можем видеть, как композиционное определение Андрея более естественно следует из денотационного определения, и мы также можем легко представить неконфлюентную, не композиционную семантику, которая все еще соответствует операционному определению.
источник
Если бы я угадал, что скажет Дана Скотт, он, вероятно, сказал бы, что денотационная семантика является композиционной (подобно тому, что я утверждал) и что смысл программы должен быть подлинным математическим объектом, а не какой-либо синтаксической или формалистической сущностью. Конечно, такой взгляд требует дифференциации между формальным манипулированием синтаксисом и «истинной» математикой. Это обязательно нематематическое различие.
В качестве запоздалой мысли, по-видимому, хотелось бы, чтобы значение было адекватным в том смысле, что две наблюдательные программы не имеют одинакового значения. Конечно, адекватность такого рода зависит от того, что можно признать «наблюдением».
В соответствии с этим представлением можно утверждать, что структурная операционная семантика не является денотационной семантикой, поскольку она приравнивает значение синтаксической сущности к другой синтаксической сущности (значению или последовательности сокращения).
источник
Я согласен с тем, что отождествление денотационной семантики А. А. Бауэром с композиционностью (в « Книгах по семантике языка программирования» ) не очень хорошо характеризует то, что традиционно подразумевалось под денотационной семантикой, поскольку явно операционная семантика, а также логика программы (семантика аксиоматики) являются композиционными. ,
Я бы предположил, что этот термин лучше понять социально-исторически, поскольку он относится к определенной традиции теории (начался всерьез, когда Скотт создал теоретическую модель нетипизированного лямбда-исчисления) с некоторыми предпочтительными инструментами (теория порядка, теоремы о точках фиксирования). топология, теория категорий) и предпочтительные целевые языки (чисто функциональные и последовательные). Я полагаю, что помимо чистого интеллектуального интереса денотационная семантика была изобретена главным образом потому, что:
Раньше было сложно рассуждать об операционной семантике.
Раньше было трудно дать аксиомантическую семантику нетривиальным языкам.
Я бы сказал, что обе проблемы были в значительной степени улучшены, (1) например, с помощью методов, основанных на бисимилировании, исходя из теории процессов (которые можно рассматривать как специфическую форму операционной семантики), или, например, Питтс работает над операционной семантикой и программой эквивалентность, и (2) развитием, например, логики разделения или логики Хоара, полученной в виде типизированных версий логики Хеннеси-Милнера посредством встраивания языка программирования в типизированные -calculi.π
Итак, в заключение, я бы сказал, что термин «денотационная семантика» стал менее точным и, следовательно, менее полезным. Сообществу семантики может быть полезно сходиться к лучшей терминологии.
источник
Я доволен ответом Адрея, но я бы хотел продолжить.
Начнем с того, что денотационная семантика хочет сказать что-то вроде «смысл этой нотации таков». Настоящий семантик хотел бы вообразить, что значения - это то, что существует в нашем уме, а обозначения - это просто способ выражения этих значений. Отсюда вытекает требование, чтобы денотационная семантика была композиционной. Если значения являются первичными, а обозначения вторичными, то у нас нет другого выбора, кроме как определить значения больших обозначений как функции значений их составляющих.
Если мы примем эту точку зрения, тогда хорошая денотационная семантика должна отражать значения, которые, как мы предполагаем, мы имеем в своем уме. Любая композиционная семантика не обязательно отвечает всем требованиям. Если я придумываю композиционное семантическое определение, и никто не согласен с тем, что оно говорит о каких-то значениях, которые они имеют в своей голове, тогда оно мало что дает. Семантика игр в настоящее время находится в этой ситуации. Это композиционное определение, и технически довольно сильное, но мало кто согласен с тем, что оно имеет какое-то отношение к значениям, которые они имеют в своем уме.
Тем не менее, любое композиционное определение имеет различные технические преимущества. Мы можем использовать его для проверки эквивалентности или других свойств по индукции синтаксиса терминов. Мы можем использовать его для проверки правильности систем доказательств, опять же по наведению на синтаксис терминов. Мы можем проверить правильность компиляторов или методов анализа программ (которые по своей природе определяются индукцией по синтаксису). Полностью абстрактное семантическое определение имеет еще больше технических преимуществ. Вы можете использовать его, чтобы показать, что две программы не эквивалентны, что вы не можете сделать с любой произвольной композиционной семантикой. Полностью определяемое семантическое определение еще лучше. Здесь семантические области имеют именно то, что вы можете выразить на языке программирования (с некоторыми оговорками). Таким образом, вы можете перечислить значения в доменах, чтобы увидеть, какие есть значения, что было бы трудно сделать с помощью синтаксических обозначений. По всем этим признакам семантика игр блестяще оценивается.
Однако композиционные семантические определения с годами теряют свою остроту. Робин Милнер и Энди Питтс разработали ряд методов « оперативного мышления », которые работают исключительно над синтаксисом, но используют операционную семантику там, где это необходимо для разговора о поведении. Эти методы оперативного мышления являются низкотехнологичными. Нет фантазии математики. Нет бесконечных объектов. Мы можем научить их магистрантам, и каждый может их использовать. Поэтому многие люди задаются вопросом, зачем вообще нужна денотационная семантика. (Мартин Бергер, вероятно, находится в этом лагере.)
Лично у меня нет проблем с наличием множества инструментов в моем ящике для инструментов. Методы денотации могут быть лучше для одних задач, а методики для других. Исследователи, которые разрабатывают теорию, могут быть лучше настроены на тот или иной подход. Довольно часто мы можем выработать идеи в одном подходе и перенести эти идеи в другой подход. (Многие работы Энди Питтса такого рода. Реляционная параметрическость была разработана в денотационной обстановке, но он может понять, как переформулировать это как оперативное рассуждение. Когда я смотрю на это, я говорю: «Ух, я бы никогда думал, что это было бы возможно. "Логика разделения также идет по этому пути. Стив Брукс предоставил 60-страничное доказательство надежности для параллельной логики разделения с использованием денотационной семантики.
Операционные подходы также блестяще выигрывают, когда языки программирования становятся очень причудливыми со всеми видами зацикленных типов высшего порядка. Мы можем не знать, как математически моделировать такие вещи. Или стандартные математические модели могут оказаться несовместимыми в условиях цикличности. (Например, см. «Полиморфизм не является теоретико-множественным» Рейнольдса.) Операционные подходы, которые работают исключительно по синтаксису, могут аккуратно обойти все эти математические проблемы.
Другой подход, который является промежуточным между операционным и денотационным подходами, - это реализуемость . Вместо того, чтобы работать с синтаксическими терминами, как в операционных подходах, мы идем частично денотационно, используя некоторые другие формы математических представителей. Эти представители могут не квалифицироваться как настоящие денотационные «значения», но они будут, по крайней мере, немного более абстрактными, чем синтаксические термины. Например, для полиморфного лямбда-исчисления, мы можем сначала дать значения нетипизированным терминам (в некоторой модели нетипизированного лямбда-исчисления), а затем использовать их в качестве представителей («реализаторов»), чтобы сделать некоторую форму «операционного мышления» при немного более абстрактный уровень.
Итак, пусть будет здоровая конкуренция между денотационным, операционным и реализуемым подходами. Там нет никакого вреда.
С другой стороны, может также возникнуть некоторая «нездоровая» конкуренция между различными подходами. Люди, работающие с одним подходом, могут быть настолько привязаны к нему, что могут не видеть смысла других подходов. В идеале все мы должны осознавать сильные и слабые стороны различных подходов и развивать научное отношение к ним, даже если они не являются нашими любимыми.
источник
[Еще один ответ. Вероятно, не круто накапливать несколько ответов. Но, эй, это глубокая проблема.]
Я сказал, что согласен с ответом Андрея, но, похоже, я не совсем согласен. Есть разница.
Я сказал, что денотационная семантика должна сказать «смысл этой нотации таков». Я имел в виду, что обозначениям должны присваиваться значения, которые представляют собой некоторую форму концептуальных объектов, а не некоторые другие обозначения. Напротив, Андрей также требовал, перефразируя Скотта, что значения должны быть «математическими» объектами. Я не верю, что математический бит необходим.
Например, было бы прекрасно, с моей точки зрения, чтобы значения обозначений были физическими процессами. После того, как все компьютерные программы включают тормоза в вашем автомобиле, летают самолеты, сбрасывают бомбы, а что нет. Это физические процессы, а не элементы в каком-то математическом пространстве. Вы не можете сбросить бомбу, посмотреть, убивает ли она кого-то, и забрать ее, если это не так. Компьютерные программы не могут этого сделать. Но математические функции могут. (Они называются операциями «мгновенного возврата».) Таким образом, совсем не ясно, что математические функции будут иметь хорошее значение для компьютерных программ.
С другой стороны, мы действительно еще не знаем, как говорить о физических процессах абстрактно. Таким образом, мы могли бы действительно использовать некоторое математическое описание процессов, чтобы сформулировать наши идеи. Но эти математические описания были бы просто «описаниями». Они не являются значениями. Реальные значения - это просто физические процессы, которые мы представляем концептуально.
В своей речи о присуждении награды SIGPLAN (которая скоро должна появиться на YouTube) Хоар сказал, что ACP использует «алгебраический подход», CSP использует «денотационный подход», а CCS использует «операционный подход» для описания процессов. Мы с Охадом сидели вместе на сессии, мы смотрели друг на друга и говорили: «Это действительно интересно». Итак, здесь много концептуального пространства, которое изучается. Я думаю, что многие последующие работы Скотта, посвященные системам соседства, информационным системам и т. Д., Действительно были попыткой объяснить функции как «процессы» некоторой формы. Геометрия взаимодействия Жирара и семантика поздних игр также являются попытками объяснить функции как процессы. Я бы сказал, что разработка основательной теории процессов могла бы стать большим вкладом, который информатика могла бы внести в математику XXI века. Я бы не принял убеждение, что у математики есть все ответы, и мы должны попытаться свести вычислительные явления к математическим понятиям, чтобы понять их.
Что меня удивляет, так это то, как красиво скрывается информация в вычислениях с состоянием (императивное программирование, а также исчисление процессов), тогда как это неуклюже и сложно в математических / функциональных формализмах. Да, у нас есть реляционная параметричность, и это позволяет нам очень хорошо обойти ограничения математического формализма. Но это не соответствует простоте и элегантности императивного программирования. Итак, я не верю, что математические формализмы - правильный ответ, хотя я бы признал, что они - лучший ответ, который у нас есть на данный момент. Но мы должны продолжать искать. Существует хорошая теория процессов, которая превзойдет традиционную математику.
источник
[Надеюсь, это мой последний ответ на этот вопрос!]
Первоначальный вопрос Охада был о том, чем денотационная семантика отличается от структурной операционной семантики. Он думал, что они оба были композиционными. На самом деле, это не соответствует действительности. Структурная операционная семантика дана как последовательность шагов. Каждый шаг выражается композиционно (и Плоткин замечательно делает открытие, что это возможно!), Но все поведение не определяется композиционно. Вот что говорит Плоткин в своем вступлении к статье SOS [выделение добавлено]:
Тот факт, что каждый шаг выражается композиционно, не означает, что все поведение выражается композиционно.
Есть хорошая статья Карла Гюнтера под названием « Формы семантической спецификации» , в которой сравниваются и сравниваются различные методы определения семантики. Большая часть этого материала также воспроизведена в первой главе его текста «Семантика языков программирования». Это надо надеяться прояснить картину.
Еще одно слово об «операционной семантике». В первые дни термин «оперативный» использовался для обозначения любого семантического определения, которое ссылалось на подробные этапы оценки. И денотационные семантики, и сторонники аксиоматики смотрели свысока на «операционную» семантику, считая ее низкоуровневой и ориентированной на машины. Я думаю, что это было действительно основано на их убеждении, что описания более высокого уровня были возможны. Эти убеждения были разрушены, как только они рассмотрели параллелизм. Процессы де Баккера и Цукера и денотационная семантика параллелизма имеют следующие интересные отрывки:
Здесь мы видим, что авторы борются с двумя понятиями «операционный», одним из которых является техническое понятие - поведение, выраженное с помощью синтаксических манипуляций, а другим - концептуальное понятие - низкоуровневое и подробное. Большая заслуга в том, что Плоткин и Милнер реабилитировали «операционную» семантику, сделали ее как можно более высокой и продемонстрировали, что она может быть элегантной и проницательной.
Несмотря на все это, операционное понятие процесса все еще весьма отличается от денотационного понятия процесса, последнее из которого было разработано как де Баккером, так и Хоаром и их командами. И я думаю, что есть много загадочного и прекрасного в концепции денотационного процесса, которую еще предстоит понять.
источник
Этот дополнительный ответ призван усилить мысль о том, что денотационные семантические модели предназначены для «объяснения» вычислительных явлений. Я приведу ряд примеров из семантики императивных языков программирования (также называемых «алголоподобными» языками).
Сначала была семантическая модель, сформулированная Скоттом и Стрейчи. (См. Гордон: денотационное описание языков программирования - моя самая любимая книга или книга Винскеля.) Эта модель утверждает, что существует глобальное состояние , состоящее из состояния всех местоположений, выделенных программой. Каждая команда интерпретируется как своего рода функция от глобальных состояний до глобальных состояний.
Рейнольдс сказал, что он не моделирует стековую дисциплину локальных переменных. Когда вводится локальная область, ее переменные распределяются, и они освобождаются при выходе из области. По сути, это вопрос "в каком смысле локальные переменные локальны?" Как семантика захватывает местность? Чтобы объяснить это, он изобрел модель категории функторов. (См. Рейнольдс: Сущность Алгола и Теннента: Семантика языков программирования).
Теннент хотел смоделировать принципы аргументации, сформулированные в Спецификационной логике Рейнольдса (расширение логики Хоара для процедур более высокого порядка). Логика имеет такие идеи, как выражения, подобные выражениям (только для чтения), невмешательство между командами и вычислениями, подобными выражениям, и некоторые принципы обоснования абстракции данных. Он усовершенствовал модель категории Рейнольдса, чтобы найти новую. Это называется моделью «SASL», также описанной в книге Теннента.
Мейер и Зибер, а также О'Хирн и Теннент отметили, что ни одна из этих моделей все еще полностью не отражала локальность локальных переменных. Когда две реализации абстрактного типа данных или класса различаются по своим локальным переменным, но манипулируют ими способами, которые имеют одинаковое поведение при взгляде извне, они являются наблюдательно эквивалентными. Денотационная семантика должна приравнивать их. Чтобы смоделировать это, О'Хирн и Теннент добавили реляционную параметричность к варианту модели категории функторов Рейнольдса.
Когда я одновременно посмотрел на проблему, я не поверил в подход категории функторов. Я также подумал, что это слишком технически, и считал, что должна быть более простая модель. Это заставило меня изобрести модель «Глобальное состояние считается ненужным», которая скорее похожа на модель трассировок CSP, но для языка более высокого порядка. В качестве дополнительного бонуса эта модель также уловила необратимость изменения состояния, чего не было в более ранних моделях.
Моя модель работала только для хорошо себя ведущего подъязыка Алгол, называемого Синтаксический Контроль Интерференции . Абрамский и МакКускер расширили мою модель, используя идеи семантики игр, чтобы она могла работать на полный Алгол. Таким образом, их модель объясняет те же явления, что и моя, но для более крупного языка.
В каждом случае мы можем продемонстрировать, что новые модели фиксируют наблюдательные эквивалентности (или другие формы логических формул), демонстрируя упомянутые вычислительные явления, которые не были подтверждены более ранними моделями. Таким образом, существует очень точный смысл, в котором эти модели «объясняют» вычислительные явления.
[Все работы, о которых я упоминал, можно найти в томах «Алголоподобные языки»: ссылка и ссылка ]
источник