Різниця між малою та великою операційною семантикою


28

Яка принципова відмінність між малою та великою операційною семантикою?

Мені важко зрозуміти, що це таке, і мотивацію їх мати.


1
Стаття у Вікіпедії про оперативну семантику виглядає багатообіцяючою, поки людина не зрозуміє, що загальна кількість інформації в розділі «Семантика великих кроків» становить «Цей розділ вимагає розширення. (Лютий 2011 р.)».
Девід Річербі

1
Яке джерело навчання? Що він містить у цьому питанні? Як ти гадаєш? Підказка: у чому полягає велика семантика x = 0; while ( true ) { x = x + 1; }?
Рафаель

@Raphael Я читаю Розуміння обчислень . Мої думки полягають у тому, що підхід малого кроку полягає в тому, щоб зменшити вираз на суб-вирази до тих пір, поки його не вдасться зменшити, а потім оцінити це. Великий крок, здається, полягає в тому, щоб оцінити речі відразу, але я насправді не цікавлю різницю між двома методами, оскільки вони обидва, як здається, стосуються розбудови конструкцій вищого рівня.
Саймон Морган

Великий крок - це зведення з конструкцій вищого рівня шляхом оцінки субконструкцій, а малий крок шляхом зменшення більшої конструкції, знову ж таки, в її підконструкції.
Саймон Морган

Відповіді:


32

Малошагова семантика визначає метод для оцінки виразів за одним етапом обчислення. Формально кажучи, малошагова семантика для мови вираження - це відношення називається відношенням скорочення . Малошагова семантика описує детально те, що відбувається з виразом. Він здатний дати точний виклад навіть програм з нескінченним ланцюжком . програма - така, що закінчується значенням таким, що . \ newcommand {\ llbracket} {[\! [} \ newcommand {\ rrbracket} {] \!]}: E × EE→:E×Ee 0e 1ve0e1e2e0e1v e E , v e veE,ve

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

Семантика великого кроку є своєрідною посередині. A великого крок семантика на мові виразів і набір значень є ставлення . Він пов'язує вираз зі своїм значенням (можливо, декількома значеннями, якщо мова є недетермінованою). Часто спеціальне значення використовується для виразів, що не закінчуються.EV⇓:E×V

То чому ми маємо ці три поняття? Усі ці поняття можуть моделювати одне одного, але модель додає певної складності.

  • Задавши семантику малого кроку , ви можете визначити відповідну семантику великого кроку, яка пов'язує кожен вираз зі своїм значенням (або значеннями, якщо зменшення недетерміновано): iff існує ланцюг і не може більше зменшувати. Зауважте, що загалом ви не можете реконструювати семантику малих кроків із семантики великих кроків. Наприклад, усі незакінчені вирази не відрізняються від семантики великих кроків.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"), і великий крок класифікував би їх як "4", і обидва, і A і B, як "15". Однак малий крок дасть вам "(12 + 3) "і" (10 + 5) "для A і B, і" (3 + 1) "для C і D.
Тимофій Лебедь

@TimothySwan Якщо припустити, що ви хочете визначити звичайну арифметичну оцінку, денотаційна семантика не розрізнятиме C і D. Малошагова семантика визначає ланцюг скорочення типу . Семантика великого кроку була б дуже схожа на денотаційну семантику: vs . в великому кроці семантиці є одним в синтаксисі мови , тоді як в денотаціонних семантики є одним з метатеорії, але різниця не є видимим або важливим в цьому простому прикладі. ( ( 2 + 1 ) + 1 ) 3 [((2+1)+1)3+14((2+1)+1)34 4[[((2+1)+1)]]=444
Жил "ТАК - перестань бути злим"

Тож, коли ви сказали, "Денотаційна семантика присвоює" значення "кожному виразу". ви мали на увазі не однозначне визначення самих виразів, а якесь значення незалежного від оцінки? Чи можете ви навести простий приклад, який чітко показує різницю між великим кроком та денотаційною семантикою? Крім того, поясніть, будь ласка, 3в ((2+1)+1)⇓3тому, що я здогадуюсь, що «денотаційний» є деяким кінцевим значенням, але в якому випадку «великий крок» не обов'язково відображатиметься безпосередньо на це? Чи має різниця щось спільне з контекстом, наприклад, (a + 1)залежно від середовища, яке міститься a?
Тимофій Лебідь

@TimothySwan Поки немає побічних ефектів, недетермінізму і ніяких функцій, денотаційна семантика виразу є значенням, яке воно оцінює. Недетермінізм - це хороший спосіб проілюструвати різницю між великим кроком та денотаційним: позначення виразу буде набором значень, які він може мати: , тоді як семантика великого кроку мала б кілька допустимих суджень: та і ... Був друкарський . r a n d ( 1 .. n ) 1 r a n d ( 1 .. n ) 2[[rand(1..n)]]={1,2,,n}rand(1..n)1rand(1..n)23
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.