Обычно я вижу, что в представлении структурной операционной семантики для цикла while состояние программы не изменяется:
Для меня это не интуитивно понятно, если состояние не меняется (то есть состояние памяти остается прежним), то будет продолжать оставаться верным, и программа никогда не завершится.
Может кто-нибудь объяснить, почему государство не меняется в этом правиле?
Ответы:
В семантике языка программирования понятие состояния программы является не смутным философским понятием, а очень точным математическим понятием. Состояние в этом небольшом шаге-операционную семантики является частичной функциейs
который записывает значения переменных. Так что если , тогда переменная x имеет значение v . Состояние обязательно является частичной функцией, поскольку имеет смысл записывать только те значения переменных, которые на самом деле встречаются.sx=v x v
Аксиома разворачивания
просто говорит нам, что мы разворачиваем цикл while в условный оператор, одна из ветвей которого содержит цикл. Никакие переменные не изменят свое значение из-за этого, и по этой причине состояние не изменяется.
источник
Состояние может измениться на последующих этапах сокращения, потому что на правой стороне
-loop охраняется (предваряется) с помощью S . Вычисление S может изменить состояние , так что условие Б может оценить, е L сек е .while S S B false
источник
Состояние не меняется , когда мы рассматриваем B , чтобы решить , следует ли выполнить одну итерацию цикла, но он может изменить позже , когда мы запустим тела S . Итак, в следующий раз, когда мы рассмотрим B , может произойти изменение σ .σ B S B σ
источник