Вот вопрос «следа B», если таковой был. Резюме: первое, о чем я думаю, когда пытаюсь дать семантику недетерминированным программам, приводит к семантике, где я не могу доказать вещи о циклах, которые заканчивают только недетерминированно. Конечно, кто-то определил, что делать в этой ситуации, или, по крайней мере, указал, что это сложно, но я не знаю, как его искать (отсюда и тег «запрос ссылки»).
Фон
Я хочу смоделировать язык пока с недетерминизмом. Я думаю, что это очевидный (или, по крайней мере, наивный) способ моделировать такой язык с помощью домена силы Смита, но поправьте меня, если я ошибаюсь. Мы смоделируем значение команды на этом языке как функцию, чья область - это множество состояний а кодовый домен - множество , где - наименьший элемент представляет не прекращение, а - набор состояний.
- если , в противном случае
- if или , в противном случае
- ⟦ Р ⟧ сг = ⊥ ⟦ Q ⟧ т = ⊥ т ∈ ⟦ Р ⟧ сг ⋃ т ∈ ⟦ Р ⟧ сг ⟦ В ⟧ т if или для некоторого , в противном случае
Существует направленный полный частичный порядок , где для любого и если и являются собственными наборами, а , и мы можем расширить это до функций от до : если для каждой , и - это функция, которая отображает каждое состояние в .⊥ ⊑ S ′ S ′ ∈ P ( S ) ⊥ S 1 ⊑ S 2 S 1 S 2 S 1 ⊇ S 2 f Sf 1 ⊑ f 2 f 1 ( σ ) ⊑ f 2 ( σ ) σ f ⊥ ⊥
Значение цикла - это - это наименьшая верхняя граница цепи , где если , в противном случае если или для некоторого , в противном случае . (Это определение предполагает , что я только что определил Скотт непрерывен, но я думаю , что это безопасно , чтобы оставить это в стороне.)ф ⊥ ⊑ ф ( е ⊥ ) ⊑ ф ( е ( ф ⊥ ) ) ⊑ ... е ( г ) ( σ ) = { σ } ⟦ Е ⟧ ( σ ) = F л ев е ⊥ ⟦ Р ⟧ сг = ⊥т ∈ ⟦ Р ⟧ сге
Вопрос
Рассмотрим эту программу:
б : = т т у д ; ш х в я л е б д о
Наглядно это цикл , который может возвращать любое положительное четное число или не прекращается, и что соответствует тому , что мы можем доказать , об этом цикле , используя самую слабую либеральную предпосылку (можно показать , что петля инвариант). Однако, поскольку цикл имеет возможность не завершаться (мы можем уточнить недетерминированный выбор с помощью программы, которая всегда выбирает правую ветвь), значение этой программы для любого начального состояния равно . (Менее неформально: функция, которая отображает любое состояние, где ложно, и любое состояние, где верно для является фиксированной точкой используемой для определения цикла.)⊥ b b ⊥ f
Это означает, что предложенная мною наивная семантика не соответствует тому, как я ожидаю, чтобы иметь возможность рассуждать о программах. Я виню свою семантику, но не знаю, как их исправить.