На які питання денотаційна семантика може відповісти, що оперативна семантика не може?


14

Мені добре знайома оперативна семантика (як малого, так і великого кроку) для визначення мов програмування. Мені також цікаво вивчити денотаційну семантику, але я не впевнений, чи варто цього докладати. Чи я буду просто вивчати той самий матеріал з іншої точки зору, чи є думки, які я можу отримати лише з розуміння денотаційної семантики?

Відповіді:


11

Немає реальної згоди, що характеризує денотаційну семантику (див. Також цю статтю), крім того, що вона повинна бути композиційною . Це означає, що якщо - це смислова функція, яка відображає програми за їх значенням, щось подібне повинно мати місце для всіх n -різних конструкторів програм f та всіх програм M 1 , ..., M n (неявно припускаючи, що добре введено):[[]]nfM1Mn

[[f(M1,...,Mn)]]=trans(f)([[M1]],...,[[Mn]])

Тут - конструктор, відповідний f в семантичній області. Композиційність схожа на поняття гомоморфізму в алгебрі.trans(f)f

Оперативна семантика в цьому сенсі не композиційна. Історично денотаційна семантика була розроблена частково тому, що оперативна семантика не була композиційною. Після прориву Д. Скотта проривно-теоретична денотаційна семантика -калькуляції, більшість денотаційних семантики використовувались як теоретико-порядкові. Я гадаю, що, окрім чистого інтелектуального інтересу, денотаційна семантика була в основному винайдена, оскільки в той час (1960-ті роки):λ

  1. Раніше було важко міркувати про оперативну семантику.
  2. Раніше було важко надати аксіоматичну семантику нетривіальним мовам.

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

Інший спосіб погляду на денотаційну семантику полягає в тому, що існує багато мов програмування, і всі вони виглядають подібними, тому, можливо, ми можемо знайти просту, але універсальну мета-мову та композиційно зіставити всі мови програмування з цією мета- мову. У 1960-х роках вважалося, що певний тип -калькуляції - це мета-мова. Малюнок може сказати більше 1000 слів:λ

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

У чому перевага такого підходу? Можливо, має сенс подивитися на це з економічної ПОВ. Якщо ми хочемо довести щось цікаве про клас об’єктної програми, у нас є два варіанти.

  • Доведіть це безпосередньо на об’єктному рівні.

  • Доведіть, що переклад на метарівень (і назад) 'зберігає' властивість, а потім доведіть його на метарівні, а потім висуньте результат назад на рівень об'єкта.

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

Оригінальний теоретико-порядковий підхід до денотаційної семантики до цих пір не виправдав цієї обіцянки, оскільки складні мовні особливості, такі як орієнтація на об'єкти, одночасність та розподілене обчислення, ще не отримали точної порядково-теоретичної семантики. Під "точною" я маю на увазі семантику, яка відповідає природному операційній семантиці таких мов.


Чи варто вивчити денотаційну семантику? Якщо ви маєте на увазі теоретико-порядкові підходи до денотаційної семантики, то, ймовірно, ні, якщо ви не хочете працювати в теорії мов програмування і не потребуєте розуміння старих робіт. Ще одна причина вивчення теоретико-порядкових підходів до денотаційної семантики - краса цього підходу.


4

O(p,σ)σp,σσD(p)pO(p,σ)=D(p)(σ)S(p)σO(p,σ)D(p)

C:XXS(C(p))=S(p)pσO(C(p),σ)=O(p,σ)pD(C(p))=D(p)σ

Дурний приклад:

C(p)=(q;q)(skip;q;skip;q;skip)

pC

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.