Regra de quadro como um preservador de alterações?


18

Uma regra de quadro , como a fornecida abaixo, captura a idéia de que, dado um programa ccom pré-condição pque é mantida antes da execução e pós-condição qque é rmantida posteriormente, alguma condição de desarticulação deve ser mantida antes e depois da cexecuçã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 ccausa, podemos desconsiderar a rparte do heap e nos preocupar apenas com a parte que realmente muda. Mas outra maneira de ver é que a mudança de pparaq é preservada, mesmo que ragora 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- pPara- qcoisa.


Uma resposta para minha própria pergunta está neste artigo: software.imdea.org/~gotsman/papers/interproc-sas06.pdf , na frase (ênfase minha) "Se P garantir que a pegada de C seja alocada, então de acordo com Frame, executando C na presença de memória adicional R resulta no mesmo comportamento e C não toca na memória extra. " É que "resulta no mesmo comportamento" que eu estava procurando por alguém para apontar, além de apenas "C não toca na memória extra". (Graças a @kaosjester para o link.)
Lindsey Kuper

1
Se você ler as provas de integridade da regra do quadro e outras regras da Lógica de separação, descobrirá que elas estão fazendo exatamente o que você procura, ou seja, elas falam sobre como a mudança de para q é preservada. Preste atenção à localidade e às propriedades do quadro mencionadas lá. pq
Uday Reddy

Respostas:


11

Mas essa mudança de qpropriedade não é realmente válida!

Considere {emp} x := alloc(0) {x |-> 0}. Agora, se eu enquadrar y |-> 3, eu recebo

{y |-> 3} x := alloc(0) {x |-> 0 * y |-> 3}

mas, pela regra da conseqüência, eu poderia mudar a pós-condição para

{y |-> 3} x := alloc(0) {(x |-> 0 /\ x != y) * y |-> 3}

Para tornar isso mais concreto, suponha que yseja o número 37. Quando eu executo o comando de alocação em uma pilha completamente vazio, é possível que eu vou acabar alocação de endereços 37, de modo que x = 37. Mas, se eu começar com um heap contendo uma única célula no endereço y = 37, esse resultado não será mais possível! A adição de um quadro à pré-condição eliminou parte do não-determinismo na pós-condição.

O artigo "Ação local e lógica abstrata de separação" (Calcagno, O'Hearn e Yang) trata da compreensão da regra do quadro a partir de uma perspectiva semântica mais profunda. A principal definição do artigo é localidade para "ações", onde uma ação é (a representação semântica de) um programa. A localidade diz que, quando você adiciona alguma pilha de quadros, a única maneira pela qual a pós-condição original pode ser alterada é removendo algum não-determinismo como acima. E, de fato, a poda só surge por causa da alocação.


Obrigado pelo exemplo e pela referência! Seu exemplo faz sentido. É justo dizer, porém, que isso qsó pode mudar para " qe também ..."? Além disso, se alocação é a única coisa que pode remover o não-determinismo na pós-condição (o que é um resultado interessante por si só), então, se houver alguma parte da pós-condição independente da localização, essa parte da pós-condição garantido para permanecer o mesmo? Podemos dizer que a pós-condição permanece a mesma até a renomeação alfa de locais? (Eu tenho um exemplo em mente, mas talvez isto é melhor explicada por e-mail.)
Lindsey Kuper

1
Sim, qsó pode mudar para " q, e também ..." Em outras palavras, a pós-condição só pode se tornar mais forte : implicará a pós-condição original. Isso faz parte da definição de localidade para ações. Não é verdade, porém, que a alteração na pós-condição esteja ligada apenas à renomeação. No exemplo que dei, o fato extra de que xe ydistintos são verdadeiros, independentemente do endereço específico escolhido y. O exemplo captura a atualização da alocação, que é invariável sob a renomeação.
Aaron Turon

11

PQ

PR{h1h2|h1Ph2Rdom(h1)dom(h2)=}

Então, na regra do quadro

{P}c{Q}{PR}c{QR}

P QR (e e ) não estão falando sobre pilhas específicas - elas são propriedades das pilhas (já que subconjuntos e predicados são equivalentes). A melhor maneira de entender o que está acontecendo é analisando a definição do que significa para um Hoare triplo:PQ

{P}c{Q}h1P.hHeaps.t.h#h1.h2Q.h1h;ch2h;skip

Essa definição basicamente diz que (1) se você executar com qualquer em , terminará em algum estado final em e (2) se adicionar alguma memória extra , essa memória permanecerá inalterada no final da corrida. Mas observe que o específico que você obtém pode diferir, para diferentes opções de --- o que está sendo garantido é que as propriedades e continuem sendo mantidas em extensão, não que você obtenha exatamente o mesmo resultado.h 1 P h 2 Q h ch1Ph2Qh h h2h QPQ

Não é muito difícil, mas ainda vale a pena trabalhar, para ver como essa definição de Hoare tripla implica que a regra do quadro é válida. Como você observa, esse é um tipo de propriedade "preservação de alterações" e tem uma expressão particularmente vívida na declaração da regra de composição paralela na lógica de separação simultânea:

{P1}c1{Q1}{P2}c2{Q2}{P1P2}c1||c2{Q1Q2}

Se e agirem em regiões separadas da memória, cada uma delas não interferirá nas propriedades da execução da outra quando executadas em paralelo.c 2c1c2

Há uma discussão sobre isso no artigo de Hoare et al., On Locality e Exchange Law for Concurrent Processes , onde eles mostram como fornecer uma álgebra mesclada de programas e asserções.


A definição de Hoare triplica parece errada: deve-se dizer que a execução não falha, deve permitir a não-terminação, provavelmente não deve excluir modelos que não possuem monotonicidade de segurança. (Mas, sim, eu concordo que é perfeitamente razoável para falar sobre "preservação-de-alterações" para as razões que você explicar.)
Radu Grigore

3
(1) Dei a semântica para a correção total tripla e, portanto, afirma que o comando é concluído com segurança - acho que a correção total facilita a visualização do caráter forex / existente das condições pré e pós-condições. (2) Essa semântica de triplos foi realmente inventada (IIRC por Birkedal e Yang) para lidar com idiomas que não possuem monotonicidade de segurança na semântica de idiomas, construindo-o no significado de triplos. Como resultado, você pode ter construções não monotônicas (por exemplo, consultas sobre o tamanho da pilha) no idioma, enquanto ainda possui a regra de quadro para a lógica Hoare.
Neel Krishnaswami

(1) OK, mas esses triplos são escritos de maneira diferente. (2) eu não sabia disso. Para reformular o que você disse: sem monotonicidade, você poderia perder a regra do quadro e continuar usando os triplos Hoare, como de costume, que era o que eu estava obtendo no primeiro comentário, mas você também poderia reforçar a definição de triplo para recuperar o regra de quadro. (3) Não vejo por que exclui falhas. Você assume que é determinístico? c
Radu GRIGore

1
Obrigado Neel! Você está certo, eu estava misturando as propriedades P e Q com montes específicos. Portanto, para resumir seu comentário: Q é preservado, mas a pilha específica que você obtém no final pode ser uma pilha diferente de Q que satisfaz a que estava recebendo antes. Sim?
Lindsey Kuper

1
@RaduGRIGore: sim, eu estava assumindo que o idioma era determinístico, e essa suposição falhará quando adicionarmos simultaneidade. Boa pegada!
Neel Krishnaswami

2

Embora não esteja 100% relacionado, isso tem o sabor da idempotência do contrato.

Se pensarmos em {p} como uma pré-condição em c e {q} como uma pós-condição em c, essa ideia de regra de quadro garantiria que as pré e pós-condições sejam válidas em todos os contextos computacionais, não o caso simples onde nada mais existe.

Dito isto, não posso dizer que vi uma regra desse tipo apresentada em qualquer uma das dezenas de documentos contratuais que li. É certamente uma ótima idéia, porém, e exigir tal mudança pode fazer muito para o desenvolvimento de um entendimento razoável e tangível dos contratos idempotentes .


Obrigado pelo comentário. Hum, interessante - eu me pergunto se alguém mais lendo isso sabe de papéis contratuais que afirmam propriedades de estrutura.
Lindsey Kuper
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.