¿Regla de trama como conservador de cambios?


18

Una regla de trama , como la que se muestra a continuación, captura la idea de que, dado un programa ccon una condición previa pque se cumple antes de que se ejecute y quna condición posterior que se cumple después, alguna condición disjunta rdebe mantenerse antes y después de las cejecuciones. (El *conectivo requiere que sus argumentos sean disjuntos). A menudo, las condiciones previas y posteriores son estados de un montón, y ces un programa eficaz que modifica el montón de alguna manera.

    {p} c {q}
----------------- (where no free variable in r is modified by c)
{p * r} c {q * r}

Las discusiones sobre la regla del marco que he visto siempre parecen centrarse en cómo rse preserva la parte disjunta del montón . Esto permite el "razonamiento local": cuando razonamos sobre el efecto que ctiene, podemos ignorar la rparte del montón y solo preocuparnos por la parte que realmente cambia. Pero otra forma de verlo es que el cambio de paq se conserva, a pesar de rque ahora está sentado allí. En otras palabras, es importante que terminemos con la condición posterior {q * r}, en lugar de {q' * r}por alguna otra q'.

Entonces, mi pregunta es si hay algún tratamiento de la regla del marco que discuta o haga uso de la preservación del cambio de puna qcosa a otra.


Una respuesta a mi propia pregunta está en este documento: software.imdea.org/~gotsman/papers/interproc-sas06.pdf , en la oración (énfasis mío) "Si P asegura que la huella de C está asignada, entonces, según Frame, ejecuta C en presencia de memoria adicional R da como resultado el mismo comportamiento y C no toca la memoria adicional ". Es que "da como resultado el mismo comportamiento" que estaba buscando a alguien para señalar, además de "C no toca la memoria extra". (Gracias a @kaosjester por el enlace.)
Lindsey Kuper

1
Si lees las pruebas de solidez de la regla del marco y otras reglas de la lógica de separación, descubrirás que están haciendo exactamente lo que buscas, es decir, hablan sobre cómo se preserva el cambio de a q . Preste atención a la localidad y a las propiedades del marco mencionadas allí. pagq
Uday Reddy

Respuestas:


11

¡Pero este no-cambio-a- qpropiedad en realidad no se cumple!

Considere {emp} x := alloc(0) {x |-> 0}. Ahora, si enmarco y |-> 3, me sale

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

pero, por regla de consecuencia, podría cambiar la condición posterior a

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

Para hacer esto más concreto, supongamos que yes el número 37. Cuando ejecuto el comando de asignación en un montón completamente vacío, es posible que termine asignando direcciones 37, de modo que x = 37. Pero, si en cambio empiezo con un montón que contiene una sola celda en la dirección y = 37, ¡este resultado ya no es posible! Agregar un marco a la condición previa ha eliminado parte del no determinismo en la condición posterior.

El documento "Acción local y lógica de separación abstracta" (Calcagno, O'Hearn y Yang) trata de comprender la regla del marco desde una perspectiva semántica más profunda. La definición clave del documento es localidad para "acciones", donde una acción es (la representación semántica de) un programa. La localidad dice que cuando agrega un montón de marcos, la única forma en que se puede cambiar la condición posterior original es podando algo de no determinismo como se indicó anteriormente. Y, de hecho, la poda solo surge debido a la asignación.


Gracias por el ejemplo y por la referencia! Tu ejemplo tiene sentido. ¿Es justo decir, sin embargo, que qsolo puede cambiar a " q, y también ..."? Y, además, si la asignación es lo único que puede eliminar el no determinismo en la condición posterior (que es un resultado genial en sí mismo), entonces, si hay alguna parte de la condición posterior que es independiente de la ubicación, entonces esa parte de la condición posterior garantizado para permanecer igual? ¿Podemos decir que la condición posterior se mantiene igual hasta el cambio de nombre alfa de las ubicaciones? (Tengo un ejemplo en mente, pero tal vez esto se explica mejor por correo electrónico.)
Lindsey Kuper

1
Sí, qsolo puede cambiar a " q, y también ..." En otras palabras, la condición posterior solo puede fortalecerse : implicará la condición posterior original. Esto es parte de la definición de localidad para acciones. Sin embargo, no es cierto que el cambio a la condición posterior solo esté vinculado al cambio de nombre. En el ejemplo que di, el hecho adicional de que xy yson distintos es cierto independientemente de la dirección particular elegida y. El ejemplo captura la frescura de la asignación, que es invariable bajo el cambio de nombre.
Aaron Turon

11

Primero, hay un pequeño error en la declaración de su pregunta, que es a lo que Aaron también se refería en su respuesta. Los predicados en la lógica de separación son conjuntos de montones (o equivalente, predicados en montones), y la conjunción de separación se define como:PQ

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

Entonces en la regla del marco

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

(y P y Q ) no están hablando de montones específicos: sonpropiedadesde montones (ya que los subconjuntos y predicados son equivalentes). La mejor manera de entender lo que está sucediendo es ver la definición de lo que significa para un Hoare triple:RPQ

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

Esta definición básicamente dice que (1) si ejecuta con cualquier h 1 en P , entonces terminará en algún estado final h 2 en Q , y (2) si agrega cualquier memoria adicional h , esa memoria permanecer sin cambios al final de la carrera. Pero tenga en cuenta que el h 2 específico que obtiene puede diferir, para diferentes opciones de h --- lo que se garantiza es que las propiedades P y Q continuarán manteniéndose bajo extensión, no que obtenga exactamente el mismo montón de resultados.ch1Ph2Qh h2h PQ

No es demasiado difícil, pero vale la pena resolverlo, para ver cómo esta definición de Hoare triple implica que se cumple la regla del marco. Como observa, este es un tipo de propiedad de "preservación de cambios", y tiene una expresión particularmente vívida en la declaración de la regla de composición paralela en la lógica de separación concurrente:

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

Si y c 2 actúan sobre regiones disjuntas de memoria, entonces cada uno no interferirá con las propiedades de la ejecución del otro cuando se ejecutan en paralelo.c1c2

Hay una discusión sobre esto en el documento de Hoare et al, sobre la localidad y la ley de intercambio para procesos concurrentes , donde muestran cómo dar un álgebra combinada de programas y afirmaciones.


La definición de triples de Hoare parece incorrecta: debería decir que la ejecución no falla, debería permitir la no terminación, probablemente no debería excluir modelos que no tienen monotonicidad de seguridad. (Pero sí, estoy de acuerdo en que es perfectamente razonable hablar de "preservación de los cambios" por las razones que usted explica).
Radu GRIGore

3
(1) Di la semántica para que la corrección total se triplique y, por lo tanto, afirma que el comando se completa de forma segura: encuentro que la corrección total hace que sea más fácil de ver el carácter general de las condiciones previas y posteriores. (2) Esta semántica de triples fue realmente inventada (IIRC por Birkedal y Yang) para manejar idiomas que no tienen monotonicidad de seguridad en la semántica del lenguaje, incorporándola en el significado de triples. Como resultado, puede tener construcciones no monótonas (p. Ej., Consultas sobre qué tan grande es el montón) en el lenguaje, sin dejar de tener la regla de marco para la lógica Hoare.
Neel Krishnaswami

c

1
Gracias Neel! Tienes razón, estaba combinando las propiedades P y Q con montones específicos. Por lo tanto, para resumir su comentario: Q se conserva, pero el montón particular que obtiene al final podría ser un montón de satisfacción Q diferente al que tenía antes. ¿Si?
Lindsey Kuper

1
@RaduGRIGore: sí, estaba asumiendo que el lenguaje era determinista, y esta suposición fallará cuando agreguemos concurrencia. ¡Buena atrapada!
Neel Krishnaswami

2

Si bien no está 100% relacionado, tiene el sabor de la idempotencia contractual.

Si pensamos en {p} como una condición previa en c y {q} como una condición posterior en c, esta idea de una regla de trama garantizaría que las condiciones previas y posteriores se mantengan en cada contexto de cálculo, no El simple caso donde nada más existe.

Dicho esto, no puedo decir que haya visto tal regla marco presentada en ninguna de las docenas de documentos contractuales que he leído. Sin embargo, es una gran idea, y requerir tal cambio puede hacer mucho para desarrollar una comprensión razonable y tangible de los contratos idempotentes .


Gracias por el comentario. Hm, interesante. Me pregunto si alguien más que lea esto sabe de documentos contractuales que indiquen las propiedades del marco.
Lindsey Kuper
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.