Perché la regola di assegnazione è il modo in cui è in Hoare Logic?
-
28-09-2020 - |
Domanda
Perché la regola di assegnazione è il modo in cui è in Hoare Logic / Axiomatic Semantics? Non riesco ad avvolgermi la testa perché la regola di assegnazione è all'indietro da quello che mi aspettavo.
Compreso Hoare Logic è l'uso per dimostrare proposizioni formali dello stato di un programma poiché vengono eseguiti comandi. Quindi, se eseguiamo il comando $$ x:= E $$ mi sarei aspettato che lo stato next ha tale sostituzione ... Ma sembra che la sostituzione accada
$$ \ {p \} x:= e \ {P [e / x] \} $$
Dato che $ p $ sono affermazioni sullo stato del programma.
Sono sicuro che c'è una buona spiegazione per questo e scusa se questa è una domanda fondamentale, so che deve essere. Ma qualcuno può spiegarmelo?
.
Domanda bonus:
Perché non scriviamo la regola di assegnazione come:
$$ \ {q \} x:= e \ {q [x / e] \} $$
nota non è la stessa del mio suggerimento originale perché abbiamo la $ x $ e $ e $ scambiato intorno. cioè nella condizione postale ovunque abbiamo una classe $ E $ Posizioniamo una classe $ x $ (che va bene Poiché la dichiarazione che eseguiamo semplicemente è quella $ x $ contiene il valore di $ e $ , quindi dovremmo essere in grado di sostituire $ e $ per $ x $ nella condizione post se la condizione predica la condizione. < / P >.
.
Messaggi correlati che ho letto che non hanno aiutato:
- .
- raco triplo per l'assegnazione p {x / e} x := E {p}
- Wikipedia Hoare Logic
- https://www.quora.com/unanswered/why-is-the-assignment-rule-the-way-it-is-in-hoare-logic
- https://www.reddit.com/r/programmingLanguages/ Commenti / E8suhh / why_is_the_assignment_rule_the_way_it_is_in_hoare /
.
Appendice:
Per la dislessia degli Stati Uniti, in questa domanda questo è ciò che la notazione di sostituzione significa:
$$ P [E / x]= P [E \ to x] $$
I.e. Sostituisci ogni evento GRATUITO di $ x $ con espressione / termine / thingie $ e $ .
Soluzione
Quindi dopo aver letto e pensarci di più questa è la mia spiegazione ( grazie Software Fondazioni ):
La confusione chiave per me sembra essere il significato di $ P [E / x] $ (sostituisce ogni istanza gratuita di X con E). Cosa fa dove si vede il simbolo $ x $ letteralmente rimuoverlo e posizionare $ e $ . per esempio. $ P [E / X]= (X + Y + 1) [E / X] \ a P [E / X]= (E + Y + 1) $ Avviso come $ x $ Letteralmente scomparvero da $ p $ . Quindi quello che vogliamo è una volta che facciamo il compito:
$$ x:= e $$
che la dichiarazione è vera se avessimo $ x $ invece di $ e $ . Quindi se la regola è:
$$ \ {p [e / x] \} x:= e \ {p \} $$
Allora ciò che vogliamo è, quando colleghiamo $ x $ per $ e $ Vogliamo il dichiarazione in considerazione per essere vero. Quindi, prima di avviare il codice abbiamo $ P [e / x] $ . Quindi eseguiamo l'assegnazione e tutte le istanze di $ e $ scomparire e otteniamo $ x $ sostituirli. Quella deve essere true se il codice che correva è stato assegnato (poiché $ x $ ora tieni il valore $ e $ , così puoi rimuovere $ e $ 's e posizionare $ x $ ).
è la spiegazione del concetto astratto. Lascia (spudoratamente) Utilizzare le basi software (SF) Esempio:
.{{y= 1}} x ::= y {{x= 1}} in inglese: se iniziamo in uno stato in cui il valore di Y è 1 e assegniamo Y a X, allora lo faremo Finitura in uno stato in cui X è 1. Quello è, la proprietà di essere uguale a 1 viene trasferita da Y a X.
Un altro utile paragrafo da SF:
.Allo stesso modo, in {{Y + z= 1}} x ::= y + z {{x= 1}} La stessa proprietà (essere uguale a una) viene trasferita a X dall'espressione Y + Z sul lato destro del compito. Più in generale, se A è un'espressione aritmetica, allora {{A= 1}} X ::= A {{X= 1}} è un triplo di hoare valido.
.
Addendum dalla grande osservazione del commento:
.È importante riconoscere che la regola { P. [ E. / X ] } X :=.. E. { P. } consente sia l'espressione E. e la variabile X si verificano nella postcondition. In altre parole, la regola dell'inferenza consente di dedurre una postcondition in cui qualsiasi sottoinsieme delle occorrenze di E. nella precondizione è stato sostituito con X , inclusi nessuno di loro. Inoltre, consente di dedurre tutte queste diverse postcondizioni contemporaneamente.
.
Rispondi a Bonus Perché
1) $ \ {p [e / x] \} x:= e \ {p \} $
Meglio di
2) $ \ {q \} x:= e \ {q [x / e] \} $ :
oltre al punto sottile di sostituzione x con espressioni che potrebbero essere invisibili (ad es. E= 0, dovremmo sostituire $ 0 $ con un numero infinito di $ x $ 'S? Cosa succede se gli zeri non ci sono ... Le regole dovrebbero essere sintattiche ma penso che sia meglio evitare tali confusioni), penso che questa sia la ragione: < / P >.
.Qual è la regola di assegnazione della regola è che stiamo assegnando l'espressione e alla variabile x. Quindi, solo x dovrebbe essere "sostituito" da e. Intuitivamente, nel codice (o più precisamente lo stato del programma $ \ sigma $ ) Quando X inizia a tenere il valore E, non significa in modo casuale ovunque Potrebbe esserci un e diventa x dopo aver eseguito l'assegnazione $ x:= E $ . In realtà ciò che significa è che ora nella condizione post abbiamo X's. Ora quelle x se non avessimo il compito non avremmo dovuto avere il valore di $ e $ I.e. Ci "annulla" solo il comando sostitutivo / assegnazione del comando di assegnazione. Non tutte le altre espressioni casuali e. In breve, l'unico modo per sapere dove posizionare l'E corretto è iniziando nella condizione post dopo che l'incarico è stato fatto, quindi iniziando da lì posto E. Se lo facciamo all'indietro, potremmo sostituire E 'che non volevamo sostituire (anche se erano probabilmente vere, che immagino che dovrebbero dal momento che dovremmo dire x tiene il valore E dopo aver assegnato E a X).
Altri suggerimenti
Supponiamo che stiamo eseguendo il programma x := e
e lascia che $ \ sigma $ essere lo stato iniziale e $ \ sigma ' $ essere lo stato finale.
L'intuizione cruciale qui è: il valore della $ x $ nella finale stato $ \ Sigma '$ è uguale al valore dell'espressione $ e $ nella iniziale stato $ \ Sigma $ . Infatti, quest'ultimo è il valore che assegniamo a $ x $ con il comando x := e
.
quindi, se $ P (-) $ è una proprietà su valori, la formula $ P (\ MBOX { $ x $ -in-the-final-state}) $ equivalente a $ p (\ mbox {$ e $ -in-the-statel-state}) $ . In altre parole $ p (x) $ in postcondition (in stato $ \ Sigma ' $ ) è davvero equivalente a $ p (e) $ nel preliminare (in stato $ \ Sigma $ ).
L'utilizzo della sostituzione è solo un modo più formale per considerare la postcondition come "formula che dipende da $ x $ ", cioè come $ P (x) $ , quindi richiede $ P (e) $ come precondizione.