Zwykle widzę, że w strukturalnej reprezentacji operacyjnej semantyki dla pętli while stan programu nie zmienia się:
Dla mnie nie jest to intuicyjne, jeśli stan się nie zmieni (tzn. Stan pamięci pozostanie taki sam), wówczas pozostanie prawdą, a program nigdy się nie zakończy.
Czy ktoś może wyjaśnić, dlaczego stan nie zmienia się w tej regule?
Odpowiedzi:
W semantyce języka programowania pojęcie stanu programu nie jest niejasnym pojęciem filozoficznym, ale bardzo precyzyjnym pojęciem matematycznym. Stanu w tym małym kroku semantyki operacyjnych jest częściowo funkcjąs
która rejestruje wartości zmiennych. Więc jeśli , to zmienna ma wartość . Stan jest koniecznie funkcją częściową, ponieważ sensowne jest jedynie rejestrowanie wartości zmiennych, które faktycznie występują.sx=v x v
Rozwijający się aksjomat
po prostu mówi nam, że rozwijamy pętlę while w instrukcji warunkowej, której jedna gałąź zawiera pętlę. Z tego powodu żadne zmienne nie zmienią swojej wartości iz tego powodu stan się nie zmienia.
źródło
Stan może się zmieniać w kolejnych krokach redukcji, ponieważ po prawej stronie
-loop jest chroniony (poprzedza) przez . Obliczenie może zmienić stan, aby warunek mógł zostać oceniony na .while S S B false
źródło
Stan nie zmienia się, gdy weźmiemy pod uwagę, , aby zdecydować, czy do wykonywania jednej iteracji pętli, ale można to zmienić później , kiedy uruchomić ciała . Tak więc następnym razem, gdy rozważymy , może nastąpić zmiana .σ B S B σ
źródło