Ось питання "доріжки B", якщо воно колись було. Короткий зміст: перше, про що я думаю, коли намагаюся надати семантику недетермінованим програмам, призводить до семантики, де я не можу довести речі про петлі, які закінчуються лише недетермінантно. Напевно, хтось розробив, що робити в цій ситуації, або, принаймні, зазначив, що це важко, але я не знаю, як його шукати (звідси тег "довідковий запит").
Фон
Я хочу моделювати мову на той час з недетермінізмом. Я думаю, що це очевидний (або, принаймні, наївний) спосіб моделювання такої мови за допомогою домену Сміта, але виправте мене, якщо я помиляюся. Ми будемо моделювати значення команди в цій мові як функція, домен якої - це множина станів і кодоміном якої є набір , де є найменшим елементом, що представляє неприпинення, а - набір потужностей станів.P ( S ) ⊥ = { ⊥ } ∪ P ( S ) ⊥ P ( S )
Ми інтерпретуємо команди як карти зі станів або події без припинення або наборам станів які представляють можливі результати. - недетермінований вибір.
- якщо , інакше
- якщо або , інакше
- якщо або для деякого , інакше
Існує спрямований повний частковий порядок , де для будь-якого і якщо обидва і є правильними наборами, а , і ми можемо поширити це на функції від до : якщо для кожного та - це функція, яка відображає кожен стан до .
Значення циклу - - найменша верхня межа ланцюга , де якщо , інакше якщо або для деякого , інакше . (Це визначення передбачає, що я щойно визначив, є Скоттом безперервним, але я думаю, що це безпечно залишити в стороні.)
Питання
Розглянемо цю програму:
Інтуїтивно це петля, яка може повернути будь-яке додатне парне число або не припинити, і це відповідає тому, що ми можемо довести про цю петлю, використовуючи найслабшу ліберальну передумову (можна показати, що - це цикл інваріант). Однак, оскільки цикл має можливість не припинятись (ми можемо уточнити недетермінований вибір програмою, яка завжди займає праву гілку), значення цієї програми з урахуванням будь-якого початкового стану - . (Менше неофіційно: функція, яка відображає будь-який стан, де є неправдивим для себе, і будь-який стан, коли вірно є фіксованою точкою використовується для визначення циклу.)
Це означає, що запропонована мною наївна семантика не відповідає тому, як я очікую, що зможу міркувати про програми. Я звинувачую свою семантику, але не можу їх виправити.