Eine Rahmenregel wie die folgende fängt die Idee ein, dass bei einem Programm cmit einer Vorbedingung p, die vor der Ausführung qgilt, und einer Nachbedingung , die nach der Ausführung gilt, eine disjunkte Bedingung rsowohl vor als auch nach der cAusführung gelten sollte. (Der *Konnektiv erfordert, dass seine Argumente nicht zusammenhängend sind.) Oft sind die Vor- und Nachbedingungen Zustände ceines Heapspeichers und ein wirksames Programm, das den Heapspeicher auf irgendeine Weise modifiziert.
{p} c {q}
----------------- (where no free variable in r is modified by c)
{p * r} c {q * r}
Diskussionen über die Rahmenregel, die ich gesehen habe, scheinen sich immer darauf zu konzentrieren, wie der disjunkte Teil des Haufens rerhalten bleibt. Dies ermöglicht "lokales Denken": Wenn cwir über den Effekt nachdenken, können wir den rTeil des Haufens ignorieren und uns nur mit dem Teil befassen, der sich tatsächlich ändert. Aber eine andere Sichtweise ist, dass der Wechsel von pzuq erhalten bleibt, obwohl rjetzt dort gesessen wird. Mit anderen Worten, es ist wichtig, dass wir am Ende die Nachbedingung {q * r}haben und nicht {q' * r}für eine andere q'.
Meine Frage ist also, ob es eine Behandlung der Rahmenregel gibt, die den Erhalt der Veränderung von petwas zu qetwas bespricht oder nutzt .