Règle de trame comme serveur de changement?


18

Une règle de trame , comme celle donnée ci-dessous, capture l'idée que, étant donné un programme cavec une précondition pqui tient avant qu'il s'exécute et une postcondition qqui tient après, une condition disjointe rdevrait tenir à la fois avant et après les cexécutions. (Le *connectif nécessite que ses arguments soient disjoints.) Souvent, les pré- et post-conditions sont des états d'un tas, et cest un programme efficace qui modifie le tas d'une manière ou d'une autre.

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

Les discussions sur la règle de trame que j'ai vues semblent toujours se concentrer sur la façon dont la partie disjointe du tas rest préservée. Cela permet un «raisonnement local»: lorsque nous raisonnons sur l'effet qui en crésulte, nous pouvons ignorer la rpartie du tas et ne nous préoccuper que de la partie qui change réellement. Mais une autre façon de voir les choses est que le changement de pàq est conservé, même s'il rest maintenant là. En d'autres termes, il est important que nous nous retrouvions avec la postcondition {q * r}, plutôt que {q' * r}pour une autre q'.

Donc, ma question est de savoir s'il y a un traitement de la règle de cadre qui traite ou fait usage de la conservation-de-changement From- p-à- qchose.


Une réponse à ma propre question se trouve dans cet article: software.imdea.org/~gotsman/papers/interproc-sas06.pdf , dans la phrase (soulignement le mien) "Si P s'assure que l'empreinte de C est allouée, alors selon Frame, exécutant C en présence de mémoire supplémentaire R entraîne le même comportement et C ne touche pas à la mémoire supplémentaire. " C'est que "entraîne le même comportement" que je cherchais quelqu'un à signaler, en plus de "C ne touche pas la mémoire supplémentaire". (Merci à @kaosjester pour le lien.)
Lindsey Kuper

1
Si vous lisez les preuves de solidité de la règle de trame et d'autres règles de la logique de séparation, vous découvrirez qu'elles font exactement ce que vous recherchez, c'est-à-dire qu'elles parlent de la façon dont le changement de en est préservé. Faites attention aux propriétés de la localité et du cadre qui y sont mentionnées. qpq
Uday Reddy du

Réponses:


11

Mais cette qpropriété sans changement ne tient pas vraiment!

Considérez {emp} x := alloc(0) {x |-> 0}. Maintenant, si j'encadre y |-> 3, je reçois

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

mais, par la règle de conséquence, je pourrais changer la postcondition en

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

Pour rendre cela plus concret, supposons que yc'est le nombre 37. Lorsque j'exécute la commande d'allocation dans un tas complètement vide, il est possible que je finisse par allouer une adresse 37, de sorte que x = 37. Mais, si je commence plutôt par un tas contenant une seule cellule à l'adresse y = 37, ce résultat n'est plus possible! L'ajout d'un cadre à la précondition a taillé une partie du non-déterminisme dans la postcondition.

L'article «Action locale et logique de séparation abstraite» (Calcagno, O'Hearn et Yang) porte sur la compréhension de la règle du cadre dans une perspective sémantique plus profonde. La définition clé de l'article est la localité des «actions», où une action est (la représentation sémantique d'un) programme. La localité dit que lorsque vous ajoutez un tas de trames, la seule façon de modifier la postcondition d'origine est d'élaguer un certain non-déterminisme comme ci-dessus. Et, en fait, l'élagage ne se produit qu'en raison de l'allocation.


Merci pour l'exemple et pour la référence! Votre exemple est logique. Est-il juste de dire, cependant, que qcela ne peut que devenir " q, et aussi ..."? Et, en outre, si l'allocation est la seule chose qui peut tailler le non-déterminisme dans la postcondition (qui est un résultat cool en soi), alors, s'il y a une partie de la postcondition qui est indépendante de l'emplacement, alors c'est cette partie de la postcondition garanti de rester le même? Peut-on dire que la postcondition reste la même jusqu'à l'alpha-renommage des lieux? (J'ai un exemple en tête, mais c'est peut-être mieux expliqué par e-mail.)
Lindsey Kuper

1
Oui, qne peut que changer en " q, et aussi ..." En d'autres termes, la postcondition ne peut que devenir plus forte : elle impliquera la postcondition d'origine. Cela fait partie de la définition de la localité pour les actions. Il n'est pas vrai, cependant, que la modification de la postcondition soit uniquement liée au changement de nom. Dans l'exemple que j'ai donné, le fait supplémentaire que xet ysont distincts est vrai quelle que soit l'adresse particulière choisie y. L'exemple capture la fraîcheur de l'allocation, qui est invariante lors du renommage.
Aaron Turon

11

Premièrement, il y a une petite idée fausse dans l'énoncé de votre question, c'est ce qu'Aaron voulait également dire dans sa réponse. Les prédicats dans la logique de séparation sont des ensembles de tas (ou de manière équivalente, des prédicats sur les tas), et la conjonction de séparation est définie comme:PQ

PR{h1h2|h1Ph2Rom(h1)om(h2)=}

Donc, dans la règle du cadre

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

(et P et Q ) ne parlent pas de tas spécifiques --- ce sont despropriétésde tas (puisque les sous-ensembles et les prédicats sont équivalents). La meilleure façon de comprendre ce qui se passe est de regarder la définition de ce que signifie pour un triple Hoare:RPQ

{P}c{Q}h1P.hHeunepsth#h1.h2Q.h1h;ch2h;skjep

Cette définition dit essentiellement que (1) si vous exécutez avec n'importe quel h 1 dans P , alors vous finirez dans un état final h 2 dans Q , et (2) si vous ajoutez de la mémoire supplémentaire h ' , cette mémoire sera être inchangé à la fin de la course. Mais notez que le h 2 spécifique que vous obtenez peut différer, pour différents choix de h --- ce qui est garanti est que les propriétés P et Q continueront de se prolonger, pas que vous obteniez exactement le même tas de résultats.ch1Ph2Qh h2h PQ

Ce n'est pas trop difficile, mais ça vaut quand même la peine d'être étudié, pour voir comment cette définition du triple de Hoare implique que la règle de trame tient. Comme vous le constatez, il s'agit d'une sorte de propriété de "préservation des modifications", et elle a une expression particulièrement vivante dans l'énoncé de la règle de composition parallèle dans la logique de séparation simultanée:

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

Si et c 2 agissent sur des régions de mémoire disjointes, alors chacune n'interfère pas avec les propriétés de l'exécution de l'autre lorsqu'elles sont exécutées en parallèle.c1c2

Il y a une discussion à ce sujet dans l'article de Hoare et al, On Locality and the Exchange Law for Concurrent Processes , où ils montrent comment donner une algèbre fusionnée de programmes et d'assertions.


La définition des triplets Hoare semble erronée: cela devrait dire que l'exécution n'est pas défectueuse, elle devrait permettre la non-terminaison, elle ne devrait probablement pas empêcher les modèles qui n'ont pas de monotonie de sécurité. (Mais, oui, je suis d'accord, il est parfaitement raisonnable de parler de "préservation des changements" pour les raisons que vous expliquez.)
Radu GRIGore

3
(1) J'ai donné la sémantique pour des triplets d'exactitude totale, et donc elle affirme que la commande s'exécute en toute sécurité - je trouve que l'exactitude totale facilite l'explication du caractère forall / exist des pré et post-conditions. (2) Cette sémantique des triplets a en fait été inventée (IIRC par Birkedal et Yang) pour gérer les langues qui n'ont pas de monotonie de sécurité dans la sémantique des langues, en l'intégrant dans le sens des triplets. Par conséquent, vous pouvez avoir des constructions non monotones (par exemple, des requêtes sur la taille du tas) dans le langage, tout en ayant la règle de trame pour la logique Hoare.
Neel Krishnaswami

c

1
Merci, Neel! Vous avez raison, je confondais les propriétés P et Q avec des tas spécifiques. Donc, pour résumer votre commentaire: Q est préservé, mais le tas particulier que vous obtenez à la fin pourrait être un tas satisfaisant Q différent de celui que vous obteniez auparavant. Oui?
Lindsey Kuper

1
@RaduGRIGore: oui, je supposais que le langage était déterministe, et cette hypothèse échouera lorsque nous ajouterons la concurrence. Belle prise!
Neel Krishnaswami du

2

Bien que n'étant pas lié à 100%, cela a la saveur de l'idempotence du contrat.

Si nous considérons {p} comme une condition préalable sur c et {q} comme une condition préalable sur c, cette idée d'une règle de trame garantirait que les conditions préalables et postérieures sont valables dans tous les contextes de calcul, pas le cas simple où rien d'autre n'existe.

Cela dit, je ne peux pas dire que j'ai vu une telle règle de cadre présentée dans les dizaines de documents contractuels que j'ai lus. C'est certainement une excellente idée, cependant, et exiger un tel changement peut grandement contribuer à développer une compréhension raisonnable et tangible des contrats idempotents .


Merci pour le commentaire. Hm, intéressant - je me demande si quelqu'un d'autre qui lit ceci connaît des documents contractuels qui indiquent les propriétés du cadre.
Lindsey Kuper
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.