Eine Rahmenregel wie die folgende fängt die Idee ein, dass bei einem Programm c
mit einer Vorbedingung p
, die vor der Ausführung q
gilt, und einer Nachbedingung , die nach der Ausführung gilt, eine disjunkte Bedingung r
sowohl vor als auch nach der c
Ausführung gelten sollte. (Der *
Konnektiv erfordert, dass seine Argumente nicht zusammenhängend sind.) Oft sind die Vor- und Nachbedingungen Zustände c
eines 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 r
erhalten bleibt. Dies ermöglicht "lokales Denken": Wenn c
wir über den Effekt nachdenken, können wir den r
Teil des Haufens ignorieren und uns nur mit dem Teil befassen, der sich tatsächlich ändert. Aber eine andere Sichtweise ist, dass der Wechsel von p
zuq
erhalten bleibt, obwohl r
jetzt 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 p
etwas zu q
etwas bespricht oder nutzt .