На какие вопросы может ответить денотационная семантика, чего не может операционная семантика?

14

Я знаком с операционной семантикой (как маленькой, так и большой) для определения языков программирования. Я также заинтересован в изучении денотационной семантики, но не уверен, стоит ли это усилий. Буду ли я изучать один и тот же материал с другой точки зрения, или есть понимание, которое я могу получить только от понимания денотационной семантики?

gardenhead
источник

Ответы:

11

Нет реального соглашения о том, что характеризует денотационную семантику (см. Также эту статью), за исключением того, что она должна быть композиционной . Это означает, что если - это семантическая функция, отображающая программы в их значение, что-то вроде следующего должно иметь место для всех -ных программных конструкторов и всех программ , ..., (неявно предполагая правильную типизацию):[[]]nfM1Mn

[[f(M1,,,,,MN)]]знак равноTрaNs(е)([[M1]],,,,,[[MN]])

Здесь - конструктор, соответствующий в семантической области. Композиционность аналогична понятию гомоморфизма в алгебре.TрaNs(е)е

В этом смысле операционная семантика не является композиционной. Исторически денотационная семантика была разработана частично потому, что операционная семантика не была композиционной. Следуя теоретической порядковой денотационной семантике Д. Скотта calculus, большинство денотационной семантики раньше было теоретико-порядковым. Я полагаю, что помимо чистого интеллектуального интереса денотационная семантика была изобретена главным образом потому, что в то время (1960-е годы):λ

  1. Раньше было сложно рассуждать об операционной семантике.
  2. Раньше было трудно дать аксиоматическую семантику нетривиальным языкам.

Часть проблемы заключалась в том, что понятие равенства программ не было так хорошо понято, как сейчас. Я бы сказал, что обе проблемы были в значительной степени улучшены (1), например, с помощью методов, основанных на бисимилировании, исходя из теории процессов (которые можно рассматривать как особую форму операционной семантики), или, например, Питтс работает над операционной семантикой и программой эквивалентность, и (2) развитием, например, логики разделения или логики Хоара, полученной в виде типизированных версий логики Хеннеси-Милнера через вложения языка программирования в типизированные π-исчисления. Обратите внимание, что логика программы (= аксиоматическая семантика) тоже композиционная.

Другой способ взглянуть на денотационную семантику состоит в том, что существует много языков программирования, и все они выглядят примерно одинаково, поэтому, возможно, мы сможем найти простой, но универсальный метаязык и сопоставить все языки программирования композиционным способом с этим мета-языком. язык. В 1960-х годах считалось, что некоторый типизированный -calculus является тем мета-языком. Картинка может сказать более 1000 слов:λ

введите описание изображения здесь

В чем преимущество этого подхода? Может быть, имеет смысл взглянуть на это с экономической точки зрения. Если мы хотим доказать что-то интересное в классе объектной программы, у нас есть два варианта.

  • Докажите это прямо на уровне объекта.

  • Докажите, что перевод на мета-уровень (и обратно) «сохраняет» свойство, затем докажите его для мета-уровня, а затем верните результат обратно на уровень объекта.

Объединенная стоимость последнего, вероятно, выше, чем стоимость первого, но стоимость доказательства перевода можно амортизировать во всех будущих использованиях, в то время как стоимость подтверждения свойства для мета-уровня намного меньше, чем стоимость доказательства на уровне объекта.

Первоначальный теоретико-порядковый подход к денотационной семантике до сих пор не оправдал этого обещания, поскольку сложные языковые функции, такие как объектная ориентация, параллелизм и распределенные вычисления, еще не получили точную теоретико-порядковую семантику. Под «точным» я подразумеваю семантику, которая соответствует естественной операционной семантике таких языков.


Стоит ли изучать денотационную семантику? Если вы имеете в виду теоретико-порядковые подходы к денотационной семантике, то, вероятно, нет, если вы не хотите работать в теории языков программирования и не должны понимать более старые статьи. Другой причиной изучения теоретико-порядковых подходов к денотационной семантике является красота этого подхода.

Мартин Бергер
источник
4

О(п,σ)σ'п,σσ'D(п)пО(п,σ)знак равноD(п)(σ)S(п)σО(п,σ)D(п)

С:ИксИкс'S(С(п))знак равноS'(п)пσО(С(п),σ)знак равноО'(п,σ)пD(С(п))знак равноD'(п)σ

Глупый пример:

С(п)знак равно(Q;Q')(skip;q;skip;q;skip)

pC

xavierm02
источник