Разница между малой и большой ступенью операционной семантики

28

В чем принципиальное различие между семантикой малых и больших операций?

Я с трудом понимаю, что это такое, и мотивация для того и другого.

Саймон Морган
источник
1
Статья в Википедии об операционной семантике выглядит многообещающе ... пока никто не поймет, что общая сумма информации в разделе «Семантика большого шага» равна «Этот раздел требует расширения. (Февраль 2011)».
Дэвид Ричерби
1
Каков ваш источник обучения? Что это содержит по этому вопросу? Что вы думаете? Подсказка: что такое семантика большого шага x = 0; while ( true ) { x = x + 1; }?
Рафаэль
@ Рафаэль Я читаю Понимание вычислений . Я думаю, что небольшой шаг состоит в том, чтобы сократить выражение до подвыражений, пока оно не может быть уменьшено, а затем оценить его. Большой шаг, похоже, заключается в том, чтобы оценивать вещи сразу, но я не вижу особой разницы между этими двумя методами, поскольку оба они, похоже, связаны с детализацией конструкций более высокого уровня.
Саймон Морган
Большой шаг - это детализация конструкций более высокого уровня путем оценки субструктур и малых шагов путем сокращения более крупного конструкта, опять же, в его субконструкции.
Саймон Морган

Ответы:

32

Семантика малого шага определяет метод для вычисления выражений по одному шагу вычисления за раз. Формально говоря, семантика малого шага для языка выражений E - это отношение →:E×E называемое отношением редукции . Семантика малого шага подробно описывает, что происходит с выражением. Он может дать точный отчет даже о не завершающихся программах с бесконечной цепочкой e0e1e2 . Завершающая программа - это такая программа, что e0e1v veE,ve

На другом конце спектра находится денотационная семантика . Денотационная семантика присваивает «значение» каждому выражению. Это функция от выражений до обозначений: ( называется областью). Пространство обозначений может быть совершенно не связано с синтаксическим пространством, например, может быть выражением, которое оценивается как число, а может быть набором чисел, таким как или .[[]]:EDDEDNR

Семантика большого шага находится посередине. A большого шаг семантика на языке выражений и набор значений есть отношение . Он связывает выражение с его значением (возможно, несколькими значениями, если язык недетерминирован). Часто специальное значение используется для не заканчивающихся выражений.EV⇓:E×V

Итак, почему у нас есть эти три понятия? Все эти понятия могут моделировать друг друга, но модель добавляет степень сложности.

  • Учитывая семантику маленького шага , вы можете определить соответствующую семантику большого шага, которая связывает каждое выражение с его значением (или значениями, если сокращение недетерминировано): если существует цепочка и больше не могут уменьшаться. Обратите внимание, что в общем случае вы не можете восстановить семантику малого шага из семантики большого шага. Например, все не заканчивающиеся выражения неразличимы в семантике большого шага.evee1vv
  • Дается с большим шагом Семантика , вы можете сказать , что это небольшой пошаговые семантику на . Это не особенно полезно.⇓:E×VEV
  • Учитывая семантику маленького шага , вы можете определить соответствующую денотационную семантику, где обозначение выражения - это набор цепочек сокращения, начиная с него. Это удовлетворяет формальному определению, но не особенно полезно, потому что оно добавляет теоретические накладные расходы на объекты, которые легче рассуждать, если смотреть прямо на синтаксис.
  • Учитывая денотационную семантику , вы можете определить семантику маленького шага, добавив все возможные обозначения в качестве значений в языке. Это требует создания значений, которые не являются частью синтаксиса, который может написать программист, а это означает, что некоторые интересные результаты должны указывать «для всех программ, которые может написать программист», а не «для всех программ». Таким образом, этот тоже не очень полезен.[[]]
  • Учитывая семантику большого шага , вы можете определить соответствующую денотационную семантику, где домен - это набор множеств значений: . Если семантика большого шага является детерминированной (каждое выражение сводится к одному значению), вы можете определить более простую денотационную семантику, где домен - это набор значений.[[e]]={vev}
  • И наоборот, учитывая денотационную семантику , вы можете определить семантику большого шага . Опять же, это немного бессмысленно.[[]]E[[]]

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

Семантика малых шагов - самая очевидная. Он четко предоставляет полезную информацию о программах без прерывания. В более общем плане он предоставляет подробную информацию о поведении программы.

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

Семантика большого шага находится посередине: она абстрагирует детали оценки, но сохраняет синтаксическую природу результата. Обычно эта концепция используется, когда есть базовая семантика малого шага, как способ кратко выразить: « »как« ». В таких конструкциях, хотя понятия очень разные (одна позволяет нам говорить об отдельных этапах вычислений и о не завершающихся программах, другая нет), определения будут выглядеть очень похоже, потому что в этом случае правила, определяющие семантика большого шага в основном имеет вид «если и… и и(e1,,en),ee1en and e,eneeene1e2envvэто значение тогда ”.e1v

Жиль "ТАК - перестань быть злым"
источник
Я также изучаю это, но у меня есть проблема с тем, что вы сказали в своем ответе, и я хотел бы, чтобы вы разъяснили. Вы сказали: «Семантика большого шага как бы посередине». Однако разве мелкий шаг не будет «средней» моделью? Рассмотрим выражения: A: ((5 + 7) + 3) B: ((5 + 5) + 5) C: ((1 + 2) + 1) D: ((2 + 1) + 1) Денотационная классификация даже C и D с разными значениями (возможно, «C» и «D»), и big-step классифицируют их как «4», а A и B как «15». Однако, маленький шаг даст вам »(12 + 3) "и" (10 + 5) "для А и В, и" (3 + 1) "для С и D.
Тимоти Свон
@TimothySwan Предполагая, что вы хотите определить обычную арифметическую оценку, денотационная семантика не будет различать C и D. Семантика маленького шага будет определять цепочку сокращения, подобную . Семантика большого шага была бы очень похожа на денотационную семантику: против . в большом шаге семантике является одним в синтаксисе языка , тогда как в денотационных семантиках являются одним из метатеории, но различие не является видимым или важным в этом простом примере. ((2+1)+1)3+14((2+1)+1)3[[((2+1)+1)]]=444
Жиль "ТАК - прекрати быть злым"
Поэтому, когда вы сказали, «денотационная семантика назначает« значение »каждому выражению». Вы имели в виду не однозначную идентификацию самих выражений, а какое-то независимое от оценки значение? Можете ли вы привести простой пример, который четко показывает разницу между большой ступенью и денотационной семантикой? Кроме того , пожалуйста , объясните 3в ((2+1)+1)⇓3я предполагаю , что «денотационной» некоторый конец все значения, но в том, что экземпляр будет «большой шаг» не обязательно карту непосредственно к этому? Различие имеет какое-то отношение к контексту, например, в (a + 1)зависимости от среды, которая содержит a?
Тимоти Свон
@TimothySwan Пока нет побочных эффектов, недетерминированности и функций, денотационная семантика выражения - это значение, к которому оно относится. Недетерминизм - хороший способ проиллюстрировать разницу между большим шагом и денотационным: обозначение выражения будет набором значений, которые оно может иметь: , тогда как семантика большого шага будет иметь несколько допустимых суждений: и и ... Это была опечатка. [[rand(1..n)]]={1,2,,n}rand(1..n)1rand(1..n)23
Жиль "ТАК - перестань быть злым"