Pourquoi l'état reste-t-il inchangé dans la sémantique opérationnelle à petite étape d'une boucle while?

9

Habituellement, je vois que dans la représentation sémantique opérationnelle structurelle pour la boucle while, l'état du programme ne change pas:

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

Pour moi, ce n'est pas intuitif, si l'état ne change pas (c'est-à-dire que l'état de la mémoire reste le même) alors continuera à rester vrai et le programme ne se terminera jamais.B

Quelqu'un peut-il expliquer pourquoi l'État ne change pas cette règle?

El Marce
la source
Notez que cela n'est correct que si nous pouvons supposer que n'a pas d'effets secondaires. Ce n'est pas vrai dans la plupart des langages de programmation. B
Raphael

Réponses:

10

Dans la sémantique du langage de programmation, la notion d'état de programme n'est pas une notion philosophique vague, mais une notion mathématique très précise. Un état dans cette sémantique opérationnelle à petite étape est une fonction partielles

s:VarZ

qui enregistre les valeurs des variables. Donc, si , alors la variable a la valeur . L'état est nécessairement une fonction partielle, car il n'a de sens que d'enregistrer les valeurs des variables qui se produisent réellement.x vsx=vxv

L'axiome qui se déroule

whilebdoS,sifbthenS;whilebdoSelse skip,s

nous dit simplement que nous déplions une boucle while dans une instruction conditionnelle, dont l'une des branches contient la boucle. Aucune variable ne changera leur valeur à cause de cela, et pour cette raison l'état ne change pas.

Hans Hüttel
la source
10

L'état peut changer au cours des étapes de réduction ultérieures car sur le côté droit de

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

le -loop est gardée (précédée) par . Le calcul de peut changer l'état de sorte que la condition puisse être évaluée à .S S B f a l s ewhileSSBfalse

Martin Berger
la source
Donc, cela signifie que le changement d'état devrait être exprimé dans d'autres règles auxquelles S pourrait être potentiellement réduit dans un programme concret?
El Marce
@ElMarce Oui. Je suggère de passer par un exemple simple, par exemple et de voir comment cela fonctionne. x:=2; while x>0 do x:=x1
Martin Berger
9

L'état ne change pas lorsque l' on considère de décider d'effectuer une itération de la boucle, mais il peut changer plus tard quand nous courons le corps . Et donc, la prochaine fois que nous considérons , il peut y avoir un changement de .B S B σσBSBσ

Andrej Bauer
la source
Cette explication, bien qu'essentiellement correcte, ne fait pas référence à ce que sont les états (à savoir une fonction qui nous indique les valeurs des varialbes) et à ce que signifie un changement d'état (à savoir que la valeur d'au moins une variable change).
Hans Hüttel
En effet, il n'est pas pertinent de savoir quels sont les États ou comment ils sont mis en œuvre aux fins de ma réponse. L'explication tient malgré tout. Et d'ailleurs, il est en fait faux de dire que "les états sont vraiment des fonctions" car la thèse n'est qu'une façon de les modéliser mathématiquement. Il existe d'autres modèles possibles. Et ne confondons pas les modèles mathématiques avec le fonctionnement du matériel.
Andrej Bauer
Mais la question concerne une sémantique opérationnelle spécifique à petits pas, pour laquelle la notion d'état est bien définie.
Hans Hüttel
Je n'ai jamais dit que ce n'était pas le cas. Je dis simplement que votre remarque est inutile, car mon explication tient sans mention explicite de la façon dont l'État est modélisé. Vous avez peut-être détecté que l'OP ne savait pas que cet état était une correspondance entre les variables et les valeurs. Tant mieux pour vous, votre réponse a été acceptée, mais pas moi. Toutes nos félicitations. Pourquoi vous m'imposez maintenant votre mode de réponse est au-delà de ma compréhension. Pourquoi ressentez-vous précisément le besoin de rendre ma réponse semblable à la vôtre? Ma réponse a du sens sans les remarques qui vous semblent nécessaires. Peut-être que quelqu'un viendra un jour chercher ma réponse.
Andrej Bauer