Regola frame come conservatore di modifiche?


18

Una regola di frame , come quella indicata di seguito, cattura l'idea che, dato un programma ccon precondizione pche vale prima che venga eseguito e postcondizione qche detiene in seguito, alcune condizioni disgiunte rdovrebbero contenere sia prima che dopo l' cesecuzione. (La *connettiva richiede che i suoi argomenti siano disgiunti.) Spesso, pre e postcondizioni sono stati di un heap ed cè un programma efficace che modifica l'heap in qualche modo.

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

Le discussioni sulla regola del frame che ho visto sembrano sempre focalizzarsi su come rviene preservata la parte sconnessa dell'heap . Questo abilita il "ragionamento locale": quando ragioniamo sull'effetto che cha, possiamo ignorare la rparte dell'heap e preoccuparci solo della parte che effettivamente cambia. Ma un altro modo di vederlo è che il cambiamento da paq è preservato, anche se rora è seduto lì. In altre parole, è importante che finiamo con la postcondizione {q * r}, piuttosto che {q' * r}per qualcun altro q'.

Quindi, la mia domanda è se c'è qualche trattamento della regola telaio che discute o si avvale della conservazione di variazione-da- p-a- qcosa.


Una risposta alla mia domanda è in questo documento: software.imdea.org/~gotsman/papers/interproc-sas06.pdf , nella frase (sottolineatura mia) "Se P assicura che l'impronta di C sia allocata, quindi secondo Frame, eseguendo C in presenza di memoria aggiuntiva R determina lo stesso comportamento e C non tocca la memoria aggiuntiva. " È "il risultato nello stesso comportamento" che stavo cercando qualcuno da segnalare, oltre a "C non tocca la memoria aggiuntiva". (Grazie a @kaosjester per il link.)
Lindsey Kuper,

1
Se leggi le prove di solidità della regola del frame e di altre regole della Separation Logic, scoprirai che stanno facendo esattamente quello che stai cercando, cioè, parlano di come viene conservato il cambiamento da a q . Prestare attenzione alla località e alle proprietà della cornice menzionate qui. pq
Uday Reddy,

Risposte:


11

Ma questa non modifica a qproprietà in realtà non regge!

Prendere in considerazione {emp} x := alloc(0) {x |-> 0}. Ora, se inquadra y |-> 3, ottengo

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

ma, per regola di conseguenza, potrei cambiare la postcondizione in

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

Per rendere questo più concreto, supponiamo che ysia il numero 37. Quando eseguo il comando di allocazione in un heap completamente vuoto, è possibile che finisca per assegnare l'indirizzo 37, in modo che x = 37. Ma, invece, se inizio con un heap contenente una singola cella all'indirizzo y = 37, questo risultato non è più possibile! L'aggiunta di un frame alla precondizione ha eliminato parte del non determinismo nel postcondizionato.

Il documento "L'azione locale e la logica di separazione astratta" (Calcagno, O'Hearn e Yang) è incentrato sulla comprensione della regola del quadro da una prospettiva più profonda e semantica. La definizione chiave del documento è località per "azioni", in cui un'azione è (la rappresentazione semantica di) un programma. La località afferma che quando si aggiunge un heap di frame, l' unico modo in cui è possibile modificare la postcondizione originale è la potatura del non determinismo come sopra. E, in effetti, la potatura nasce solo a causa dell'allocazione.


Grazie per l'esempio e per il riferimento! Il tuo esempio ha senso. È giusto dire, tuttavia, che qpuò solo cambiare in " q, e anche ..."? E, inoltre, se l'allocazione è l'unica cosa che può eliminare il non determinismo nel postcondizionato (che è un risultato interessante in sé), allora, se c'è una parte del postcondizionamento indipendente dalla posizione, allora quella parte del postcondizionato garantito di rimanere lo stesso? Possiamo dire che il postcondition rimane lo stesso fino alla ridenominazione alfa delle posizioni? (Ho in mente un esempio, ma forse questo è meglio spiegato via e-mail.)
Lindsey Kuper,

1
Sì, qpuò solo cambiare in " q, e anche ..." In altre parole, la postcondizione può solo diventare più forte : implicherà la postcondizione originale. Questo fa parte della definizione di località per le azioni. Non è vero, tuttavia, che la modifica alla postcondizione è legata solo alla ridenominazione. Nell'esempio ho dato, il fatto che supplementare xe ysiano distinti è vero a prescindere dal particolare indirizzo scelto per y. L'esempio cattura la freschezza dell'allocazione, che è invariante con la ridenominazione.
Aaron Turon,

11

In primo luogo, c'è un piccolo malinteso nella dichiarazione della tua domanda, che è anche quello che Aaron stava ottenendo nella sua risposta. I predicati nella logica di separazione sono insiemi di cumuli (o equivalentemente, predicati su cumuli) e la congiunzione di separazione è definita come:PQ

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

Quindi nella regola del frame

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

(e P e Q ) non parlano di cumuli specifici --- sonoproprietàdi cumuli (poiché sottoinsiemi e predicati sono equivalenti). Il modo migliore per capire cosa sta succedendo è guardando la definizione di cosa significa per una tripla Hoare:RPQ

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

Questa definizione dice sostanzialmente che (1) se esegui con qualsiasi h 1 in P , finirai in qualche stato finale h 2 in Q e (2) se aggiungi una memoria aggiuntiva h , quella memoria essere invariato alla fine della corsa. Ma nota che l' h 2 specifico che ottieni può differire, per le diverse scelte di h --- ciò che viene garantito è che le proprietà P e Q continueranno a rimanere sotto l'estensione, non che ottieni esattamente lo stesso risultato heap.ch1Ph2Qh h2h PQ

Non è troppo difficile, ma vale comunque la pena allenarsi, per vedere come questa definizione di Hoare triple implica che la regola del frame è valida. Come notate, questa è una sorta di proprietà di "conservazione dei cambiamenti" e ha un'espressione particolarmente vivida nell'affermazione della regola di composizione parallela nella logica di separazione concorrente:

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

Se e c 2 agiscono su regioni disgiunte di memoria, ognuna non interferirà con le proprietà dell'esecuzione dell'altra quando vengono eseguite in parallelo.c1c2

C'è una discussione di questo nel documento di Hoare et al, On Locality e Exchange Law for Concurrent Processes , in cui mostrano come dare una algebra unita di programmi e asserzioni.


La definizione di triple Hoare sembra errata: dovrebbe dire che l'esecuzione non è in errore, dovrebbe consentire la non terminazione, probabilmente non dovrebbe precludere i modelli che non hanno monotonicità di sicurezza. (Ma sì, sono d'accordo che sia perfettamente ragionevole parlare di "conservazione dei cambiamenti" per i motivi che spieghi.)
Radu GRIGore,

3
(1) Ho dato la semantica per le triple di correttezza totale, e quindi afferma che il comando si completa in modo sicuro - Trovo che la correttezza totale renda più facile vedere il carattere forall / esistere di pre e post-condizioni. (2) Questa semantica delle triple è stata effettivamente inventata (IIRC da Birkedal e Yang) per gestire le lingue che non hanno una monotonia di sicurezza nella semantica della lingua, costruendola nel significato delle triple. Di conseguenza, è possibile avere costrutti non monotonici (ad esempio, query su quanto sia grande l'heap) nella lingua, pur mantenendo la regola dei frame per la logica Hoare.
Neel Krishnaswami,

c

1
Grazie Neel! Hai ragione, stavo fondendo le proprietà P e Q con cumuli specifici. Quindi, per riassumere il tuo commento: Q è conservato, ma la particolare mucchio che si ottiene alla fine potrebbe essere un diverso mucchio Q-appagante che si stavano diventando prima. Sì?
Lindsey Kuper,

1
@RaduGRIGore: sì, stavo assumendo che il linguaggio fosse deterministico, e questo presupposto fallirà quando si aggiunge la concorrenza. Bella presa!
Neel Krishnaswami,

2

Sebbene non sia collegato al 100%, questo ha il sapore dell'idempotenza del contratto.

Se pensiamo a {p} come pre-condizione su c e {q} come post-condizione su c, questa idea di una regola quadro garantirebbe che le condizioni pre e post siano valide in ogni contesto di calcolo, non il semplice caso in cui non esiste nient'altro.

Detto questo, non posso dire di aver visto una tale regola quadro presentata in una delle dozzine di documenti contrattuali che ho letto. È certamente una grande idea, tuttavia, e richiedere un simile cambiamento può fare molto per lo sviluppo di una comprensione ragionevole e tangibile dei contratti idempotenti .


Grazie per il commento. Hm, interessante - Mi chiedo se qualcun altro leggendo questo sappia di documenti contrattuali che affermano le proprietà del frame.
Lindsey Kuper,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.