Perché lo stato rimane invariato nella semantica operativa a piccoli passi di un ciclo while?


9

Di solito vedo che nella rappresentazione semantica operativa strutturale per il ciclo while, lo stato del programma non cambia:

(whioleBdoS,σ)(iofBthenS;(whioleBdoS)elSeSKioP,σ)

Per me, questo non è intuitivo, se lo stato non cambia (cioè lo stato della memoria rimane lo stesso) allora B continuerà a rimanere vero e il programma non terminerà mai.

Qualcuno può spiegare perché lo stato non cambia in questa regola?


Nota che questo è corretto solo se possiamo supporre che non abbia effetti collaterali. Questo non è vero nella maggior parte dei linguaggi di programmazione. B
Raffaello

Risposte:


10

Nella semantica del linguaggio di programmazione, la nozione di stato del programma non è una vaga nozione filosofica, ma una matematica molto precisa. Uno stato in questo piccolo passo semantica operative è una funzione parzialeS

S:Vun'rZ

che registra i valori delle variabili. Quindi se , quindi la variabile x ha valore v . Lo stato è necessariamente una funzione parziale, poiché ha senso registrare solo i valori delle variabili che si verificano effettivamente.SX=vXv

L'assioma che si sta svolgendo

mentreBfareS,SSeBpoiS;mentreBfareSaltrimenti salta,S

ci sta semplicemente dicendo che abbiamo sviluppato un ciclo while in un'istruzione condizionale, uno dei cui rami contiene il ciclo. Nessuna variabile cambierà il loro valore per questo motivo, e per questo motivo lo stato non cambia.


10

Lo stato può cambiare nelle successive fasi di riduzione perché sul lato destro di

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

il -loop è custodito (preceduta) da S . Il calcolo di S può cambiare lo stato in modo che la condizione B possa valutare in f a l s e .whileSSBfalSe


Quindi, ciò significa che il cambiamento di stato dovrebbe essere espresso in altre regole alle quali S potrebbe essere potenzialmente ridotto in un programma concreto?
El Marce,

@ElMarce Sì. Suggerisco di passare attraverso un semplice esempio, ad esempio e guarda come funziona. x:=2; while x>0 do x:=x1
Martin Berger,

9

Lo stato non cambia se consideriamo B per decidere se eseguire un'iterazione del ciclo, ma può cambiare in seguito quando si corre il corpo S . E così, la prossima volta che consideriamo B , ci può essere un cambiamento di σ .σBSBσ


Questa spiegazione, sebbene sostanzialmente corretta, non si riferisce a quali sono gli stati (vale a dire una funzione che ci dice i valori di varialbes) e che cosa significa un cambiamento di stato (ovvero che cambia il valore di almeno una variabile).
Hans Hüttel,

In effetti, è irrilevante quali siano gli stati o come siano implementati ai fini della mia risposta. La spiegazione vale indipendentemente. Inoltre, è in realtà sbagliato affermare che "gli stati sono realmente funzioni" perché il teatro è solo un modo per modellarli matematicamente. Esistono altri modelli possibili. E non confondiamo i modelli matematici con il funzionamento dell'hardware.
Andrej Bauer,

Ma la domanda riguarda una specifica semantica operativa a piccoli passi, per la quale la nozione di stato è ben definita.
Hans Hüttel,

Non ho mai detto di no. Sto solo dicendo che la tua osservazione non è necessaria, perché la mia spiegazione tiene senza menzione esplicita di come viene modellato lo stato. Forse hai rilevato che l'OP non sapeva che lo stato era una mappa da variabili a valori. Buon per te, hai ottenuto la tua risposta accettata, e io no. Congratulazioni. Perché ora stai forzando il tuo modo di rispondere su di me va oltre la mia comprensione. Perché proprio senti il ​​bisogno di rendere la mia risposta come la tua? La mia risposta ha senso senza le osservazioni che ritieni necessarie. Forse qualcuno verrà cercando la mia risposta un giorno.
Andrej Bauer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.