Normalmente, vejo que na representação semântica operacional estrutural do loop while, o estado do programa não muda:
Para mim, isso não é intuitivo, se o estado não mudar (ou seja, o status da memória permanecer o mesmo), então continuará sendo verdadeiro e o programa nunca será encerrado.
Alguém pode explicar por que o estado não muda nessa regra?
Respostas:
Na semântica da linguagem de programação, a noção de estado do programa não é uma noção filosófica vaga, mas sim matemática muito precisa. Um estado nesta semântica operacional de pequena etapa é uma função parcials
que registra os valores das variáveis. Então, se , então a variáveltem o valor. O estado é necessariamente uma função parcial, pois faz sentido registrar os valores das variáveis que realmente ocorrem.sx=v x v
O axioma em desenvolvimento
está simplesmente nos dizendo que desdobramos um loop while em uma declaração condicional, uma das ramificações que contém o loop. Nenhuma variável alterará seu valor por causa disso e, por esse motivo, o estado não muda.
fonte
O estado pode mudar nas etapas de redução subsequentes, porque no lado direito da
a -loop é guardado (precedida) por S . O cálculo de S pode alterar o estado para que a condição B possa ser avaliada como f a l s e .while S S B false
fonte
O estado não muda quando consideramos B para decidir se é necessário executar uma iteração do loop, mas pode mudar mais tarde , quando corremos o corpo S . E assim, da próxima vez que considerarmos B , pode haver uma mudança de σ .σ B S B σ
fonte