Rahmenregel als Change-Preserver?


18

Eine Rahmenregel wie die folgende fängt die Idee ein, dass bei einem Programm cmit einer Vorbedingung p, die vor der Ausführung qgilt, und einer Nachbedingung , die nach der Ausführung gilt, eine disjunkte Bedingung rsowohl vor als auch nach der cAusführung gelten sollte. (Der *Konnektiv erfordert, dass seine Argumente nicht zusammenhängend sind.) Oft sind die Vor- und Nachbedingungen Zustände ceines Heapspeichers und ein wirksames Programm, das den Heapspeicher auf irgendeine Weise modifiziert.

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

Diskussionen über die Rahmenregel, die ich gesehen habe, scheinen sich immer darauf zu konzentrieren, wie der disjunkte Teil des Haufens rerhalten bleibt. Dies ermöglicht "lokales Denken": Wenn cwir über den Effekt nachdenken, können wir den rTeil des Haufens ignorieren und uns nur mit dem Teil befassen, der sich tatsächlich ändert. Aber eine andere Sichtweise ist, dass der Wechsel von pzuq erhalten bleibt, obwohl rjetzt dort gesessen wird. Mit anderen Worten, es ist wichtig, dass wir am Ende die Nachbedingung {q * r}haben und nicht {q' * r}für eine andere q'.

Meine Frage ist also, ob es eine Behandlung der Rahmenregel gibt, die den Erhalt der Veränderung von petwas zu qetwas bespricht oder nutzt .


Eine Antwort auf meine eigene Frage finden Sie in diesem Artikel: software.imdea.org/~gotsman/papers/interproc-sas06.pdf im Satz (Hervorhebung von mir) "Wenn P sicherstellt, dass der Footprint von C zugewiesen wird, wird gemäß Frame ausgeführt C bei Vorhandensein von zusätzlichem Speicher R führt zu demselben Verhalten , und C berührt den zusätzlichen Speicher nicht. " Es ist das "führt zu demselben Verhalten", auf das ich jemanden gesucht habe, der darauf hinweist, zusätzlich zu "C berührt nicht den zusätzlichen Speicher". (Danke an @kaosjester für den Link.)
Lindsey Kuper

1
Wenn Sie die Zuverlässigkeitsnachweise der Rahmenregel und anderer Regeln von Separation Logic durchlesen, werden Sie feststellen, dass sie genau das tun, wonach Sie suchen, dh, sie sprechen darüber, wie der Wechsel von zu erhalten bleibt. Achten Sie auf die dort genannten Fundstellen und Rahmeneigenschaften. qpq
Uday Reddy

Antworten:


11

Aber diese Unveränderlichkeit des qEigentums gilt nicht wirklich!

Überlegen Sie {emp} x := alloc(0) {x |-> 0}. Wenn ich mich einrahme y |-> 3, bekomme ich

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

aber nach der Regel der Konsequenz könnte ich die Nachbedingung auf ändern

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

Nehmen wir yzur Konkretisierung an, es sei die Zahl 37. Wenn ich den Zuweisungsbefehl in einem vollständig leeren Heap ausführe, kann es vorkommen, dass ich die Adresse zuordne 37, so dass x = 37. Wenn ich stattdessen mit einem Heap beginne, der eine einzelne Zelle unter der Adresse enthält y = 37, ist dieses Ergebnis nicht mehr möglich! Das Hinzufügen eines Rahmens zur Vorbedingung hat einen Teil des Nichtdeterminismus in der Nachbedingung abgeschnitten.

In der Arbeit "Lokale Aktion und abstrakte Trennungslogik" (Calcagno, O'Hearn und Yang) geht es darum, die Rahmenregel aus einer tieferen, semantischen Perspektive zu verstehen. Die Schlüsseldefinition des Papiers ist Lokalität für "Aktionen", wobei eine Aktion (die semantische Repräsentation von) ein Programm ist. Ort sagt , dass , wenn Sie in einem gewissen Rahmen Haufen hinzufügen, die nur Art und Weise , dass die ursprüngliche Nachbedingung geändert durch Beschneiden einig Nicht - Determinismus , wie oben werden kann. Und in der Tat entsteht das Beschneiden nur aufgrund der Zuordnung.


Danke für das Beispiel und für den Hinweis! Ihr Beispiel macht Sinn. Ist es fair zu sagen, dass qsich das nur zu " qund auch ..." ändern kann ? Und wenn Allokation das einzige ist, was den Nicht-Determinismus in der Nachbedingung (was an sich schon ein cooles Ergebnis ist) beschneiden kann, dann ist, wenn es einen Teil der Nachbedingung gibt, der ortsunabhängig ist, dieser Teil der Nachbedingung garantiert gleich bleiben? Können wir sagen, dass die Nachbedingung bis zur Alpha-Umbenennung von Standorten dieselbe bleibt? (Ich habe ein Beispiel im Sinn, aber vielleicht ist dies besser per E-Mail zu erklären.)
Lindsey Kuper

1
Ja, qkann nur zu " qund auch ..." wechseln Mit anderen Worten, die Nachbedingung kann nur stärker werden : Sie impliziert die ursprüngliche Nachbedingung. Dies ist Teil der Definition des Ortes für Aktionen. Es ist jedoch nicht wahr, dass die Änderung der Nachbedingung nur mit einer Umbenennung verbunden ist. In dem Beispiel, das ich gegeben habe, ist die zusätzliche Tatsache, dass xund yverschieden sind, wahr, unabhängig von der bestimmten Adresse, für die gewählt wurde y. Das Beispiel erfasst die Aktualität der Zuordnung, die beim Umbenennen unverändert bleibt.
Aaron Turon

11

Erstens enthält die Aussage Ihrer Frage ein kleines Missverständnis, worauf Aaron auch in seiner Antwort eingegangen ist. Prädikate in der Trennungslogik sind Mengen von Heaps (oder äquivalent Prädikate auf Heaps), und die Trennungskonjunktion ist definiert als:PQ

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

Also in der Rahmenregel

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

R (und und ) sprechen nicht über bestimmte Heaps - sie sind Eigenschaften von Heaps (da Teilmengen und Prädikate gleichwertig sind). Der beste Weg, um zu verstehen, was los ist, ist die Definition dessen, was es bedeutet, wenn ein Hoare-Triple hält:PQ

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

Diese Definition besagt im Grunde, dass (1) wenn Sie mit einem in ausführen , dann werden Sie in einem Endzustand in , und (2) wenn Sie einen zusätzlichen Speicher hinzufügen , wird dieser Speicher unverändert bleiben am Ende des Laufs. Beachten Sie jedoch, dass das spezifische Sie erhalten, für verschiedene Auswahlmöglichkeiten von - was garantiert wird, ist, dass die Eigenschaften und weiterhin unter Erweiterung bleiben, und nicht, dass Sie genau den gleichen Ergebnishaufen erhalten.ch1Ph2Qh h2h PQ

Es ist nicht allzu schwer, aber es lohnt sich dennoch herauszufinden, wie diese Definition des Hoare-Tripels impliziert, dass die Rahmenregel gilt. Wie Sie bemerken, handelt es sich hierbei um eine Art "Erhaltung von Änderungen" -Eigenschaft, die sich besonders lebhaft in der Aussage der Parallelzusammensetzungsregel in der Logik der gleichzeitigen Trennung niederschlägt:

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

Wenn und auf nicht zusammenhängende Speicherbereiche einwirken, beeinträchtigt keiner die Eigenschaften der Ausführung des anderen, wenn sie parallel ausgeführt werden.c1c2

Dies wird in dem Artikel von Hoare et al., On Locality and the Exchange Law for Concurrent Processes , erörtert, in dem gezeigt wird, wie eine zusammengeführte Algebra von Programmen und Behauptungen erstellt werden kann.


Die Definition für Hoare-Tripel sieht falsch aus: Sie sollte besagen, dass die Ausführung nicht fehlerhaft ist, dass eine Nichtbeendigung zulässig ist und dass Modelle ohne Sicherheitsmonotonie wahrscheinlich nicht ausgeschlossen werden sollten. (Aber, ja, ich stimme zu, dass es durchaus sinnvoll ist, aus den von Ihnen erläuterten Gründen über "Bewahrung von Änderungen" zu sprechen.)
Radu GRIGore

3
(1) Ich habe die Semantik für die vollständige Korrektheit dreifach angegeben, und daher wird behauptet, dass der Befehl sicher ausgeführt wird. Ich finde, dass die vollständige Korrektheit die Erklärung des Forall / Existent-Charakters von Vor- und Nachbedingungen einfacher macht. (2) Diese Semantik der Tripel wurde tatsächlich erfunden (IIRC von Birkedal und Yang), um Sprachen zu behandeln, die keine Sicherheitsmonotonie in der Sprachsemantik haben, indem sie in die Bedeutung von Tripeln eingebaut werden. Infolgedessen können Sie nicht-monotone Konstrukte (z. B. Fragen zur Größe des Heaps) in der Sprache haben, während Sie weiterhin die Rahmenregel für die Hoare-Logik haben.
Neel Krishnaswami

(1) OK, aber diese Tripel sind anders geschrieben. (2) Das wusste ich nicht. Um es anders auszudrücken: Ohne Monotonie könnten Sie die Rahmenregel verlieren und weiterhin Hoare-Tripel wie gewohnt verwenden, worauf ich im ersten Kommentar eingegangen bin, aber Sie könnten auch die Definition eines Tripels verstärken, damit Sie das zurückerhalten Rahmenregel. (3) Ich verstehe nicht, warum es Fehler ausschließt. Nehmen Sie an, dass deterministisch ist? c
Radu GRIGore

1
Danke, Neel! Sie haben Recht, ich habe die Eigenschaften P und Q mit bestimmten Haufen in Verbindung gebracht. Fassen wir also Ihren Kommentar zusammen: Q bleibt erhalten, aber der bestimmte Haufen, den Sie am Ende erhalten, könnte ein anderer Q-befriedigender Haufen sein als zuvor. Ja?
Lindsey Kuper

1
@RaduGRIGore: Ja, ich bin davon ausgegangen, dass die Sprache deterministisch ist, und diese Annahme wird fehlschlagen, wenn wir Parallelität hinzufügen. Schöner Fang!
Neel Krishnaswami

2

Dies ist zwar nicht zu 100% verwandt, hat aber den Geschmack von Vertragsidemotenz.

Wenn wir {p} als Vorbedingung für c und {q} als Nachbedingung für c betrachten, würde diese Idee einer Rahmenregel sicherstellen, dass die Vor- und Nachbedingungen in jedem Kontext der Berechnung gelten, nicht der einfache Fall, in dem nichts anderes existiert.

Trotzdem kann ich nicht sagen, dass ich eine solche Rahmenregel in einem der Dutzenden von Vertragspapieren gesehen habe, die ich gelesen habe. Es ist sicherlich eine großartige Idee, und eine solche Änderung kann viel dazu beitragen, ein vernünftiges, greifbares Verständnis für idempotente Verträge zu entwickeln.


Danke für den Kommentar. Hm, interessant - ich frage mich, ob jemand, der dies liest, Vertragsdokumente kennt, in denen die Rahmeneigenschaften angegeben sind.
Lindsey Kuper
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.