Uma regra de quadro , como a fornecida abaixo, captura a idéia de que, dado um programa c
com pré-condição p
que é mantida antes da execução e pós-condição q
que é r
mantida posteriormente, alguma condição de desarticulação deve ser mantida antes e depois da c
execução. (O *
conectivo exige que seus argumentos sejam disjuntos.) Freqüentemente, as pré e pós-condições são estados de um heap e c
é um programa eficaz que modifica o heap de alguma maneira.
{p} c {q}
----------------- (where no free variable in r is modified by c)
{p * r} c {q * r}
As discussões sobre a regra de estrutura que eu sempre vi parecem focar em como a parte separada da pilha r
é preservada. Isso permite o "raciocínio local": ao raciocinar sobre o efeito que isso c
causa, podemos desconsiderar a r
parte do heap e nos preocupar apenas com a parte que realmente muda. Mas outra maneira de ver é que a mudança de p
paraq
é preservada, mesmo que r
agora esteja lá. Em outras palavras, é importante que terminemos com a pós-condição {q * r}
, e não {q' * r}
com outras q'
.
Então, minha pergunta é se existe qualquer tratamento da regra quadro que discute ou faz uso da preservação-de-change-de- p
Para- q
coisa.