Чому держава залишається незмінною у малих крокових оперативних семантиках певного часу?


9

Зазвичай я бачу, що в структурному представленні оперативної семантики для циклу while стан програми не змінюється:

(whileBdoS,σ)(ifBthenS;(whileBdoS)elseSKIP,σ)

Для мене це не інтуїтивно зрозуміло, якщо стан не зміниться (тобто стан пам'яті залишається колишнім), тоді продовжить залишатися вірним і програма ніколи не припиняється.B

Чи можете будь-хто пояснити, чому держава не змінюється в цьому правилі?


Зауважте, що це правильно, лише якщо ми можемо припустити, що не має побічних ефектів. Це не відповідає дійсності більшості мов програмування. B
Рафаель

Відповіді:


10

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

s:VarZ

що записує значення змінних. Отже, якщо , то змінна має значення . Стан - це обов'язково часткова функція, оскільки має сенс лише записувати значення змінних, які насправді мають місце.sx=vxv

Аксіома, що розгортається

whilebdoS,sifbthenS;whilebdoSelse skip,s

просто говорить нам, що ми розгортаємо цикл while в умовний вислів, на одній з гілок якого є цикл. Жодні змінні не змінять своє значення через це, і з цієї причини стан не змінюється.


10

Стан може змінюватися в наступних кроках скорочення, оскільки справа на

while B do S,σif B then (S; while B do S) else skip,σ

-loop охороняється (передує) з допомогою . Обчислення може змінити стан так, що умова може оцінити до .whileSSBfalse


Отже, це означає, що зміна держави повинна виражатися в інших правилах, до яких S може бути потенційно зведеним у конкретній програмі?
El Marce

@ElMarce Так. Я пропоную простий приклад, наприклад і подивитися, як це працює. x:=2; while x>0 do x:=x1
Мартін Бергер

9

Стан не змінюється , коли ми розглядаємо , щоб вирішити , слід виконати одну ітерацію циклу, але він може змінити пізніше , коли ми запустимо тіла . І так, наступного разу, коли ми розглянемо , може статися зміна .σBSBσ


Це пояснення, хоч по суті правильне, не стосується того, що таке стани (а саме функція, яка повідомляє нам значення varialbes) і що означає зміна стану (а саме те, що значення принаймні однієї змінної змінюється).
Ганс Гюттель

Дійсно, не має значення, що таке держави чи як вони реалізуються для моєї відповіді. Пояснення має місце незалежно. І більше того, що насправді неправильно говорити, що "держави - це дійсно функції", оскільки теат є лише одним із способів їх математичного моделювання. Є й інші можливі моделі. І не будемо плутати математичні моделі з тим, як працює апаратне забезпечення.
Андрій Бауер

Але питання стосується конкретної оперативної семантики малих ступенів, для якої поняття держави чітко визначене.
Ганс Хюттель

Я ніколи не казав, що це не так. Я просто кажу, що ваше зауваження є непотрібним, оскільки моє пояснення має чітке згадування про те, як моделюється стан. Можливо, ви виявили, що ОП не знає, що стан є картою від змінних до значень. Добре для вас, ви отримали вашу відповідь, а я - ні. Вітаю. Чому ви зараз примушуєте свій спосіб відповіді на мене, це поза моїм розумінням. Чому саме ти відчуваєш потребу зробити так, щоб моя відповідь була такою, як ваша? Моя відповідь має сенс без зауважень, які ви вважаєте потрібними. Можливо, хтось прийде, шукаючи моєї відповіді одного дня.
Андрій Бауер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.