Normalerweise sehe ich, dass sich in der strukturellen Darstellung der operativen Semantik für die while-Schleife der Programmstatus nicht ändert:
Für mich ist dies nicht intuitiv. Wenn sich der Status nicht ändert (dh der Status des Speichers bleibt gleich), bleibt weiterhin wahr und das Programm wird niemals beendet.
Kann jemand bitte erklären, warum sich der Staat in dieser Regel nicht ändert?
Antworten:
In der Semantik der Programmiersprache ist der Begriff des Programmzustands kein vager philosophischer Begriff, sondern ein sehr präziser mathematischer. Ein Zustand in diesen kleinen Schritten operationale Semantik ist eine Teilfunktions
das zeichnet die Werte der Variablen auf. Also wenn , dann hat die Variable x den Wert v . Der Zustand ist notwendigerweise eine Teilfunktion, da es nur sinnvoll ist, die Werte der tatsächlich auftretenden Variablen aufzuzeichnen.sx=v x v
Das sich entfaltende Axiom
sagt uns einfach, dass wir eine while-Schleife in eine bedingte Anweisung entfalten, deren Zweig die Schleife enthält. Aus diesem Grund ändern keine Variablen ihren Wert, und aus diesem Grund ändert sich der Status nicht.
quelle
Der Zustand kann sich in nachfolgenden Reduktionsschritten ändern, weil auf der rechten Seite von
Die Schleife wird von S bewacht (vorangestellt) . Die Berechnung von S kann den Zustand ändern, so dass die Bedingung B zu f a l s e ausgewertet werden kann .while S S B false
quelle
Der Zustand ändert sich nicht, wenn wir B betrachten , um zu entscheiden, ob eine Iteration der Schleife durchgeführt werden soll, aber er kann sich später ändern, wenn wir den Körper S ausführen . Wenn wir also das nächste Mal B betrachten , kann es zu einer Änderung von σ kommen .σ B. S. B. σ
quelle