Una regola di frame , come quella indicata di seguito, cattura l'idea che, dato un programma c
con precondizione p
che vale prima che venga eseguito e postcondizione q
che detiene in seguito, alcune condizioni disgiunte r
dovrebbero contenere sia prima che dopo l' c
esecuzione. (La *
connettiva richiede che i suoi argomenti siano disgiunti.) Spesso, pre e postcondizioni sono stati di un heap ed c
è un programma efficace che modifica l'heap in qualche modo.
{p} c {q}
----------------- (where no free variable in r is modified by c)
{p * r} c {q * r}
Le discussioni sulla regola del frame che ho visto sembrano sempre focalizzarsi su come r
viene preservata la parte sconnessa dell'heap . Questo abilita il "ragionamento locale": quando ragioniamo sull'effetto che c
ha, possiamo ignorare la r
parte dell'heap e preoccuparci solo della parte che effettivamente cambia. Ma un altro modo di vederlo è che il cambiamento da p
aq
è preservato, anche se r
ora è seduto lì. In altre parole, è importante che finiamo con la postcondizione {q * r}
, piuttosto che {q' * r}
per qualcun altro q'
.
Quindi, la mia domanda è se c'è qualche trattamento della regola telaio che discute o si avvale della conservazione di variazione-da- p
-a- q
cosa.