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?


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.


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


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σ


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.