Una regla de trama , como la que se muestra a continuación, captura la idea de que, dado un programa c
con una condición previa p
que se cumple antes de que se ejecute y q
una condición posterior que se cumple después, alguna condición disjunta r
debe mantenerse antes y después de las c
ejecuciones. (El *
conectivo requiere que sus argumentos sean disjuntos). A menudo, las condiciones previas y posteriores son estados de un montón, y c
es un programa eficaz que modifica el montón de alguna manera.
{p} c {q}
----------------- (where no free variable in r is modified by c)
{p * r} c {q * r}
Las discusiones sobre la regla del marco que he visto siempre parecen centrarse en cómo r
se preserva la parte disjunta del montón . Esto permite el "razonamiento local": cuando razonamos sobre el efecto que c
tiene, podemos ignorar la r
parte del montón y solo preocuparnos por la parte que realmente cambia. Pero otra forma de verlo es que el cambio de p
aq
se conserva, a pesar de r
que ahora está sentado allí. En otras palabras, es importante que terminemos con la condición posterior {q * r}
, en lugar de {q' * r}
por alguna otra q'
.
Entonces, mi pregunta es si hay algún tratamiento de la regla del marco que discuta o haga uso de la preservación del cambio de p
una q
cosa a otra.