Reguła rama , jak ten podany poniżej, oddaje ideę, że, biorąc pod uwagę program cz warunkiem p, że posiada zanim skończy i postcondition qktóra posiada potem jakiś warunek rozłączne rpowinny utrzymać zarówno przed jak i po cserii. ( *Łącznik wymaga, aby jego argumenty były rozłączne.) Często warunki wstępne i końcowe są stanami stosu i cjest to skuteczny program, który w pewien sposób modyfikuje stos.
{p} c {q}
----------------- (where no free variable in r is modified by c)
{p * r} c {q * r}
Dyskusje na temat reguły ramki, którą widziałem, zawsze koncentrują się na tym, jak zachowana jest rozłączna część stosu r. Umożliwia to „lokalne rozumowanie”: gdy zastanawiamy się nad efektem c, możemy zignorować rczęść sterty i zajmować się tylko tą częścią, która faktycznie się zmienia. Ale innym sposobem na to jest to, że zmiana z pnaq została zachowana, mimo że rteraz tam jest. Innymi słowy, ważne jest, abyśmy skończyli z warunkiem {q * r}, a nie {q' * r}z innymi q'.
Moje pytanie brzmi więc, czy istnieje jakikolwiek sposób traktowania reguły ramowej, który omawia lub wykorzystuje zachowanie zachowania zmiany od rzeczy pdo qrzeczy.