Reguła rama , jak ten podany poniżej, oddaje ideę, że, biorąc pod uwagę program c
z warunkiem p
, że posiada zanim skończy i postcondition q
która posiada potem jakiś warunek rozłączne r
powinny utrzymać zarówno przed jak i po c
serii. ( *
Łącznik wymaga, aby jego argumenty były rozłączne.) Często warunki wstępne i końcowe są stanami stosu i c
jest 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ć r
część sterty i zajmować się tylko tą częścią, która faktycznie się zmienia. Ale innym sposobem na to jest to, że zmiana z p
naq
została zachowana, mimo że r
teraz 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 p
do q
rzeczy.