Dynamische Logik

Werbung
Dynamische Logik
A. Salwicki 1970 (“algorithmische Logik”),
V.R. Pratt 1976, D. Harel 1977
Idee: Erfinde nicht einfach einen komplett neuen Kalkül für neue Objekte
(hier: Hoare-Tripel) sondern bilde Programmformeln und erweitere Kalkül
um diese neuen Formeln.
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
183 / 290
Dynamische Logik: Syntax
Die Menge DLFor(Σ,X ) der DL-Formeln über der Signatur Σ und der
Variablenmenge X enthält
• Alle prädikatenlogischen Formeln von For(Σ,X )
• Für α ∈ DLProg(Σ,X ) und ϕ ∈ DLFor(Σ,X ) auch
• [α]ϕ
( box alpha phi“)
”
Informelle Bedeutung: Wenn α terminiert, gilt nachher ϕ“
”
• hαiϕ ( diamond alpha phi“)
”
Informelle Bedeutung: α hält, und nachher gilt ϕ“
”
Klassifikation:
• Dynamische Logik ist eine (Multi-)Modallogik.
• Modallogik mit Formeln ϕ (und 2 ϕ) stammen aus der
Philosophie:
“ich weiss ϕ”, “ich glaube ϕ”, “ϕ ist möglich”
• Temporallogik: “irgendwann wird ϕ wahr sein”
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
184 / 290
Bemerkungen zur Syntax
• Boxen und Diamonds binden stärker als Aussagenlogik:
[α]ψ ∧ χ bedeutet ([α]ψ) ∧ χ
• Schachtelung möglich:
hαihβiψ bedeutet hαi ( hβiψ )
• Auch gemischte Schachtelung ist erlaubt: [α] ∀ x. ϕ ∧ hβiψ
• Auch in DL betrachtet man Sequenzen, z. B. hαiψ, Γ ` ∆.
• Wenn x in α vorkommt, x0 aber nicht, so besagt
hαi x = x0 : “Am Ende von α hat x den Wert, den x0 jetzt hat”
• hαi x = x0 → hβi x = x0 bedeutet:
“Wann immer α in x einen Wert x0 ausrechnet so tut das auch β”
Man kann in DL also über Programmähnlichkeit reden
• Es gilt: [α]ψ ↔ ¬ hαi¬ ψ
Man könnte also Box mit Hilfe von Diamond definieren
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
185 / 290
Semantik der Dynamischen Logik
Die Semantik von Formeln der Prädikatenlogik wird erweitert durch
A, v |= [α]ψ
A, v |= hαiψ
:⇔
:⇔
für alle w : (v , w ) ∈ [[α]] ⇒ A, w |= ψ.
es gibt w : (v , w ) ∈ [[α]] und A, w |= ψ.
Damit gilt
A, v |= ϕ[α]ψ
A, v |= ϕhαi ψ
⇔
⇔
A, v |= ϕ → [α]ψ
A, v |= ϕ → hαiψ,
Hoare-Tripel sind also spezielle Formeln der Dynamischen Logik.
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
186 / 290
Dynamische Logik: Beispiele
|= [x := 1] x = 1
|= x = x0 → [x := x + 1] x = x0 + 1
|= x = x0 → hx := x + 1i x = x0 + 1
Unterschied Box/Diamond:
|= x = 5 → [abort] x = 5
6|= x = 5 → haborti x = 5
Sequenzen mit Programmen, Programme auch im Antezedent:
|= x = x0 ` [x := x + 1] x = x0 + 1
|= x > 0 ` hwhile x > 1 do x := x -1i x = 1
|= hif x > 0 then y := 1 else aborti y = y 0 ` y 0 = 1 ∧ x > 0
|= [if x > 0 then y := 1 else abort] y = y 0 ` y 0 = 1 ∧ x > 0 ∨ x = 0
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
187 / 290
Kalkül für Dynamische Logik
Grundidee: Symbolische Ausführung von Programmen
Betrachte Ausführung des Programms
α1 ; α2 ; . . . ; αn (αi ohne ; (compound) auf top-level)
• Annahme: Initialer Zustand erfüllt Vorbedingung ϕ0
• Berechne ϕ1 , die stärkste Formel, die nach α1 gilt
• Berechne ϕ2 , die stärkste Formel, die nach α1 ; α2 gilt
• . . . solange bis das Programm verschwunden ist
• Zum Schluss: Teste ob ϕn die Nachbedingung impliziert
(nur noch Prädikatenlogik)
• Symb. Ausführung geht sowohl im Antezedent als auch im
Sukzedent!
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
188 / 290
DL-Kalkül: Normalisierung
normalize right
Γ ` hαihβiψ, ∆
Γ ` hα; βiψ, ∆
Γ ` [α][β]ψ, ∆
Γ ` [α; β]ψ, ∆
normalize left
hαihβiψ, Γ ` ∆
hα; βiψ, Γ ` ∆
[α][β]ψ, Γ ` ∆
[α; β]ψ, Γ ` ∆
In KIV: Nie explizit angewandt, die erste Anweisung wird bei jeder
Regelanwendung (in allen Programmformeln) immer automatisch
abgespalten. KIV rotiert immer die Programmformeln nach vorne.
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
189 / 290
DL-Kalkül: Zuweisungen (1)
assign right (so auch im Hoare-Kalkül)
Γ ` ψxτ , ∆
Γ ` [x := τ ]ψ, ∆
assign right (Dynamische Logik)
0
0
Γxx , x = τxx ` [α]ψ, ∆xx
Γ ` [x := τ ][α]ψ, ∆
0
wobei x 0 eine neue Variable ist (bezeichnet den alten Wert von x)
Beachte: config-Datei des Projekts setzt Option Hoare-assign rule“
”
(ohne Option wird x 0 eine Variable für den neuen Wert, und
Programmvariablen werden umbenannt)
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
190 / 290
DL-Kalkül: Zuweisungen (2)
• In KIV: assign right kombiniert beide Regeln:
• Original-Hoare-Regel, falls nach der Zuweisung ψ kein Programm
mehr enthält
• Sonst die DL Regel
• Die Regel gilt genau gleich auch für Diamonds statt Boxen
• Die Regel für Zuweisung auf der linken Seite sieht genauso aus:
assign left
0
0
x = τxx , [α]ψ, Γxx ` ∆xx
[x := τ ][α]ψ, Γ ` ∆
0
wobei x 0 eine neue Variable ist (für den Wert vor der Zuweisung)
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
191 / 290
DL-Kalkül: Regeln für if
if right
Γ, ε ` [α]ψ, ∆ Γ, ¬ ε ` [β]ψ, ∆
Γ ` [if ε then α else β]ψ, ∆
if positive right
Γ, ε ` [α]ψ, ∆ Γ ` ε, ∆
Γ ` [if ε then α else β]ψ, ∆
Analog: if negative right, if left etc.. KIV versucht immer die Tests zu
entscheiden (per Simplifier), damit nur eine Prämisse entsteht.
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
192 / 290
Invarianten
Definition: Eine (Schleifen-)Invariante ist eine Formel, die vor und nach
jedem Schleifendurchlauf gilt.
Beispiel:
m = 0 ∧ n = n0 →
[
while n 6= 0 do
n := n −1; m := m +1
od
]
m = n0
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
193 / 290
Invarianten
Definition: Eine (Schleifen-)Invariante ist eine Formel, die vor und nach
jedem Schleifendurchlauf gilt.
Beispiel:
m = 0 ∧ n = n0 →
[
while n 6= 0 do
n := n −1; m := m +1
od
]
m = n0
Invariante: m + m = n0
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
193 / 290
Bestimmung von Invarianten
Wie kommt man drauf?
• Schreibe Werte nach k Durchläufen der Schleife auf
• Kann man zunächst für ein konkrete Anfangswerte (z.B. n0 = 5)
machen.
• Bestimme Formel, wie m,n nach k Durchläufen aussehen:
m = k und n = n0 − k
• Daraus Invariante ∃ k. m = k ∧ n = n0 − k
• Diese Formel vereinfachen ergibt m + m = n0
Nebenbemerkung: Die Invariante benötigt +, die Schleife selbst nicht
⇒ manchmal brauchen Invarianten (genau wie beim Verallgemeinern von
Induktionshypothesen) neue Funktionen
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
194 / 290
Notwendiges Kriterium für Invarianten
Eine prädikatenlogische Formel INV ist eine Invariante,
wenn sich zeigen lässt:
• Die Formel gilt am Anfang der Schleife
• Die Invariante wird von einem Schleifendurchlauf erhalten:
Es gilt: INV ∧ ε → [α]INV
Für jede Invariante gilt: Wenn die Schleife anhält, dann gilt am Ende die
Invariante, und (offensichtlich) dass der Test am Ende falsch ist.
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
195 / 290
Terminierung von Schleifen
Eine Schleife terminiert nur dann, wenn in jedem Schleifendurchlauf
“etwas” abnimmt bezueglich einer noetherschen Ordnung (dann kann es
nicht unendlich oft abnehmen).
Vorgehen also:
• Bestimme einen Term t, der abnimmt
• Häufig: heruntergezählte Variable; Abstand einer hochgezählten
Variable zur oberen Schranke; Größe einer Datenstruktur (z.B.
Listenlänge)
• Um Abnehmen zu zeigen, zeige mit (neuer) Hilfsvariable z zum
Merken des alten Werts:
z = t ∧ ε ∧ INV → hαi t < z
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
196 / 290
DL-Kalkül: While-Regel
invariant right
Γ ` INV , ∆
INV , ε ` [α]INV
INV , ¬ ε ` ψ
Γ ` [while ε do α]ψ, ∆
invariant right
Γ ` INV , ∆
INV , ε, v = t ` hαi(INV ∧ t v )
Γ ` hwhile ε do αiψ, ∆
INV , ¬ ε ` ψ
KIV: Die Schleifeninvariante INV und im zweiten Fall auch die Schranke t
muss von Hand eingegeben werden (v ist neue Variable)
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
197 / 290
DL-Kalkül: Regeln für skip und abort
skip right
Γ ` ψ, ∆
Γ ` hskipiψ, ∆
Γ ` ψ, ∆
Γ ` [skip]ψ, ∆
skip left
ψ, Γ ` ∆
hskipiψ, Γ ` ∆
ψ, Γ ` ∆
[skip]ψ, Γ ` ∆
abort right
Γ`∆
Γ ` habortiψ, ∆
Γ ` [abort]ψ, ∆
abort left
habortiψ, Γ ` ∆
4. Juni 2013
Γ`∆
[abort]ψ, Γ ` ∆
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
198 / 290
DL-Kalkül: Lokale Variablen
vardecls right
x0
x 0 = τ , Γ ` hαx iϕ
Γ ` hlet x = τ in αiϕ
vardecls left
x0
hαx iϕ, x 0 = τ , Γ ` ∆
hlet x = τ in αiϕ, Γ ` ∆
x 0 sind neue Variablen (bezeichnen die lokalen Variablen). Dieselben
Regeln gelten auch für Boxen.
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
199 / 290
Beispiel zur Korrekheit
m := x.first, x0 := x.rest;
while x0 6= [] do
{
if x0.first > m then m := x0.first ;
x0 := x0.rest
}
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
200 / 290
Beispiel zur Korrekheit
Maximum einer nichtleeren Liste nat. Zahlen x:
x 6= []
`h
m := x.first, x0 := x.rest;
while x0 6= [] do
{
if x0.first > m then m := x0.first ;
x0 := x0.rest
}
i
m = maxl(x)
wobei maxl([]) = 0, maxl(n + x) = max(n,maxl(x))
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
200 / 290
Zur nächsten Aufgabe
Invarianten vorher überlegen!!!
4. Juni 2013
G. Schellhorn, D. Haneberg: Formale Methoden im Software Engineering
201 / 290
Herunterladen