Por que o estado permanece inalterado na semântica operacional de pequeno passo de um loop while?


9

Normalmente, vejo que na representação semântica operacional estrutural do loop while, o estado do programa não muda:

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

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.B

Alguém pode explicar por que o estado não muda nessa regra?


Observe que isso só está correto se pudermos supor que não tenha efeitos colaterais. Isso não é verdade na maioria das linguagens de programação. B
Raphael

Respostas:


10

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

s:VarZ

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=vxv

O axioma em desenvolvimento

whilebdoS,sifbthenS;whilebdoSelse skip,s

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.


10

O estado pode mudar nas etapas de redução subsequentes, porque no lado direito da

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

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 .whileSSBfalse


Então, isso significa que a mudança de estado deve ser expressa em outras regras às quais S poderia ser potencialmente reduzido em um programa concreto?
El Marce 16/10

@ElMarce Sim. Sugiro seguir um exemplo simples, por exemplo, e ver como isso funciona. x:=2; while x>0 do x:=x1
Martin Berger

9

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 σ .σBSBσ


Essa explicação, embora essencialmente correta, não se refere ao que são estados (ou seja, uma função que nos informa os valores de varialbes) e o que uma mudança de estado significa (ou seja, que o valor de pelo menos uma variável muda).
Hans Hüttel 17/10

De fato, é irrelevante o que são estados ou como são implementados para os fins da minha resposta. A explicação vale independentemente. Além disso, é realmente errado dizer que "os estados são realmente funções" porque o thea é apenas uma maneira de modelá-los matematicamente. Existem outros modelos possíveis. E não confundamos modelos matemáticos com o funcionamento do hardware.
Andrej Bauer

Mas a questão diz respeito a uma semântica operacional específica em pequenos passos, para a qual a noção de estado é bem definida.
Hans Hüttel 17/10

Eu nunca disse que não era. Estou apenas dizendo que sua observação é desnecessária, porque minha explicação é válida sem menção explícita de como o estado é modelado. Talvez você tenha detectado que o OP não sabia que esse estado era um mapa de variáveis ​​para valores. Bom para você, sua resposta foi aceita e eu não. Parabéns. Por que agora você está forçando seu modo de resposta está além da minha compreensão. Por que exatamente você sente a necessidade de fazer minha resposta ser como a sua? Minha resposta faz sentido sem as observações que você acha necessárias. Talvez alguém venha procurar a minha resposta um dia.
Andrej Bauer
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.