Що таке фракція як «дискретна математика» - стиль позначення, що використовується для формальних правил?


18

У статті "Повторюваний тип даних JSON без конфліктів" я зіткнувся з цим позначенням для формального визначення "правил":

Деякі з "правил", показаних у статті] [1

Як називається ця позначення? Як я її читаю?

Наприклад:

  • DOCправило не має нічого в своєму «чисельник» - чому б і ні?
  • то EXECі GETправила , по всій видимості, мають два окремих умови вище лінії, що це значить?
  • VARправило виділяється трохи , як добре, так як в той час як багато інших правила використовують яке - то стрілки (який я б означати «має на увазі») нагорі це один тільки здається , говорять , що х є елемент чого - то.
  • майже все переповнено початком, Ap,який у тексті описується як "стан репліки p описується Ap, кінцевою частковою функцією" - як би кмітливий читач цього позначення прагнув "бачити" ту частину кожного правила?

Цей сайт запропонував відповідне запитання, яке має дуже схожі на вигляд позначення, над питанням Яке значення ⟨B, s⟩ -> ⟨B ', s'⟩ як вихідне правило в цьому питанні про малий крок семантика? - це позначено як оперативна семантика , і це, здається, є сильним провідником. Це дійсно ті рамки, в яких мені слід інтерпретувати ці цифри? Чи можете ви легко підсумувати це у формі "курсу краху", щоб, навіть якщо я не можу перевірити правильність їх доказів, я міг хоча б трохи зрозуміти, що вони говорять у цьому розділі?

Відповіді:


25

Це стандартне позначення для правила виводу . Приміщення ставлять вище горизонтальної лінії, а висновок ставлять нижче лінії. Таким чином, він виглядає як "дріб", але з одним або декількома логічними пропозиціями над лінією та одним пропозицією під рядком. Якщо ви бачите етикетку (наприклад, "LET" або "VAR" у своєму прикладі), це просто людське ім'я для ідентифікації конкретного правила.

Ви також можете бачити це природним відрахуванням або природним відрахуванням у стилі Генцен .

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

Ви побачите це позначення, яке використовується для вираження аксіом / правил. Ви можете розглядати кожну аксіому як шаблон із "мета-змінними" (наприклад, expr ); ви можете замінити кожну мета-змінну на якийсь синтаксис з мови програмування (наприклад, будь-який вираз, що діє в мові програмування), і ви отримаєте екземпляр цього правила. Правило висновку обіцяє, що якщо всі пропозиції вище рядка є істинними (для деяких примірників шаблону, де ви послідовно замінюєте кожну метавимінювану на те саме значення протягом усього правила), тоді пропозиція під рядком буде істинною .


2
Одне помітне використання - конкретизація умовиводів Хіндлі-Мілнера: ця відповідь на тему: «Якої частини Мілнера-Хіндлі ви не розумієте?» Описано, як читати та використовувати цей набір правил.
DylanSp

Одне невелике виправлення: судження та висновки - це судження , а не пропозиції . Пропозиції - це специфічна форма судження. У цьому напрямку судження очевидні , неправдиві (оскільки поняття істини важко визначити і не дуже цікаве для семантики мови програмування).
садок

7

Ось дуже неофіційне пояснення, яке може допомогти людям, незнайомим з формальними позначеннями, отримати ногу у двері. Це не замінює формальне визначення!

Ар є станом вашої системи або вашої працюючої програми. "Стан" може означати багато речей, але в цьому випадку, здається, він включає список усіх визначених локальних змінних та їх значень. Чому Ap функція? Оскільки це зручний спосіб вираження змінних призначень: Ap (x) дає значення змінної x .

Тепер візьмемо для прикладу правило EXEC. Він визначає семантику виконання команди cmd1, за якою слідує команда cmd2 , тобто те, що відбувається зі станом Ap системи під час виконання cmd1, а потім cmd2 .

  • Вище лінії: Це приміщення. Що вони кажуть: "Нехай cmd1 буде командою. Якщо ви виконуєте команду cmd1, коли ваша система перебуває у стані Ap , ваша система перетвориться в новий стан Ap ' ."
  • Нижче рядка: Тут правило описує, що означає виконувати дві команди cmd1 та cmd2 послідовно. Що говорить: "Якщо припустити, що ваша система перебуває у стані Ap , виконання cmd1, а потім cmd2 означає виконання cmd2, коли ваша система перебуває у стані Ap" "(пам’ятайте, що Ap ' - це стан, який ви отримуєте після виконання cmd1 , як визначено в приміщення).

Інші правила описують семантику окремих команд і виразів. Наприклад, правило VAR описує, що означає "виконати" змінну: Якщо x - локальна змінна (над рядком), то що означає оцінювати / виконувати змінну x ? Це написано під рядком: Коли ваша програма знаходиться у стані Ap , оцінюючи x ви отримуєте значення x , тобто Ap (x) .

Я сподіваюся, що це допомагає.


Дякую, це чудова допомога для розуміння і саме того, що я шукав! Однак це моє перше запитання не залишається без відповіді: чи має це позначення назву, як правило, та / або в даному конкретному контексті? Моя здогадка була "Оперативна семантика", але інша відповідь тут поки що говорить, що це просто "правила виводу". Я думаю, якщо я задаю питання з двох частин, я заслуговую на те, щоб відповіді розділилися, але тепер я розірваний між тим, з яким прийняти :-)
natevw

1
@natevw Це правила виводу. Оперативна семантика - лише одна з багатьох речей, які зазвичай виражаються правилами висновку.
Жил 'SO- перестань бути злим'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.