Formale Methoden - Informatik

Werbung
Formale Methoden
Alexander Knapp, Gerhard Schellhorn
Universität Augsburg
Formale Methoden: Ziele (1)
Grundlagen für die Softwareerstellung
Mathematik von Spezifikations- und Programmiersprachen“
”
I
Vermeidung von Mißverständnissen und Unklarheiten
I
I
Was bedeutet eine UML-Spezifikation?
Welche Compileroptimierungen sind möglich?
I
Ermöglichung von präzisen Vorhersagen und Tests
I
Verständnisverbesserung
I
I
I
Was sind gute“, gut strukturierte“ und gut dokumentierte“ Programme?
”
”
”
Was sind saubere“ Schnittstellen?
”
Was ist eine gute“ Spezifikationssprache?
”
A computer is a mathematical machine.
A program is a mathematical expression.
A programming language is a mathematical theory.
Programming is a mathematical activity.
— C. Anthony R. Hoare, 1989
A. Knapp, G. Schellhorn: Formale Methoden
2
Formale Methoden: Ziele (2)
Entwicklung von Software mit formalen Spezifikationen
I
Formale Spezifikation der Anforderungen
; höhere Abstraktion als direkte Programmierung
I
Validierung, Nachweis von (Sicherheits-)Eigenschaften
; Qualitätsverbesserung durch frühere Fehlererkennung
I
Methodik, um von abstrakten Anforderungen zu Programmen zu kommen
; modulare Softwareentwicklung
I
Aber: formale Spezifikationen beseitigen keine Mißverständnisse mit dem
Kunden
; formale Methoden sind für den Softwareingenieur, nicht für den Kunden
A. Knapp, G. Schellhorn: Formale Methoden
3
Formale Methoden: Ziele (3)
Formaler, systemunterstützter Nachweis von Eigenschaften
I
Beweise von Eigenschaften sichern Qualität der Spezifikation
I
Beweise für die Korrektheit von Programmen bzgl. Spezifikation sichern
Qualität der Programme
I
formale Beweise kosten Zusatzaufwand
; Grad der Formalisierung immer eine Kosten/Nutzen-Abwägung!
Proofs of programs are too boring for the social
process of mathematics to work.
— Richard DeMillo, Richard Lipton, Alan Perlis, 1979
A. Knapp, G. Schellhorn: Formale Methoden
4
Spezifikationssprachen
Eine Spezifikationssprache ist eine Sprache zur Beschreibung von
Softwaresystemen oder der Anforderungen an Softwaresysteme.
Beispiele
I
automatenartige Spezifikationen (Statecharts etc.)
I
algebraische Spezifikationen
I
Programmiersprachen
Grundsätzliches Vorgehen zur Definition
I
Festlegung von Syntax und Semantik
A. Knapp, G. Schellhorn: Formale Methoden
5
Spezifikationssprachen: Syntax und Semantik
Syntax: Wie sehen zulässige Sprachkonstrukte aus?
I
Formal: Definition einer Menge von zulässigen Texten (Zeichenketten)
I
bei Rechnerunterstützung typischerweise durch Grammatik gegeben
Semantik: Was bedeutet eine Zeichenkette?
I
Formal: Zuordnung von mathematischen Strukturen (meist basierend auf
Mengenlehre)
I
Bei Programmiersprachen: Informell im Handbuch durch Beschreibung
des Effekts jedes Konstrukts auf den Ausführungszustand
A. Knapp, G. Schellhorn: Formale Methoden
6
Formales Beweisen
I
Einbettung von Spezifikationen in eine formale Sprache, mit der Aussagen
bewiesen werden können
I
Formale Beweise ersetzen mathematische Beweise durch Berechnung“
”
mit einem Kalkül
I
keine Fehler (wenn nur Kalkülregeln fehlerfrei)
I
Logik = Syntax + Semantik + Kalkül
I
Grundlegende Sprachen zur Formulierung von Aussagen:
Aussagenlogik und Prädikatenlogik
A. Knapp, G. Schellhorn: Formale Methoden
7
Überblick
I
Logische Grundlagen
I
I
Aussagenlogik
Prädikatenlogik
I
Spezifikation von Datenstrukturen
I
Semantik von Programmen
I
Beweisen mit Programmen
I
Von abstrakten Spezifikationen zu konkreten Programmen
I
I
algebraische Verfeinerung
Datenverfeinerung
A. Knapp, G. Schellhorn: Formale Methoden
8
Aussagenlogik
Ein Satz ist, was an sich verneint oder bejaht werden kann.
— Chrysipp, Dialektische Definitionen (nach Diogenes Laertios)
Der genannte Mann (Chrysipp) sagt, daß er (der Hund) öfters das fünfte
Unbeweisbare anwendet, wenn er, auf eine Kreuzung von drei Wegen
kommend, nachdem er zwei Wege, durch welche das Wild nicht gegangen
ist, berochen hat, unmittelbar durch den dritten sich wirft, ohne ihn zu
beriechen. Der alte (Meister) sagt nämlich, daß der Hund potentiell so
schließt: Entweder hier, oder hier, oder hier ist das Wild durchgegangen;
”
nun weder hier, noch hier; also hier.“
— M. Tullius Cicero, Topica 57
Es krächzen selbst die Raben auf den Dächern, welche Implikationen richtig
sind.
— Kallimachos (nach Sextus Empiricus)
A. Knapp, G. Schellhorn: Formale Methoden
9
Aussagenlogik: Syntax
(Endliche) Menge von atomaren Aussagen P (Propositionen)
I
Proposition entweder wahr oder falsch
I
Zeichenketten (verschieden von true“, false“, ¬“, ∧“, . . . )
”
”
”
”
I z. B. P = {a, b, c}
Definition
Die Menge der aussagenlogischen Formeln F (P) über einer
Menge von Propositionen P ist die kleinste Menge mit:
I
P ⊆ F (P)
I
true, false ∈ F (P)
I
Wenn A ∈ F (P), dann (¬A) ∈ F (P).
I
Wenn A, B ∈ F (P), dann (A ∧ B), (A ∨ B), (A → B), (A ↔ B) ∈ F (P).
¬, ∧, ∨, →, ↔ heißen Junktoren.
A. Knapp, G. Schellhorn: Formale Methoden
10
Formeln: Notation
I
Klammern werden entsprechend der Bindungsstärken weggelassen:
{¬} {∧} {∨} {→} {↔}
( bedeutet: bindet stärker als)
I
Außenklammern werden ebenfalls weggelassen.
I
Aufzählungen mit ∧, ∨ sind implizit nach rechts geklammert.
Beispiele:
I
a → ¬b ↔ c statt ((a → (¬b)) ↔ c)
I
a ↔ ¬b ∧ c ∧ d ∨ e statt (a ↔ (((¬b) ∧ (c ∧ d)) ∨ e))
A. Knapp, G. Schellhorn: Formale Methoden
11
Formeln: Definitionsprinzip für Funktionen
Um eine Funktion f auf Formeln F (P) zu definieren, verfahre rekursiv:
1. f (p) für Propositionen p ∈ P
2. f (false), f (true)
3. f (¬A) unter Zuhilfenahme von f (A)
4. f (A ∧ B), f (A ∨ B), f (A → B), f (A ↔ B) unter Zuhilfenahme von f (A), f (B)
Beispiele:
I
Anzahl der Junktoren
I
(endliche) Menge der vorkommenden Propositionen
I
Menge der Unterformeln einer Formel
A. Knapp, G. Schellhorn: Formale Methoden
12
Formeln: Beweisprinzip für Eigenschaften
Um zu zeigen, daß alle Formeln in F (P) eine Eigenschaft E haben, verfahre
induktiv:
1. E(p) gilt für alle atomaren Formeln p ∈ P.
2. E(false), E(true)
3. Wenn E(A) für A ∈ F (P) gilt, dann auch E(¬A).
4. Wenn E(A) und E(B) für A, B ∈ F (P) gelten, dann auch E(A ∧ B),
E(A ∨ B), E(A → B), E(A ↔ B).
Beispiel:
I
Alle Formeln haben eine gerade Zahl von Klammern.
A. Knapp, G. Schellhorn: Formale Methoden
13
Aussagenlogik: Semantik (1)
Zuweisung eines Wahrheitswerts für jede aussagenlogische Formel
I
Wahrheitswert hängt nur von Wahrheitswerten der vorkommenden
Propositionen ab
Definition
Eine Interpretation I : P → B ordnet jeder Proposition einen
Wahrheitswert aus B = {ff , tt} zu.
Die Semantikklammern J−K umschließen immer Sprachkonstrukte und liefern
deren Semantik. Hier hängt die Semantik PJAK I einer aussagenlogischen
Formel A von einer Interpretation I ab.
A. Knapp, G. Schellhorn: Formale Methoden
14
Aussagenlogik: Semantik (2)
Definition
Für jede Interpretation I wird einer aussagenlogischen Formel A
als Semantik der folgende Wahrheitswert PJAK I zugeordnet:
I
PJpK I = I(p)
I
PJfalseK I = ff
I
PJtrueK I = tt
I
PJ¬AK I = tt gdw. PJAK I = ff
I
PJA ∧ BK I = tt gdw. PJAK I = tt und PJBK I = tt
I
PJA ∨ BK I = tt gdw. PJAK I = tt oder PJBK I = tt
I
PJA → BK I = tt gdw. PJAK I = ff oder PJBK I = tt
I
PJA ↔ BK I = tt gdw. PJAK I = PJBK I
Die Definitionen für ∧, ∨, &c. entsprechen den üblichen Wahrheitstafeln.
A. Knapp, G. Schellhorn: Formale Methoden
15
Modelle
Definition
Eine Interpretation I heißt ein Modell einer aussagenlogischen
Formel A, geschrieben als I |= A, falls PJAK I = tt.
Definition
Sei A eine aussagenlogische Formel.
I
A ist erfüllbar, wenn es ein Modell von A gibt.
I
A ist widersprüchlich (eine Kontradiktion), wenn es kein Modell von A gibt.
I
A ist allgemeingültig (eine Tautologie), geschrieben als |= A, wenn jede
Interpretation ein Modell von A ist.
Beispiele:
I
a ∨ ¬a ist allgemeingültig.
I
a ∨ ¬b ist erfüllbar, aber nicht allgemeingültig.
I
a ∧ ¬a ist widersprüchlich.
Es gilt: A ist erfüllbar gdw. ¬A ist nicht allgemeingültig.
A. Knapp, G. Schellhorn: Formale Methoden
16
Tautologien (1)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
(A ∨ B) ↔ (B ∨ A)
(A ∨ B) ∨ C ↔ A ∨ (B ∨ C)
A∨A↔A
(A ∧ B) ↔ (B ∧ A)
(A ∧ B) ∧ C ↔ A ∧ (B ∧ C)
A∧A↔A
A ∨ (B ∧ C) ↔ (A ∨ B) ∧ (A ∨ C)
A ∧ (B ∨ C) ↔ (A ∧ B) ∨ (A ∧ C)
¬(A ∨ B) ↔ ¬A ∧ ¬B
¬(A ∧ B) ↔ ¬A ∨ ¬B
A ∧ (A ∨ B) ↔ A
A ∨ (A ∧ B) ↔ A
¬¬A ↔ A
A. Knapp, G. Schellhorn: Formale Methoden
Kommutativität ∨
Assoziativität ∨
Idempotenz ∨
Kommutativität ∧
Assoziativität ∧
Idempotenz ∧
Distributivität ∨
Distributivität ∧
DeMorgan ∨
DeMorgan ∧
Redundanz ∧
Redundanz ∨
Doppelnegation
17
Tautologien (2)
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
(A → B) → ((B → C) → (A → C))
A → ((A → B) → B)
(A → ¬A) → ¬A
(A → B) ↔ (¬B → ¬A)
(A ∧ ¬A) → B
(A → B) ↔ (¬A ∨ B)
(A ↔ B) ↔ (A → B) ∧ (B → A)
(A ↔ B) ↔ (A ∧ B) ∨ (¬A ∧ ¬B)
(A → B) ∧ (¬A → B) → B
A → (B → C) ↔ A ∧ B → C
(A ↔ B) ↔ (B ↔ A)
((A ↔ B) ↔ C) ↔ (A ↔ (B ↔ C))
A. Knapp, G. Schellhorn: Formale Methoden
Transitivität
Modus Ponens
Selbstwiderlegung
Kontraposition
Ex falso quodlibet
Implikation vs. Disjunktion
Äquivalenz ∧
Äquivalenz ∨
Fallunterscheidung
geschachtelte Implikation
Kommutativität ↔
Assoziativität ↔
18
Tautologien (3)
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
(A ∧ false) ↔ false
(A ∧ true) ↔ A
(A → false) ↔ ¬A
(A → true) ↔ true
(true → A) ↔ A
(false → A) ↔ true
(A ↔ true) ↔ A
(A ↔ false) ↔ ¬A
(A ∨ ¬A) ↔ true
(A ∧ ¬A) ↔ false
And-false
And-true
Imp-false
Imp-true
true-Imp
false-Imp
Equiv-true
Equiv-false
triviale Disjunktion
triviale Konjunktion
Analog auch Or-true &c.
A. Knapp, G. Schellhorn: Formale Methoden
19
Folgerbarkeit
Folgerung von Theoremen aus (als wahr angenommenen) Axiomen
Ax ⊆ F (P)
Definition
Eine Interpretation I heißt ein Modell einer Menge von
aussagenlogischen Formeln Ax, geschrieben als I |= Ax, falls PJAK I = tt für
alle A ∈ Ax. Die Menge Ax heißt erfüllbar, wenn es ein Modell von Ax gibt.
Für endliche Mengen Ax ist I |= Ax äquivalent zu I |=
V
A∈Ax A.
Definition
Eine aussagenlogische Formel A ist eine Folgerung aus einer
Menge von aussagenlogischen Formeln Ax, geschrieben als Ax |= A, wenn für
jede Interpretation I mit I |= Ax auch I |= A gilt.
A. Knapp, G. Schellhorn: Formale Methoden
20
Folgerbarkeit und Erfüllbarkeit
Satz
I
I
I
Zu Ax |= A sind äquivalent:
Ax ∪ {¬A} ist nicht erfüllbar.
V
|= ( Ax) → A, falls Ax endlich.
Reduktion des Folgerbarkeitsproblem auf die Suche nach einer
erfüllenden Interpretation
A. Knapp, G. Schellhorn: Formale Methoden
21
Erfüllbarkeit: Beispiel (1)
n-Damen-Problem
I
Ist es möglich, auf einem Schachbrett mit n × n Feldern n Damen so zu
plazieren, daß keine Dame direkt eine andere Dame schlagen kann?
I
Suche einer Aufstellung, in der in jeder Zeile genau eine Dame, und auf
keiner Spalte und keiner Diagonale zwei Damen
A. Knapp, G. Schellhorn: Formale Methoden
22
Erfüllbarkeit: Beispiel (2)
Codierung des n-Damen-Problems
I
n2 Variablen der Form p(x,y) mit x, y ∈ {1, . . . , n}
I
p(x,y) für auf Feld (x, y) steht eine Dame“
”
1. In jeder Zeile und Spalte nur eine Dame
Vn
V
p(x,y) → ni=x+1 ¬p(i,y)
V
V
V
F2 ≡ nx=1 ny=1 p(x,y) → ni=y+1 ¬p(x,i)
F1 ≡
x=1
Vn
y=1
2. Auf jeder Diagonale nur eine Dame
F3 ≡
¬p
(x+i,y+i) ∧
x=1 y=1
i=1
Vn Vn
Vmin(x−1,n−y)
p
→
¬p
(x−i,y+i)
(x,y)
x=1 y=1
i=1
Vn
Vn
p(x,y) →
Vmin(n−x,n−y)
3. In jeder Zeile (mindestens) eine Dame
F4 ≡
Vn
y=1
Wn
x=1 p(x,y)
A. Knapp, G. Schellhorn: Formale Methoden
23
Sequenzenkalkül
I
Ableitung aller allgemeingültigen Aussagen
I
Erfunden von Gerhard Gentzen (1934)
I
Hier: Fassung nach Oiva Ketonen (1944)
I
arbeitet auf Sequenzen
I
Charakteristik: versucht, Beweisziel auf Axiome zu reduzieren (schrittweise
Vereinfachung des Problems); am menschlichen Beweisen orientiert
I
Nur einer von vielen möglichen Kalkülen: Hilbertkalkül, natürliches
Schließen, Tableaukalkül, Modellelimination, Resolutionskalkül
A. Knapp, G. Schellhorn: Formale Methoden
24
Sequenzen
Seien A1 , . . . , Am , B1 , . . . , Bn ∈ F (P).
A1 , . . . , Am ⇒ B1 , . . . , Bn heißt Sequenz.
Definition
A1 , . . . , Am
I
I
I
heißt Antezedent (m ≥ 0).
B1 , . . . , Bn heißt Sukzedent (n ≥ 0).
Γ, Γ1 , ∆, . . . bezeichnen Listen von Formeln
Γ = A1 , . . . , Am = [A1 , . . . , Am ]
∆ = B1 , . . . , Bn = [B1 , . . . , Bn ]
Γ⇒∆
Γ, A ⇒ B
Γ, A ∧ B, ∆ ⇒
V
[A1 , . . . , Am ]
V
[]
W
[B1 , . . . , Bn ]
W
[]
=
=
=
=
=
=
=
A. Knapp, G. Schellhorn: Formale Methoden
A1 , . . . , Am ⇒ B1 , . . . , Bn
A1 , . . . , Am , A ⇒ B
A1 , . . . , Am , A ∧ B, B1 , . . . , Bn ⇒
A1 ∧ . . . ∧ Am
true
B1 ∨ . . . ∨ Bn
false
25
Sequenzen: Semantik
Auffassung einer Sequenz Γ ⇒ ∆ als
V
Γ→
W
∆
Definition
Eine Interpretation I ist ein Modell einer Sequenz Γ ⇒ ∆,
V
W
geschrieben als I |= Γ ⇒ ∆, wenn I |= Γ → ∆.
Eine Sequenz Γ ⇒ ∆ ist eine Folgerung aus einer Menge von
aussagenlogischen Formeln Ax, geschrieben als Ax |= Γ ⇒ ∆, wenn für jede
Interpretation I mit I |= Ax auch I |= Γ ⇒ ∆ gilt.
I
Insbesondere: Γ ⇒ ist wahr, falls die Formeln in Γ widersprüchlich sind.
A. Knapp, G. Schellhorn: Formale Methoden
26
Formeln und Sequenzen
Lemma
Sei I eine Interpretation, A eine aussagenlogische Formel und Ax
eine Menge von aussagenlogischen Formeln.
I |= A
⇐⇒
I |= ⇒ A
I |= ¬A
⇐⇒
I |= A ⇒
Ax |= A
⇐⇒
Ax |= ⇒ A
Ax |= ¬A
⇐⇒
Ax |= A ⇒
Definition
identifiziert:
Folgende Formeln und Sequenzen werden miteinander
Γ⇒∆ ≡
V
Γ→
W
⇒∆ ≡
W
∆,
falls ∆ nicht leer
∆,
falls Γ nicht leer
⇒A ≡ A
⇒ ≡ false
A. Knapp, G. Schellhorn: Formale Methoden
27
Eigenschaften von Sequenzen
Seien I eine Interpretation, A, B aussagenlogische Formeln und
Γ, Γ1 , Γ2 , ∆, ∆1 , ∆2 Listen von aussagenlogischen Formeln.
Lemma
I |= Γ1 , Γ2 ⇒ ∆
⇐⇒
I |= Γ2 , Γ1 ⇒ ∆
I |= Γ ⇒ ∆1 , ∆2
⇐⇒
I |= Γ ⇒ ∆2 , ∆1
I |= Γ ⇒ A, ∆
⇐⇒
I |= Γ, ¬A ⇒ ∆
I |= Γ, A ⇒ ∆
⇐⇒
I |= Γ ⇒ ¬A, ∆
I |= Γ ⇒ A ∨ B, ∆
⇐⇒
I |= Γ ⇒ A, B, ∆
I |= Γ ⇒ A → B, ∆
⇐⇒
I |= A, Γ ⇒ B, ∆
I |= Γ ⇒ A ∧ B, ∆
⇐⇒
I |= Γ ⇒ A, ∆ und I |= Γ ⇒ B, ∆
A. Knapp, G. Schellhorn: Formale Methoden
28
Form von Kalkülregeln
Regel
Γ1 ⇒ ∆1
...
Γn ⇒ ∆n
Γ⇒∆
I
Γ ⇒ ∆ heißt Konklusion der Regel
I
Γ1 ⇒ ∆1 , . . . , Γn ⇒ ∆n heißen Prämissen der Regel
I
Regeln ohne Prämissen (n = 0) heißen Axiome
I
Regel gelesen als: Aus den Prämissen läßt sich die Konklusion ableiten
I
Verwendung der Regel: Reduktion der Konklusion auf die Prämissen
A. Knapp, G. Schellhorn: Formale Methoden
29
Regeln des Sequenzenkalküls für Aussagenlogik (AL) (1)
Schreibweise: Interessierende Formel am Anfang
A, Γ ⇒ B, ∆
Γ ⇒ A → B, ∆
(A)
(Lfalse)
statt
Γ1 , A, Γ2 ⇒ ∆1 , B, ∆2
Γ1 , Γ2 ⇒ ∆1 , A → B, ∆2
A, Γ ⇒ A, ∆
false, Γ ⇒ ∆
A. Knapp, G. Schellhorn: Formale Methoden
(Rtrue)
Γ ⇒ true, ∆
30
Regeln des Sequenzenkalküls für Aussagenlogik (AL) (2)
(L¬)
(L∧)
(L∨)
Γ ⇒ A, ∆
¬A, Γ ⇒ ∆
A, B, Γ ⇒ ∆
A ∧ B, Γ ⇒ ∆
A, Γ ⇒ ∆ B, Γ ⇒ ∆
A ∨ B, Γ ⇒ ∆
A. Knapp, G. Schellhorn: Formale Methoden
(R¬)
(R∧)
(R∨)
A, Γ ⇒ ∆
Γ ⇒ ¬A, ∆
Γ ⇒ A, ∆ Γ ⇒ B, ∆
Γ ⇒ A ∧ B, ∆
Γ ⇒ A, B, ∆
Γ ⇒ A ∨ B, ∆
31
Regeln des Sequenzenkalküls für Aussagenlogik (AL) (3)
(L→)
(L↔)
(Cut)
Γ ⇒ A, ∆ B, Γ ⇒ ∆
A → B, Γ ⇒ ∆
A, B, Γ ⇒ ∆ Γ ⇒ A, B, ∆
A ↔ B, Γ ⇒ ∆
Γ ⇒ A, ∆ A, Γ ⇒ ∆
Γ⇒∆
A. Knapp, G. Schellhorn: Formale Methoden
(R→)
(R↔)
(Weak)
A, Γ ⇒ B, ∆
Γ ⇒ A → B, ∆
A, Γ ⇒ B, ∆ B, Γ ⇒ A, ∆
Γ ⇒ A ↔ B, ∆
Γ1 ⇒ ∆1
Γ1 , Γ2 ⇒ ∆1 , ∆2
32
Sequenzenkalkül für AL: Beispiele
I
¬(a ∨ b) ⇒ ¬a ∧ ¬b ¬a ∧ ¬b ⇒ ¬(a ∨ b)
(R↔)
⇒ ¬(a ∨ b) ↔ ¬a ∧ ¬b
I
⇒ a ∨ b, ¬a ∧ ¬b
(L¬)
¬(a ∨ b) ⇒ ¬a ∧ ¬b
I
⇒ a, b, ¬a ∧ ¬b
(R∨)
⇒ a ∨ b, ¬a ∧ ¬b
I
⇒ a, b, ¬a ⇒ a, b, ¬b
(R∧)
⇒ a, b, ¬a ∧ ¬b
I
a ⇒ a, b
(R¬)
⇒ a, b, ¬a
I
a ⇒ a, b
(A)
A. Knapp, G. Schellhorn: Formale Methoden
33
Ableitbarkeit
Definition
Eine Sequenz Γ ⇒ ∆ heißt mit AL ableitbar aus einer Menge
von aussagenlogischen Formeln Ax, geschrieben als Ax `AL Γ ⇒ ∆, wenn es
eine Ableitung in AL für Γ ⇒ ∆ aus Ax gibt, d. h. einen geschlossenen
Beweisbaum, der als Wurzel die Sequenz Γ ⇒ ∆ (die Konklusion) hat, als
Blätter Sequenzen ⇒ A mit A ∈ Ax (die Prämissen) und dessen innere Knoten
durch Regeln von AL gebildet sind.
Beweisprinzip für Beweisbäume (Ableitungen)
I
Zeige, daß alle Blätter die Eigenschaft haben und alle Regeln die
Eigenschaft erhalten.
A. Knapp, G. Schellhorn: Formale Methoden
34
Ableitbarkeit in AL: Beispiel
Ableitung für die Sequenz ⇒ ¬(a ∨ b) ↔ ¬a ∧ ¬b (DeMorgan ∨)
(A)
(A)
a ⇒ a, b
b ⇒ a, b
(L∨)
(A)
(A)
a ∨ b ⇒ a, b
a ⇒ a, b
b ⇒ a, b
(L¬)
(R¬)
(R¬)
a ∨ b, ¬b ⇒ a
⇒ a, b, ¬a
⇒ a, b, ¬b
(L¬)
(R∧)
a ∨ b, ¬a, ¬b ⇒
⇒ a, b, ¬a ∧ ¬b
(R¬)
(R∨)
¬a, ¬b ⇒ ¬(a ∨ b)
⇒ a ∨ b, ¬a ∧ ¬b
(L¬)
(L∧)
¬(a ∨ b) ⇒ ¬a ∧ ¬b
¬a ∧ ¬b ⇒ ¬(a ∨ b)
(R↔)
⇒ ¬(a ∨ b) ↔ ¬a ∧ ¬b
A. Knapp, G. Schellhorn: Formale Methoden
35
Theorembeweiser KIV für AL
I
In Datei specification
specification
constants a : bool;
b : bool;
c : bool;
end specification
I
In Datei sequents
lemmas
tertium-non-datur: ` a ∨ ¬ a ;
DeMorgan-∨: ` ¬ (a ∨ b) ↔ ¬ a ∧ ¬ b
DeMorgan-∧: ` ¬ (a ∧ b) ↔ ¬ a ∨ ¬ b
Hilbert-1: ` a → (b → a) ;
Hilbert-2: ` (a → b) → (¬ b → ¬ a)
Hilbert-3: ` ((a → b) → (a → c)) →
A. Knapp, G. Schellhorn: Formale Methoden
;
;
;
(a → (b → c)) ;
36
Verwendung von Schnitt und Abschwächung
Schnitt (Cut) und Abschwächung (Weak) für Ableitungen von Tautologien in
AL nicht nötig
Für Ableitungen aus Axiomen entsprechen Schnitt und Abschwächung der
Verwendung eines Lemmas
I
Zu zeigen: Ax `AL Γ ⇒ ∆
I
Einführung von A ∈ Ax zu Ax `AL A, Γ ⇒ ∆:
⇒A
(Weak)
A, Γ ⇒ ∆ Γ ⇒ A, ∆
(Cut)
Γ⇒∆
A. Knapp, G. Schellhorn: Formale Methoden
37
Regelkorrektheit und Regelinvertierbarkeit von AL
Lemma
Für jede Regel (Γ1 ⇒ ∆1 . . . Γn ⇒ ∆n )/(Γ ⇒ ∆) von AL und
jede Interpretation I folgt aus I |= {Γ1 ⇒ ∆1 , . . . , Γn ⇒ ∆n }, daß I |= Γ ⇒ ∆.
Lemma
Für jede Regel (Γ1 ⇒ ∆1 . . . Γn ⇒ ∆n )/(Γ ⇒ ∆) von AL außer
der Abschwächungsregel (Weak) und jede Interpretation I folgt aus
I |= Γ ⇒ ∆, daß I |= {Γ1 ⇒ ∆1 , . . . , Γn ⇒ ∆n }.
A. Knapp, G. Schellhorn: Formale Methoden
38
Korrektheit
Wenn I |= {Γ1 ⇒ ∆1 , . . . , Γn ⇒ ∆n } und
{Γ1 ⇒ ∆1 , . . . , Γn ⇒ ∆n } `AL Γ ⇒ ∆, dann I |= Γ ⇒ ∆.
Satz
Beweisskizze
Regelkorrektheit und Induktion über Anzahl der angewandten Regeln
Insbesondere: Korrektheit von AL
I
Wenn Ax `AL Γ ⇒ ∆, dann Ax |= Γ ⇒ ∆.
A. Knapp, G. Schellhorn: Formale Methoden
39
Invertierbarkeit
Lemma
Hat ein Beweisbaum ohne (Weak) die Konklusion Γ ⇒ ∆ und eine
Prämisse Γ0 ⇒ ∆0 mit I |6 = Γ0 ⇒ ∆0 für eine Interpretation I , so ist auch
I |6 = Γ ⇒ ∆.
Beweisskizze
Regelinvertierbarkeit und Induktion über Anzahl angewandter Regeln
Korrektheit verlangt, daß, wenn die Prämissen eines Beweisbaums wahr sind,
dann auch die Konklusion wahr ist.
I
Invertierbare Regeln gehen nie fehl: Ist die Konklusion beweisbar, so auch
die Prämissen.
I
Allerdings kann eine unpassende Regel den Beweisbaum doppelt so groß
machen.
A. Knapp, G. Schellhorn: Formale Methoden
40
Terminierung
Satz
Sei Γ ⇒ ∆ eine Sequenz. Dann terminiert jedes Bilden eines
Beweisbaums ohne (Cut) und (Weak).
Beweisskizze Die maximale Höhe jedes Beweisbaums ist gleich der Anzahl der
Junktoren in der Ausgangssequenz, da jede Regelanwendung (ohne (Cut) und
(Weak)) wenigstens einen Junktor beseitigt.
A. Knapp, G. Schellhorn: Formale Methoden
41
Entscheidbarkeit
Satz
Die Allgemeingültigkeit einer aussagenlogischen Formel ist
entscheidbar durch Anwenden der Regeln des Sequenzenkalküls AL ohne
(Cut) und (Weak): Es entsteht genau dann ein geschlossener Beweisbaum,
wenn die Formel allgemeingültig ist.
Beweisskizze Wegen Korrektheit Konklusion eines geschlossenen Beweisbaums
allgemeingültig.
Existenz eines geschlossenen Beweisbaums für allgemeingültige Formel als
Konklusion: Bildungsprozeß terminiert; angenommen ergibt keinen geschlossenen
Beweisbaum, d. h., es existiert eine Prämisse, auf die keine Regel anwendbar ist. Dann
enthält die Prämisse nur atomare Aussagen und evtl. true links und false rechts, und
Antezedent und Sukzedent haben keine gemeinsamen atomaren Aussagen. Wähle
Interpretation I so, daß Atome im Antezedent wahr, im Sukzedent falsch; dann macht I
die Prämisse falsch. Nach Invertierbarkeit ist die Konklusion für I falsch, im
Widerspruch zur Allgemeingültigkeit der Konklusion.
A. Knapp, G. Schellhorn: Formale Methoden
42
Erfüllbarkeit
Verwendung des Sequenzenkalküls zur Konstruktion erfüllender Belegungen
Satz
Gegeben eine aussagenlogische Formel A erhält man alle erfüllenden
Belegungen wie folgt:
1. Bilde die Sequenz A ⇒ und wende Sequenzenkalkül an.
2. Zu jeder offenen Prämisse bilde die Belegungen I , die die Atome im
Antezedent wahr, die im Sukzedent falsch machen (alles andere beliebig).
A. Knapp, G. Schellhorn: Formale Methoden
43
Erfüllbarkeit: Beispiel
Erfüllende Belegungen für ¬a ↔ (b ∨ c)
I
Sequenzenkalkül
b⇒a c⇒a
a ⇒ b, c
b∨c⇒a
⇒ ¬a, b, c
¬a, b ∨ c ⇒ ⇒ ¬a, b ∨ c
¬a ↔ (b ∨ c) ⇒
I
Erfüllende Belegungen
a b c
ff tt ff
ff tt tt
ff ff tt
ff tt tt
tt ff ff
b⇒a
b⇒a
c⇒a
c⇒a
a ⇒ b, c
A. Knapp, G. Schellhorn: Formale Methoden
44
Schwache Vollständigkeit
Satz
Wenn |= Γ ⇒ ∆, dann `AL Γ ⇒ ∆.
Beweisskizze Bilde Beweisbaum (ohne (Cut) und (Weak)), bis keine Regel mehr
anwendbar ist (Termination); falls er keine offene Prämisse hat, ist die Formel
allgemeingültig wegen Korrektheit. Sonst bilde eine Belegung I , die eine offene
Prämisse falsch macht; nach Regelinvertierbarkeit ist auch die Konklusion falsch für I ,
also nicht allgemeingültig.
A. Knapp, G. Schellhorn: Formale Methoden
45
Deduktionstheorem
Satz
Ax ∪ {B} `AL ⇒ C gdw. Ax `AL B ⇒ C
gdw. Ax `AL ⇒ B → C.
Beweisskizze
⇒“ in der oberen Äquivalenz: Füge in geschlossenem Beweisbaum
”
für Ax ∪ {B} `AL ⇒ C allen Sequenzen links die Formel B hinzu; ergibt Beweisbaum.
Die Prämisse B wird zum Axiom und verschwindet; Prämissen der Form B ⇒ Ax
werden mit Abschwächung wieder zu Ax. Die Konklusion ist das gewünschte Resultat.
⇐“ in der oberen Äquivalenz: Hänge an geschlossenen Beweisbaum für
Ax `AL B ⇒ C einen Beweisbaum für Lemmaanwendung von B mit Γ leer und ∆ = C
”
an.
Untere Äquivalenz: Verwendung der ersten Äquivalenz.
A. Knapp, G. Schellhorn: Formale Methoden
46
Starke Vollständigkeit
Satz
Ist Ax endlich, dann gilt mit Ax |= Γ ⇒ ∆, daß Ax `AL Γ ⇒ ∆.
Beweisskizze Ax |= Γ ⇒ ∆ gdw. |= Ax, Γ ⇒ ∆ nach Folgerbarkeit; |= Ax, Γ ⇒ ∆
impliziert `AL Ax, Γ ⇒ ∆ nach schwacher Vollständigkeit; `AL Ax, Γ ⇒ ∆ gdw.
Ax `AL Γ ⇒ ∆ nach Deduktionstheorem.
Starke Vollständigkeit gilt auch für unendliche Mengen Ax.
A. Knapp, G. Schellhorn: Formale Methoden
47
Konsistenz
Definition
Eine Menge Ax von Axiomen heißt konsistent, wenn sich aus Ax
die leere Sequenz nicht ableiten läßt.
I
Kalkül korrekt gdw. jede erfüllbare Menge konsistent
I
Kalkül vollständig gdw. jede konsistente Menge erfüllbar
Daraus Vollständigkeitssatz: Für jede konsistente Menge Konstruktion eines
Modells.
A. Knapp, G. Schellhorn: Formale Methoden
48
Substitution (1)
Definition
Für aussagenlogische Formeln A, B, C heißt A{B 7→ C} die
Substitution (oder Ersetzung) von B durch C in A, gegeben durch:
I
I
I
I
(
C, falls p = B
p{B 7→ C} =
p, falls p 6= B
(
C,
falls (¬A) = B
(¬A){B 7→ C} =
¬(A{B 7→ C}), falls (¬A) 6= B
(
C,
falls (A ∧ A0 ) = B
(A ∧ A0 ){B 7→ C} =
(A{B 7→ C}) ∧ (A0 {B 7→ C}), falls (A ∧ A0 ) 6= B
analog für die anderen Junktoren
A. Knapp, G. Schellhorn: Formale Methoden
49
Substitution (2)
Lemma
Ist I |= B ↔ C, dann gilt für jedes A: I |= A gdw. I |= A{B 7→ C}.
I
Formeln können durch äquivalente Formeln ersetzt werden.
I
Insbesondere darf man B durch C ersetzen, wenn B ↔ C eine Tautologie
ist.
A. Knapp, G. Schellhorn: Formale Methoden
50
Vereinfachung von Sequenzen (1)
I
Reine Anwendung von Sequenzenkalkülregeln ergibt oft lange Beweise;
Substitution für Abkürzungen
A → B{A 7→ true}, Γ ⇒ ∆
A → B, Γ ⇒ ∆
A{B 7→ false} → B, Γ ⇒ ∆
A → B, Γ ⇒ ∆
A ∨ B{A 7→ false}, Γ ⇒ ∆
A ∨ B, Γ ⇒ ∆
Γ ⇒ A ∧ B{A 7→ true}, ∆
Γ ⇒ A ∧ B, ∆
A, Γ{A 7→ true} ⇒ ∆{A 7→ true}
A, Γ ⇒ ∆
Γ{A 7→ false} ⇒ A, ∆{A 7→ false}
Γ ⇒ A, ∆
Beispiel: Für ⇒ A ∧ A zeige ⇒ A ∧ A{A 7→ true}, d. h. ⇒ A ∧ true, also ⇒ A
mit (And-true).
A. Knapp, G. Schellhorn: Formale Methoden
51
Vereinfachung von Sequenzen (2)
Zulässigkeit der Regel
Def. Sem. Seq.
⇐⇒
Taut. 23
⇐⇒
Def. Sem. Impl.
⇐⇒
Taut. 32
⇐⇒
Subst.lem.
⇐⇒
Def. Subst.fkt.
⇐⇒
Taut. 32
⇐⇒
Def. Sem. Impl.
⇐⇒
Taut. 23
⇐⇒
Def. Sem. Seq.
⇐⇒
A, Γ{A 7→ true} ⇒ ∆{A 7→ true}
A, Γ ⇒ ∆
I |= A, Γ ⇒ ∆
V
W
I |= A ∧ Γ → ∆
V
W
I |= A → ( Γ → ∆)
V
W
I |= A ⇒ I |= Γ → ∆
V
W
I |= A ↔ true ⇒ I |= Γ → ∆
V
W
I |= A ↔ true ⇒ I |= ( Γ → ∆){A 7→ true}
V
W
I |= A ↔ true ⇒ I |= Γ{A 7→ true} → ∆{A 7→ true}
V
W
I |= A ⇒ I |= Γ{A 7→ true} → ∆{A 7→ true}
V
W
I |= A → ( Γ{A 7→ true} → ∆{A 7→ true})
V
W
I |= A ∧ Γ{A 7→ true} → ∆{A 7→ true}
I |= A, Γ{A 7→ true} ⇒ ∆{A 7→ true}
A. Knapp, G. Schellhorn: Formale Methoden
52
Resolutionskalkül
I
Nachweis der Unerfüllbarkeit von Aussagen
I
erfunden von J. Alan Robinson (1965)
I
operiert auf Klauselmengen
I
I
aus konjunktiver Normalform
Charakteristik: spezialisierte Schnittregel; geeignet für maschinelles
Beweisen
A. Knapp, G. Schellhorn: Formale Methoden
53
Literale und konjunktive Normalform
Definition
Ein Literal ist eine Proposition oder eine negierte Proposition.
Definition
Eine Formel ist in konjunktiver Normalform (CNF), wenn sie
I
eine Konjunktion von Disjunktionen von Literalen ist;
I
in jeder Disjunktion jede Proposition nur einmal vorkommt.
A. Knapp, G. Schellhorn: Formale Methoden
54
Existenz der konjunktiven Normalform (1)
Zu jeder Formel A gibt es eine äquivalente Formel B, die entweder
true oder false oder in konjunktiver Normalform ist.
Satz
Beweisskizze
Wiederholtes Umschreiben der Formel mittels Substitutionslemma.
I Implikationen und Äquivalenzen beseitigen mit Tautologien 19 und 21.
I
true, false beseitigen mit And-false, And-true, Or-false, &c. Falls das Ergebnis true
oder false ist, fertig.
I Negation nach innen schieben mit DeMorgan (Tautologien 9 und 10),
Doppelnegationen beseitigen (Tautologie 13).
I
∨ über ∧ distribuieren mit Tautologie 7.
I doppelte Literale in Disjunktionen beseitigen mit Tautologie 3.
I Disjunktionen, die
A und ¬A enthalten löschen.
A. Knapp, G. Schellhorn: Formale Methoden
55
Existenz der konjunktiven Normalform (2)
Alternative Konstruktion der konjunktiven Normalform
I
Bilde Sequenz ⇒ A und wende Sequenzenkalkül an. Die entstehenden
Prämissen seien P1 , . . . , Pk .
I
I
Für eine Prämisse P = A1 , . . . , Am ⇒ B1 , . . . , Bn sei
disj(P) = ¬A1 ∨ . . . ∨ ¬Am ∨ B1 ∨ . . . ∨ Bn .
V
Dann gilt |= A ↔ 1≤i≤k disj(Pi ) wegen Korrektheit und Invertierbarkeit.
V
1≤i≤k disj(Pi ) ist also die konjunktive Normalform.
I
Spezialfälle: Wenn keine Prämisse: true; wenn leere Prämisse: false.
I
A. Knapp, G. Schellhorn: Formale Methoden
56
Konjunktive Normalform: Beispiel
Konstruktion einer konjunktiven Normalform von ¬a ↔ (b ∨ c)
I
Methode (1)
¬a ↔ (b ∨ c)
(¬a → b ∨ c) ∧ (b ∨ c → ¬a)
gdw. (¬¬a ∨ b ∨ c) ∧ (¬(b ∨ c) ∨ ¬a)
gdw. (a ∨ b ∨ c) ∧ (¬b ∧ ¬c ∨ ¬a)
gdw. (a ∨ b ∨ c) ∧ (¬b ∨ ¬a) ∧ (¬c ∨ ¬a)
I
Taut. 21
Taut. 19
Taut. 9, 13
Taut. 5 (CNF)
Methode (2)
a, b ⇒ a, c ⇒
⇒ a, b, c
¬a ⇒ b, c b ⇒ ¬a c ⇒ ¬a
¬a ⇒ b ∨ c
b ∨ c ⇒ ¬a
⇒ ¬a ↔ (b ∨ c)
A. Knapp, G. Schellhorn: Formale Methoden
57
Tseitin-Codierung
Erzeugung einer erfüllbarkeitsäquivalenten CNF-Formel A0 zu einer Formel A
I
Einführung von Hilfspropositionen für Junktoren
I
A0 linear in der Größe von A
Beispiel: a → (b ∧ c)
I
Einführung von x2 für b ∧ c und
Einführung von x1 für a → x2
x1 ↔ (a → x2 )
x2 ↔ (b ∧ c)
I
daraus konjunktive Normalform
(x1 ∨ a) ∧ (x1 ∨ ¬x2 ) ∧ (¬x1 ∨ ¬a ∨ x2 )
∧ (¬x2 ∨ b) ∧ (¬x2 ∨ c) ∧ (x2 ∨ ¬b ∨ ¬c)
∧ (x1 )
A. Knapp, G. Schellhorn: Formale Methoden
58
Klauseln
Definition
Eine Klausel ist eine Menge von Literalen. Eine Klauselmenge ist
eine Menge von Klauseln.
I
Eine Klausel wird als Disjunktion interpretiert; die leere Klausel wird als
false angesehen.
I
Eine Klauselmenge wird als Konjunktion interpretiert; die leere
Klauselmenge entspricht true.
Damit: Formeln in konjunktiver Normalform und true, false entsprechen
Klauselmengen.
Beispiel
I
(a ∨ b ∨ c) ∧ (¬b ∨ ¬a) ∧ (¬c ∨ ¬a) ≡ {{a, b, c}, {¬b, ¬a}, {¬c, ¬a}}
A. Knapp, G. Schellhorn: Formale Methoden
59
Resolutionskalkül
Lemma
Sind die Klauseln C1 und C2 mit p ∈ C1 und ¬p ∈ C2 gemeinsam
erfüllbar, dann ist die Klausel (C1 ∪ C2 ) \ {p, ¬p} erfüllbar.
Resolutionsregel
p, C1 ¬p, C2
C1 , C2
Satz
Eine Klauselmenge C ist genau dann unerfüllbar, wenn sich aus C
durch Anwendung der Resolutionsregel die leere Klausel ableiten läßt.
Beispiel: (¬a ∨ b) ∧ (a) ∧ (¬b)
¬b
¬a, b a
b
∅
A. Knapp, G. Schellhorn: Formale Methoden
60
Unit-Resolution
Lemma
Die Klauseln {`} und C mit ¬` ∈ C sind genau dann gemeinsam
erfüllbar, wenn C \ {¬`} erfüllbar ist.
Unit-Resolutionsregel
` ¬`, C
C
Boolean constraint propagation (BCP)
I Ersetzung der Klauseln {`} und C mit ¬` ∈ C in einer Klauselmenge C
durch C \ {¬`} zu neuer Klauselmenge C 0
Beispiel: Anwendung von BCP auf (a) ∧ (¬a ∨ b) ∧ (c ∨ ¬b ∨ d)
(a) ∧ (¬a ∨ b) ∧ (c ∨ ¬b ∨ d)
; (b) ∧ (c ∨ ¬b ∨ d)
;c∨d
A. Knapp, G. Schellhorn: Formale Methoden
61
Davis-Putnam-Logemann-Loveland-Algorithmus
Prüfung einer aussagenlogischen Formel in CNF auf Erfüllbarkeit
I
Grundlage vieler SAT-Beweiser zur Auffindung einer erfüllenden Belegung
DPLL(A) ≡
A0 ← BCP(A)
if A0 = true
then return true
else if A0 = false
then return false
else p ← choose vars(A0 )
return DPLL(A0 {p 7→ true}) ∨ DPLL(A0 {p 7→ false}) fi fi
A. Knapp, G. Schellhorn: Formale Methoden
62
SAT-Beweiser
Eingabeformat (DIMACS):
I Propositionen sind positive Zahlen, negiertes Atom
n ist -n.
I Klausel als Folge von Literalen geschrieben, durch Leerzeichen getrennt,
0
beendet Klausel; Klauseln hintereinander geschrieben
I Zu Beginn der Datei eine Zeile mit:
I
I
p cnf m n
m ist die Nummer der maximalen Nummer einer Proposition
n ist die Zahl der noch folgenden Zeilen in der Datei
Ausgabeformat
I Liste der Propositionen, die mit
tt zu belegen sind
Beispiel: a ∧ (¬b ∨ a) ∧ (c ∨ ¬d)
p cnf 4 3
1 0
-2 1 0
3 -4 0
Ausgabe etwa 1 3
A. Knapp, G. Schellhorn: Formale Methoden
63
Zusammenfassung
I
Aussagenlogik
I
I
I
Sequenzenkalkül AL
I
I
I
Syntax und Semantik
Modelle, Folgerbarkeit, Erfüllbarkeit
Korrektheit und Vollständigkeit
Theorembeweiser KIV
Resolutionskalkül
I
I
Konjunktive Normalform, Klauseln
SAT-Beweiser
A. Knapp, G. Schellhorn: Formale Methoden
64
Prädikatenlogik
Denn wenn A von jedem B und B von jedem C, muß A von jedem C
ausgesagt werden.
— Aristoteles, Analytica Priora A 4, 25b37ff.
Daraus der Vers: . . .
Barbara, celarent, darii, ferion, baralipton,
Celantes, dabitis, fapesmo, frisesomorum;
Cesare, camestres, festino, baroco; darapti,
Felapto, disamis, datisi, bocardo, ferison.
— Petrus Hispanus, Summulae Logicales 4.17
` : . (z) . ϕz ⊃ ψz : ϕx : ⊃ . ψx . . .
Dies ist eine Form des Syllogismus in Barbara. Man setze z. B. ϕz . = . z ist
ein Mensch, ψz . = . z ist sterblich, x = Sokrates. Dann wird die Aussage
zu: Wenn alle Menschen sterblich sind und Sokrates ein Mensch ist, dann
”
ist Sokrates sterblich.“
— Alfred N. Whitehead, Bertrand Russell, Principia Mathematica, *10.26
A. Knapp, G. Schellhorn: Formale Methoden
65
Signaturen
Definition
Eine Signatur Σ = (S, F, P) besteht aus:
I
einer endlichen Menge S von Sorten
I
einer endlichen Menge F von Funktionssymbolen f : ~s → s mit
I Argumentsorten ~
s = s1 . . . sn ∈ S∗ (Liste von Sorten)
I Resultatsorte s ∈ S
I
endlicher Menge P von Prädikatsymbolen p : ~s
I
Ein Funktionssymbol mit leerer Argumentliste heißt Konstante.
I
Ein Prädikatsymbol mit leerer Argumentliste heißt Proposition.
A. Knapp, G. Schellhorn: Formale Methoden
66
Signaturen: Beispiele
Zugriffsmöglichkeiten“ auf einen Datentypen
”
I
Gruppen
ΣGrp = ({Elt}, {1 : → Elt, · : Elt Elt → Elt, −1 : Elt → Elt}, ∅)
I
Natürliche Zahlen
ΣNat1 = ({Nat}, {0 : → Nat, s : Nat → Nat}, ∅)
ΣNat2 = ({Nat}, {0 : → Nat, 1 : → Nat, + : Nat Nat → Nat},
{< : Nat Nat})
I
Wahrheitswerte
ΣBool = ({Bool}, ∅, {true : , false : })
I
Listen
ΣList = ({Elt, List}, {empty : → List, cons : Elt List → List},
{isEmpty : List})
A. Knapp, G. Schellhorn: Formale Methoden
67
Signaturen in KIV
specification
sorts s1; s2; nat; set;
constants c1, c2 : s1;
∅ : set;
functions f : s1 × s2 → s2;
+ : nat × nat → nat;
* : nat × nat → nat;
predicates p : s1 × s2;
⊆ : set × set;
end specification
A. Knapp, G. Schellhorn: Formale Methoden
68
Terme
Definition
Eine Variablenmenge X für eine Signatur Σ = (S, F, P) ist die
Vereinigung von abzählbar unendlichen Mengen Xs für jede Sorte s ∈ S.
Definition
Seien Σ = (S, F, P) eine Signatur und X eine Variablenmenge
für Σ. Dann sind die Mengen T (Σ, X)s der Terme der Sorte s über Σ und X
gegeben durch
I
x ∈ Xs ist ein Term der Sorte s.
I
Sind t1 , . . . , tn Terme der Sorten s1 , . . . , sn und f : s1 . . . sn → s ∈ F , dann
ist f (t1 , . . . , tn ) ein Term der Sorte s.
T (Σ, X) sind alle Terme (aller Sorten) über Σ und X .
Beispiele:
I
In ΣGrp : −1 (1), ·(x, 1) für x ∈ XElt
I
In ΣNat1 : 0, s(s(s(0)))
A. Knapp, G. Schellhorn: Formale Methoden
69
Algebren
Definition
Eine Algebra A = ((As )s∈S , (f A )f ∈F , (pA )p∈P ) über einer
Signatur Σ = (S, F, P) (kurz: eine Σ-Algebra) besteht aus:
I
nichtleeren Mengen As für jede Sorte s ∈ S (Trägermengen)
I
Funktionen f A : As1 × · · · × Asn → As für alle f : s1 . . . sn → s ∈ F
I
Mengen pA ⊆ As1 × · · · × Asn für alle p : s1 . . . sn ∈ P
Die Klasse aller Σ-Algebren über Σ wird mit Alg(Σ) bezeichnet.
A. Knapp, G. Schellhorn: Formale Methoden
70
Algebren: Beispiele
Mögliche Interpretationen“ von Datentyp-Signaturen
”
I
I
Für ΣGrp : AGrp+ additiv
AElt = Z
1AGrp+ = 0, ·AGrp+ (x, y) = x + y,
−1 AGrp+ (x)
= −x
Für ΣNat1 : ANat∗
ANat = {∗}
0ANat∗ = ∗, sANat∗ (x) = x
I
Für ΣList : AList(Nat) Listen über natürlichen Zahlen
AElt = N, AList = N∗
emptyAList(Nat) = ε, consAList(Nat) (x, l) = x :: l
isEmptyAList(Nat) = {ε}
A. Knapp, G. Schellhorn: Formale Methoden
71
Belegungen
S
Definition
Eine Belegung (valuation) v : s∈S (Xs → As ) ist eine Abbildung,
die jedem Variablensymbol x ∈ Xs einen Wert v(x) ∈ As zuordnet.
Definition
Die Abänderung v{x 7→ a} der Belegung v für x ∈ Xs und a ∈ As
ist gegeben durch
(
v(y) falls x 6= y
(v{x 7→ a})(y) =
.
a
falls x = y
A. Knapp, G. Schellhorn: Formale Methoden
72
Semantik von Termen
Definition
Sei A eine Σ-Algebra und v eine Belegung. Dann ist die
Semantik (Auswertung) T JtK A v eines Terms t ∈ T (Σ, X)s der Sorte s der
Wert in As mit
I
I
T JxK A v = v(x), falls x ∈ X ;
T Jf (t1 , . . . , tn )K A v = f A (T Jt1 K A v, . . . , T Jtn K A v) für
f : s1 . . . sn → s ∈ F und ti ∈ T (Σ, X)si .
A. Knapp, G. Schellhorn: Formale Methoden
73
Variablen eines Terms
Für Terme gilt ein analoges Definitions- und Beweisprinzip wie für
aussagenlogische Formeln.
Definition
Die Variablen var(t) eines Terms sind
I
var(x) = {x} für x ∈ X ;
I
var(f (t1 , . . . , tn )) = var(t1 ) ∪ . . . ∪ var(tn ).
Die Semantik eines Terms hängt nur von der Belegung der Variablen in var(t)
ab (Koinzidenzlemma).
Satz
Sind v und w Belegungen und gilt v(x) = w(x) für alle Variablen
x ∈ var(t), so ist T JtK A v = T JtK A w.
I
Für Auswertung von Termen t mit var(t) = ∅ Belegung irrelevant.
I
Schreibweise: T JtK A statt T JtK A v, falls var(t) = ∅
A. Knapp, G. Schellhorn: Formale Methoden
74
Substitution in Termen
Definition
Die Substitution einer Variablen x durch einen Term t in einem
Term u, geschrieben als u{x 7→ t}, ist gegeben durch
I
(
t falls y = x
y{x 7→ t} =
y falls y 6= x
I
f (t1 , . . . , tn ){x 7→ t} = f (t1 {x 7→ t}, . . . , tn {x 7→ t}).
für y ∈ X ;
Die Semantik des Terms u{x 7→ t} ist dieselbe wie die des Terms u unter einer
Belegung, in der x den Wert von t hat (Substitutionslemma).
Lemma
T Ju{x 7→ t}K A v = T JuK A v{x 7→ T JtK A v}.
A. Knapp, G. Schellhorn: Formale Methoden
75
Formeln
Definition
Für eine Signatur Σ = (S, F, P) und eine Variablenmenge X für
Σ ist die Menge der prädikatenlogischen Formeln F (Σ, X) gegeben durch
I
true, false ∈ F (Σ, X);
I
t1 = t2 ∈ F (Σ, X), falls t1 , t2 ∈ T (Σ, X)s für ein s ∈ S;
I
p(t1 , . . . , tn ) ∈ F (Σ, X), falls p : s1 . . . sn ∈ P und ti ∈ T (Σ, X)si für
1 ≤ i ≤ n;
I
Wenn ϕ, ψ ∈ F (Σ, X), dann
(¬ϕ), (ϕ ∧ ψ), (ϕ ∨ ψ), (ϕ → ψ), (ϕ ↔ ψ) ∈ F (Σ, X);
I
Wenn ϕ ∈ F (Σ, X) und x ∈ X , dann (∀x . ϕ), (∃x . ϕ) ∈ F (Σ, X).
A. Knapp, G. Schellhorn: Formale Methoden
76
Formeln: Notation
I
Es gelten dieselben Präzendenz- und Klammerregeln wie bei
Aussagenlogik.
I
Zusätzlich: Quantoren binden am schwächsten
∀x . ϕ ∧ ψ ↔ ∃y . π ∨ ρ ≡ (∀x . ((ϕ ∧ ψ) ↔ (∃y . (π ∨ ρ))))
I
Quantoren binden immer soweit nach rechts wie möglich.
I
Abkürzung: Listen von Quantoren
∀x1 , x2 , . . . , xn . ϕ ≡ ∀x1 . ∀x2 . . . . ∀xn . ϕ
Beispiele:
I
In ΣGrp : ∀x . ·(x, −1 (x)) = 1
I
In ΣNat2 : ∀m, n . <(m, n) ↔ ∃k . ¬(k = 0) ∧ +(m, k) = n
Oft auch Mixfix- statt Präfix-Schreibweise für Terme
I
x · x−1 statt ·(x, −1 (x))
A. Knapp, G. Schellhorn: Formale Methoden
77
Prädikatenlogische Spezifikationen in KIV
specification
sorts nat;
constants zero : nat;
one : nat;
functions . + . : nat × nat → nat prio 9 right;
predicates . < . : nat × nat;
variables m, n, k : nat;
axioms commutativity+ : m + n = n + m;
less : m < n ↔ ∃ k. ¬ (k = zero) ∧ m + k = n;
end specification
A. Knapp, G. Schellhorn: Formale Methoden
78
Semantik von Formeln
Definition
Für eine Algebra A und eine Belegung v ist die Semantik einer
Formel FJAK A v der Wahrheitswert aus B mit
I
FJtrueK A v = tt
I
FJfalseK A v = ff
I
FJt1 = t2 K A v = tt gdw. T Jt1 K A v = T Jt2 K A v
I
FJp(t1 , . . . , tn )K A v = tt gdw. (T Jt1 K A v, . . . , T Jtn K A v) ∈ pA
I
FJ¬ϕK A v = tt gdw. FJϕK A v = ff
I
FJϕ ∧ ψK A v = tt gdw. FJϕK A v = tt und FJψK A v = tt
I
FJϕ ∨ ψK A v = tt gdw. FJϕK A v = tt oder FJψK A v = tt
I
FJϕ → ψK A v = tt gdw. FJϕK A v = ff oder FJψK A v = tt
I
FJϕ ↔ ψK A v = tt gdw. FJϕK A v = FJψK A v
I
FJ∀x . ϕK A v = tt gdw. f. a. a ∈ As : FJϕK A v{x 7→ a} = tt (für x ∈ Xs )
I
FJ∃x . ϕK A v = tt gdw. ex. a ∈ As : FJϕK A v{x 7→ a} = tt (für x ∈ Xs )
A. Knapp, G. Schellhorn: Formale Methoden
79
Variablen einer Formel
Definition
Die Variablen var(ϕ) einer Formel ϕ sind gegeben durch
I
var(true) = var(false) = ∅
I
var(t1 = t2 ) = var(t1 ) ∪ var(t2 )
I
var(p(t1 , . . . , tn )) = var(t1 ) ∪ . . . ∪ var(tn )
I
var(¬ψ) = var(ψ)
I
var(ψ ? π) = var(ψ) ∪ var(π) für ? ∈ {∧, ∨, →, ↔}
I
var(Qx . ψ) = {x} ∪ var(ψ) für Q ∈ {∀, ∃}
A. Knapp, G. Schellhorn: Formale Methoden
80
Freie Variablen einer Formel
Definition
Die freien Variablen fvar(ϕ) einer Formel ϕ sind gegeben durch
I
fvar(true) = fvar(false) = ∅
I
fvar(t1 = t2 ) = var(t1 ) ∪ var(t2 )
I
fvar(p(t1 , . . . , tn )) = var(t1 ) ∪ . . . ∪ var(tn )
I
fvar(¬ψ) = fvar(ψ)
I
fvar(ψ ? π) = fvar(ψ) ∪ fvar(π) für ? ∈ {∧, ∨, →, ↔}
I
fvar(Qx . ψ) = fvar(ψ) \ {x} für Q ∈ {∀, ∃}
Eine Formel ohne freie Variablen heißt geschlossen.
A. Knapp, G. Schellhorn: Formale Methoden
81
Koinzidenzlemma für Formeln
Die Semantik einer Formel hängt nur von den freien Variablen ab
(Koinzidenzlemma).
Lemma
Sind zwei Belegungen v und w gleich für alle freien Variablen einer
Formeln ϕ, dann gilt FJϕK A v = FJϕK A w.
I
Für geschlossene Formeln ϕ Belegung v irrelevant.
A. Knapp, G. Schellhorn: Formale Methoden
82
Substitution in Formeln
Definition
Die Substitution ϕ{x 7→ t} einer Variablen x durch einen Term t in
einer Formel ϕ ist gegeben durch
I
true{x 7→ t} = true
I
false{x 7→ t} = false
I
(t1 = t2 ){x 7→ t} = t1 {x 7→ t} = t2 {x 7→ t}
I
p(t1 , . . . , tn ){x 7→ t} = p(t1 {x 7→ t}, . . . , tn {x 7→ t})
I
(¬ψ){x 7→ t} = ¬(ψ{x 7→ t})
I
(ψ ? π){x 7→ t} = ψ{x 7→ t} ? π{x 7→ t}


falls y = x oder x ∈
/ fvar(ψ)
Qy . ψ




/ var(t), x ∈ fvar(ψ)
Qy . ψ{x 7→ t} falls y 6= x, y ∈
(Qy . ψ){x 7→ t} = Qz . (ψ{y 7→ z}){x 7→ t}




falls y 6= x, y ∈ var(t), x ∈ fvar(ψ)



(z neu, d. h. z ∈
/ fvar(ψ) ∪ var(t))
I
A. Knapp, G. Schellhorn: Formale Methoden
83
Substitutionslemma für Formeln
Die Formel ϕ{x 7→ t} ist wahr in der Algebra A unter der Belegung v genau
dann, wenn die Formel ϕ unter einer abgeänderten Belegung wahr ist, in der x
den Wert von t hat (Substitutionslemma).
Lemma
FJϕ{x 7→ t}K A v = FJϕK A v{x 7→ T JtK A v}.
Beispiel für Umbenennung bei Quantoren:
I
∃m . n < m wahr über den natürlichen Zahlen (bei jeder Belegung von n).
I
Nach dem Lemma darf für n jeder Term eingesetzt werden, und man erhält
wieder eine wahre Aussage.
I
Ersetzen von n durch m · m würde ohne Umbenennung aber
∃m . m · m < m ergeben, was falsch ist.
I
Das richtige Ergebnis ist ∃m0 . m · m < m0.
A. Knapp, G. Schellhorn: Formale Methoden
84
Gültigkeit und Modelle
Definition
Die Formel ϕ ist in A unter der Belegung v gültig, geschrieben als
A, v |= ϕ, wenn FJϕK A v = tt.
Eine Algebra A ist ein Modell der Formel ϕ, geschrieben als A |= ϕ, wenn für
alle Belegungen v gilt: A, v |= ϕ.
Eine Algebra A ist ein Modell für die Formelmenge Φ, geschrieben als A |= Φ,
falls A |= ϕ für alle ϕ ∈ Φ.
Definition
I
I
Sei ϕ eine Formel und Φ eine Formelmenge.
ϕ ist eine Tautologie, in Zeichen |= ϕ, falls A |= ϕ für alle A ∈ Alg(Σ).
ϕ ist erfüllbar in der Algebra A, falls es eine Belegung v mit A, v |= ϕ gibt.
Φ ist erfüllbar in der Algebra A, falls es eine Belegung v mit A, v |= ϕ für
alle ϕ ∈ Φ gibt.
I ϕ ist erfüllbar, falls ϕ ist erfüllbar in einer Algebra.
I Φ ist erfüllbar, falls Φ erfüllbar in einer Algebra.
I
A. Knapp, G. Schellhorn: Formale Methoden
85
Tautologie, Erfüllbarkeit: Beispiele
I
x = x, p(x) ∨ ¬p(x) sind Tautologien.
I
p(x) hat Modelle, ist erst recht erfüllbar (in mehr Algebren als den
Modellen).
I
x = y ist erfüllbar (in jeder Algebra) und hat ein Modell (das
einelementige).
I
x 6= y, p(x) ∧ ¬p(y) sind erfüllbar (aber nicht in jeder Algebra), haben
keine Modelle
Es gilt:
I
ϕ ist Tautologie ⇒ ϕ hat Modell ⇒ ϕ ist erfüllbar, aber keine Umkehrung
I
ϕ ist nicht erfüllbar genau dann, wenn ¬ϕ eine Tautologie ist.
A. Knapp, G. Schellhorn: Formale Methoden
86
Folgerbarkeit
Definition
Eine Formel ϕ ist eine Folgerung aus der Formelmenge Φ,
geschrieben als Φ |= ϕ, falls für alle A ∈ Alg(Σ) gilt: A |= Φ impliziert A |= ϕ.
Φ als Axiome einer Datentypspezifikation
Beispiel
I
Für ΣGrp : ΦGrp
∀x . x · 1 = x
∀x . 1 · x = x
∀x, y, z . x · (y · z) = (x · y) · z
∀x . x · x−1 = 1
∀x . x−1 · x = 1
I
Dann ΦGrp |= ∀e . (∀x . x · e = x ∧ e · x = x) → e = 1.
A. Knapp, G. Schellhorn: Formale Methoden
87
Eigenschaften der Prädikatenlogik
Definition
Ist fvar(ϕ) = {x1 , . . . , xn }, so ist der Allabschluß
cl∀ (ϕ) = ∀x1 , . . . , xn . ϕ.
1. A, v |= ϕ gdw. nicht A, v |= ¬ϕ (geschrieben als A, v 6|= ¬ϕ)
2. A, v |= ϕ oder A, v |= ¬ϕ
3. A |= ϕ oder A |= ¬ϕ, falls ϕ geschlossen
4. A |= ϕ gdw. A 6|= ¬ϕ, falls ϕ geschlossen
5. A |= ϕ gdw. A |= cl∀ (ϕ)
6. Φ |= ϕ gdw. Φ |= cl∀ (ϕ)
7. Φ ∪ {ϕ} |= ψ gdw. Φ ∪ {cl∀ (ϕ)} |= cl∀ (ψ)
8. Φ ∪ {ϕ} |= ψ gdw. Φ |= cl∀ (ϕ) → ψ
Aus Φ ∪ {ϕ} |= ψ folgt nur für geschlossenes ϕ, daß Φ |= ϕ → ψ . Implikation
und Folgerbarkeit fallen also nicht zusammen:
I
x > 0 |= ∀x . x > 0 ist wahr, |= x > 0 → ∀x . x > 0 ist falsch (über N)
A. Knapp, G. Schellhorn: Formale Methoden
88
Eigenschaften von Quantoren
Satz
Wenn z ∈
/ fvar(ϕ) \ {y}, so gelten:
A, v |= ∀y . ϕ gdw. A, v |= ∀z . ϕ{y 7→ z} ,
|= (∀y . ϕ) ↔ (∀z . ϕ{y 7→ z}) .
Beweisskizze
Satz
Aus Substitutionslemma.
Für jede Formel ϕ gelten
|= (∀x . ϕ) → ϕ{x 7→ t} ,
|= ϕ{x 7→ t} → (∃x . ϕ) .
Beweisskizze
Aus Substitutionslemma.
A. Knapp, G. Schellhorn: Formale Methoden
89
Tautologien für Quantoren (1)
Sei y ∈
/ fvar(ϕ).
Q1.
Q2.
Q3.
Q4.
Q5.
Q6.
Q7.
Q8.
A. Knapp, G. Schellhorn: Formale Methoden
(∀x . ϕ) ↔ (∀y . ϕ{x 7→ y})
(∃x . ϕ) ↔ (∃y . ϕ{x 7→ y})
(¬∀x . ϕ) ↔ (∃x . ¬ϕ)
(¬∃x . ϕ) ↔ (∀x . ¬ϕ)
(∀x . ∀y . ϕ) ↔ (∀y . ∀x . ϕ)
(∃x . ∃y.ϕ) ↔ (∃y . ∃x . ϕ)
(∃x . ϕ ∨ ψ) ↔ ((∃x . ϕ) ∨ (∃x . ψ))
(∀x . ϕ ∧ ψ) ↔ ((∀x . ϕ) ∧ (∀x . ψ))
90
Tautologien für Quantoren (2)
Q9.
Q10.
Q11.
Q12.
Q13.
Q14.
Q15.
A. Knapp, G. Schellhorn: Formale Methoden
(∃x . ϕ ∧ ψ) → ((∃x . ϕ) ∧ (∃x . ψ))
((∀x . ϕ) ∨ (∀x . ψ)) → (∀x . ϕ ∨ ψ)
(∀x . ϕ → ψ) → ((∀x . ϕ) → (∀x . ψ))
(∀x . ϕ ↔ ψ) → ((∀x . ϕ) ↔ (∀x . ψ))
(∀x . ϕ) → ϕ{x 7→ t}
ϕ{x 7→ t} → ∃x . ϕ
(∃x . ∀y . ϕ) → ∀y . ∃x . ϕ
91
Tautologien für Quantoren (3)
Sei x ∈
/ fvar(ψ).
Q16.
Q17.
Q18.
Q19.
Q20.
Q21.
Q22.
Q23.
Q24.
Q25.
A. Knapp, G. Schellhorn: Formale Methoden
(∀x . ψ) ↔ ψ
(∃x . ψ) ↔ ψ
(∃x . ϕ ∨ ψ) ↔ ((∃x . ϕ) ∨ ψ)
(∀x . ϕ ∨ ψ) ↔ ((∀x . ϕ) ∨ ψ)
(∃x . ϕ ∧ ψ) ↔ ((∃x . ϕ) ∧ ψ)
(∀x . ϕ ∧ ψ) ↔ ((∀x . ϕ) ∧ ψ)
(∃x . ψ → ϕ) ↔ (ψ → ∃x . ϕ)
(∀x . ψ → ϕ) ↔ (ψ → ∀x . ϕ)
(∀x . ϕ → ψ) ↔ ((∃x . ϕ) → ψ)
(∃x . ϕ → ψ) ↔ ((∀x . ϕ) → ψ)
92
Substitution von Formeln durch Formeln
Umformungen mittels Tautologien, lokale Simplifikation
Definition
Für Formeln ϕ, ψ , π ist die Substitution von ψ durch π in ϕ,
geschrieben als ϕ{ψ 7→ π}, definiert wie in der Aussagenlogik; zusätzlich für
Q ∈ {∀, ∃}:
I
(Qx . ϕ){ψ 7→ π} = π , falls ψ = Qx . ϕ;
I
(Qx . ϕ){ψ 7→ π} = Qx . (ϕ{ψ 7→ π}), falls x ∈
/ fvar(ψ) ∪ fvar(π);
I
(Qx . ϕ){ψ 7→ π} = Qy . ((ϕ{x 7→ y}){ψ 7→ π}) mit
y∈
/ fvar(ϕ) ∪ fvar(ψ) ∪ fvar(π), falls x ∈ fvar(ψ) ∪ fvar(π).
Lemma
Wenn A, v |= ψ ↔ π , dann A, v |= ϕ{ψ 7→ π} ↔ ϕ.
A. Knapp, G. Schellhorn: Formale Methoden
93
Pränex-Normalform
Zu jeder Formel ϕ gibt es eine quantorenfreie Formel ψ , Quantoren
Q1 , . . . , Qn ∈ {∀, ∃} und Variablen x1 , . . . xn , sodaß
Satz
|= ϕ ↔ Q1 x1 . . . . Qn xn . ψ
gilt.
Beweisskizze
I Ersetze Äquivalenzen durch Konjunktion von zwei Implikationen.
I Schiebe Quantoren nach außen (zuerst den äußersten); mit Q3, Q4, Q18–Q25
(rechte durch linke Seite ersetzen).
I Wenn das nicht geht, weil eine gebundene Variable auch frei in
π ist, benenne die
gebundene Variable vorher um mit Q1, Q2.
A. Knapp, G. Schellhorn: Formale Methoden
94
Tautologien für Gleichheit
Sei x ∈
/ var(t0 ).
E1.
E2.
E3.
E4.
E5.
E6.
E7.
E8.
E9.
E10.
E11.
t=t
t1 = t2 → t2 = t1
t1 = t2 ∧ t2 = t3 → t1 = t3
t1 = u1 ∧ . . . ∧ tn = un →
f (t1 , . . . , tn ) = f (u1 , . . . , un )
t1 = u1 ∧ . . . ∧ tn = un →
(p(t1 , . . . , tn ) ↔ p(u1 , . . . , un ))
t = u → s{x 7→ t} = s{x 7→ u}
t = u → ϕ{x 7→ t} ↔ ϕ{x 7→ u}
∃x . x = t
(∃x . x = t0 ∧ ϕ) ↔ ϕ{x 7→ t0 }
(∀x . x = t0 → ϕ) ↔ ϕ{x 7→ t0 }
(∀x . x 6= t0 ∨ ϕ) ↔ ϕ{x 7→ t0 }
A. Knapp, G. Schellhorn: Formale Methoden
Reflexivität
Symmetrie
Transitivität
Kongruenz für f
Kongruenz für p
Einsetzung in Term s
Einsetzung in Formel ϕ
nichtleere Trägermengen
Beseitigung Existenzquantor
Beseitigung Allquantor
Beseitigung Allquantor
95
Sequenzen
Wie in der Aussagenlogik ist eine Sequenz eine Kurzschreibweise für eine
Formel:
A, v |= Γ ⇒ ∆ ⇐⇒ A, v |=
V
Γ→
W
∆
Definition
Eine Algebra A ist ein Modell einer Sequenz Γ ⇒ ∆,
V
W
geschrieben als A |= Γ ⇒ ∆, falls A |= cl∀ ( Γ → ∆).
A. Knapp, G. Schellhorn: Formale Methoden
96
Regeln des Sequenzenkalküls PL
I
Regeln des aussagenlogischen Sequenzenkalküls werden übernommen.
I
Zusätzlich je eine Regel für Quantor und Gleichheit links und rechts.
(L∀)
(L∃)
(Refl)
ϕ{x 7→ t}, ∀x . ϕ, Γ ⇒ ∆
∀x . ϕ, Γ ⇒ ∆
ϕ{x 7→ y}, Γ ⇒ ∆
∃x . ϕ, Γ ⇒ ∆
(1)
Γ ⇒ t = t, ∆
(R∃)
(R∀)
(Eq)
Γ ⇒ ϕ{x 7→ t}, ∃x . ϕ, ∆
Γ ⇒ ∃x . ϕ, ∆
Γ ⇒ ϕ{x 7→ y}, ∆
Γ ⇒ ∀x . ϕ, ∆
(1)
x = t, Γ{x 7→ t} ⇒ ∆{x 7→ t}
x = t, Γ ⇒ ∆
(2)
(1) y ∈
/ (fvar(ϕ) \ {x}) ∪ fvar(Γ) ∪ fvar(∆)
(2) auch mit t = x statt x = t
A. Knapp, G. Schellhorn: Formale Methoden
97
Ableitbarkeit, Korrektheit, Invertierbarkeit
Definition
Eine Sequenz Γ ⇒ ∆ ist aus einer Menge von Formlen Φ
ableitbar, geschrieben als Φ `PL Γ ⇒ ∆, falls es einen mit den Regeln von PL
gebildeten Beweisbaum mit Konklusion Γ ⇒ ∆ und Prämissen der Form ⇒ ϕ
mit ϕ ∈ Φ gibt.
Satz
Für einen Baum mit Konklusion Γ ⇒ ∆ und Prämissen
Γ1 ⇒ ∆1 , . . . Γn ⇒ ∆n gilt:
I
Γ1 ⇒ ∆1 , . . . Γn ⇒ ∆n |= Γ ⇒ ∆ (Korrektheit)
I
Wenn Φ `PL Γ ⇒ ∆, dann Φ |= Γ ⇒ ∆ (Korrektheit von PL).
I
Falls keine Abschwächung vorkommt, gilt für jedes 1 ≤ i ≤ n, daß
Γ ⇒ ∆ |= Γi ⇒ ∆i (Invertierbarkeit).
Beweisskizze Wie für AL: Behauptung gilt für jede Regel, Induktion über die Anzahl
der angewandten Regeln
A. Knapp, G. Schellhorn: Formale Methoden
98
Ableitbarkeit in PL: Beispiel (1)
Ableitung für die Sequenz ⇒ (∃x . ∀y . ϕ) → ∀y . ∃x . ϕ (Q15)
(A)
(ϕ{x 7→ z}){y 7→ w}, ∀y . ϕ1 ⇒ (ϕ{y 7→ w}){x 7→ z}, ∃x . ϕ2
(R∃)
(ϕ{x 7→ z}){y 7→ w}, ∀y . ϕ{x 7→ z} ⇒ ∃x . ϕ{y 7→ w}
(L∀)
∀y . ϕ{x 7→ z} ⇒ ∃x . ϕ{y 7→ w}
=
(∀y . ϕ){x 7→ z} ⇒ (∃x . ϕ){y 7→ w}
(R∀)
(∀y . ϕ){x 7→ z} ⇒ ∀y . ∃x . ϕ
(L∃)
∃x . ∀y . ϕ ⇒ ∀y . ∃x . ϕ
(R→)
⇒ (∃x . ∀y . ϕ) → ∀y . ∃x . ϕ
wobei w, z ∈
/ fvar(ϕ), ϕ1 = ϕ{x 7→ z}, ϕ2 = ϕ{y 7→ w}
A. Knapp, G. Schellhorn: Formale Methoden
99
Ableitbarkeit in PL: Beispiel (2)
Ableitung für die Sequenz ⇒ ∀x, y, z . x = y ∧ x = z → y = z
(A)
x = y, y = z ⇒ y = z
(Eq)
x = y, x = z ⇒ y = z
(L∧)
x=y∧x=z⇒y=z
(R→)
⇒x=y∧x=z→y=z
(R∀)
⇒ ∀z . x = y ∧ x = z → y = z
(R∀)
⇒ ∀y, z . x = y ∧ x = z → y = z
(R∀)
⇒ ∀x, y, z . x = y ∧ x = z → y = z
A. Knapp, G. Schellhorn: Formale Methoden
100
Ableitbarkeit in PL: Beispiel (3)
Ableitung für die Sequenz ⇒ ∀e . (∀x . x · e = x) → e = 1 aus ΦGrp
(A)
[. . .]
e = 1, 1 · e = e, 1 · e = 1 ⇒ e = 1
(L→)
1 · e = e ∧ 1 · e = 1 → e = 1, 1 · e = e, 1 · e = 1 ⇒ e = 1
3 × (L∀)
∀x, y, z . x = y ∧ x = z → y = z, 1 · e = e, 1 · e = 1 ⇒ e = 1
(Lem2)
1 · e = e, 1 · e = 1 ⇒ e = 1
(L∀)
∀x . 1 · x = x, 1 · e = 1 ⇒ e = 1
(Lem1)
1·e=1⇒e=1
(L∀)
∀x . x · e = x ⇒ e = 1
(R→)
⇒ (∀x . x · e = x) → e = 1
(R∀)
⇒ ∀e . (∀x . x · e = x) → e = 1
I
(Lem1): (Cut) für ∀x . 1 · x = x aus ΦGrp
I
(Lem2): (Cut) für ∀x, y, z . x = y ∧ x = z → y = z
A. Knapp, G. Schellhorn: Formale Methoden
101
Beweisen mit Prädikatenlogik in KIV
Bisher: Basis-PL-Kalkül (mit “use basic rules”); in Zukunft KIV-Kalkül: alles was
im Basiskalkül umständlich mit mehreren Schritten gemacht werden muss, wird
in natürliche Schritte zusammengefasst:
I
Regeln zur Verwendung von Lemmata, d. h. anderer (schon bewiesener)
Theoreme oder Axiome (statt nur cut-Regel)
I
Gleichungseinsetzen für beliebige Gleichungen t = u
I
Gleichungseinsetzen an speziellen Positionen (statt überall)
I
Gleichungseinsetzen und (L∀), (R∃) mit “discard”
I
Fallunterscheidungsregel (“case distinction”) faßt alle aussagenlogischen
Regeln mit zwei Prämissen zusammen ((L∨), (L→),(L↔), (R∧),(R↔))
I
Regel “prop simplification”, um AL-Regeln mit einer Prämisse
anzuwenden, wird aber normalerweise nicht verwendet
I
stattdessen: Simplifier-Regel
A. Knapp, G. Schellhorn: Formale Methoden
102
Der Simplifier in KIV
KIV-Simplifier macht viele Vereinfachungen automatisch
I
wendet aussagenlogische Regeln mit weniger als zwei Prämissen an,
ausserdem (Refl)
I
wendet (R∀), (L∃) an
I
wendet kontextabhängige Substitutionen (wie etwa
A, Γ{A 7→ true} ⇒ ∆{A 7→ true}/A, Γ ⇒ ∆) an
I
setzt x = t mit x ∈
/ var(t) ein und entfernt x = t
setzt Gleichungen u = t ein, falls t einfacher“ als u
”
I Weglassen überflüssiger Quantoren mit (Q16–Q23), (E9–E11)
I
I
Rewriting: Umschreiben von Gleichungen mit gegebenen Theoremen
durch automatischem insert rewrite lemma mit Theoremen (später)
KIV macht nach jeder Regelanwendung einen Test, ob der KIV-Simplifier
Prämissen schliessen kann. Wenn ja, bekommt man diese Prämissen nicht zu
sehen (abstellbar mit der Option “no automatic predtest”).
A. Knapp, G. Schellhorn: Formale Methoden
103
KIV-Kalkül: Allgemeines Einsetzen von Gleichungen
Allgemeine Substitution aus
t = u, Γ{x 7→ u} ⇒ ∆{x 7→ u} `PL t = u, Γ{x 7→ t} ⇒ ∆{x 7→ t}
I
x markiert“ die Ersetzungsstellen
”
Im KIV-Kalkül deshalb als (Eq) die Regel
(insert equation)
t = u, Γ{x 7→ u} ⇒ ∆{x 7→ u}
t = u, Γ{x 7→ t} ⇒ ∆{x 7→ t}
Beispiel:
e = 1 · e, 1 = 1 · e ⇒ 1 = 1 · e
(insert equation)
e = 1 · e, 1 = 1 · e ⇒ 1 = e
wegen (1 = e) ≡ (1 = x){x 7→ e} und (1 = 1 · e) ≡ (1 = x){x 7→ 1 · e}
A. Knapp, G. Schellhorn: Formale Methoden
104
KIV-Kalkül: Lemmaanwendung
Anwendung von Axiomen mit (Cut), (L∀) und evtl. (insert equation) oft
umständlich
Im KIV-Kalkül spezielle Regel
(insert lemma)
Γ0 ⇒ ∆0 Γ ⇒ (
V
Γ0 )θ, ∆ (
W
∆0 )θ, Γ ⇒ ∆
Γ⇒∆
I
Γ0 ⇒ ∆0 ist das Lemma (Axiom oder anderes Theorem)
I
θ ist eine Substitution für die freien Variablen des Lemmas
Beispiel: Lemma x = y, x = z ⇒ y = z
x = y, x = z ⇒ y = z
1 · e = e, 1 · e = 1 ⇒ 1 · e = e ∧ 1 · e = 1, e = 1
e = 1, 1 · e = e, 1 · e = 1 ⇒ e = 1
(insert lemma)
1 · e = e, 1 · e = 1 ⇒ e = 1
mit θ = {x 7→ 1 · e, y 7→ e, z 7→ 1}
A. Knapp, G. Schellhorn: Formale Methoden
105
KIV-Kalkül: Ersetzungslemmata
(insert rewrite lemma)
Γ0 ⇒ ϕ → t = u Γ ⇒ (
V
Γ0 ∧ ϕ)θ, ∆ Γ00 ⇒ ∆00
Γ⇒∆
I
Γ0 ⇒ ϕ → t = u ist das Lemma (Γ0 und Vorbedingung ϕ dürfen fehlen)
I
θ ist eine Substitution für die freien Variables des Lemmas
I
Γ00 ` ∆00 entsteht aus Γ ` ∆ durch Ersetzen von tθ durch uθ
I
Lemmata der Form Γ0 ⇒ ϕ → (ψ ↔ π) mit ψ Literal erlaubt: Dann wird
ψθ durch πθ ersetzt
A. Knapp, G. Schellhorn: Formale Methoden
106
Deduktionstheorem
Φ ∪ {ϕ} `PL ⇒ ψ gdw. Φ `PL cl∀ (ϕ) ⇒ ψ
gdw. Φ `PL ⇒ cl∀ (ϕ) → ψ
Satz
Beweisskizze
Obere Äquivalenz wie für Aussagenlogik mit zwei Zusätzen:
⇒“ muß cl∀ (ϕ) (nicht nur ϕ) in jedem Antezedent addiert werden.
”
I Damit bleiben bei (R∀) und (L∃) die Variablenbedingungen gültig.
I Prämissen cl∀ (ϕ) ⇒ ϕ können mit (L∀) geschlossen werden.
I Für
⇐“ braucht man (Cut) mit ⇒ cl∀ (ϕ) (für das Axiom ϕ).
I Die Prämisse ⇒ cl∀ (ϕ), ψ kann mit (Weak), dann (R∀) zum Axiom ϕ
I Bei
”
reduziert werden.
A. Knapp, G. Schellhorn: Formale Methoden
107
Konsistenzlemma
Definition
Lemma
Modell.
Eine Menge Φ von Formeln heißt konsistent, falls Φ 6`PL ⇒.
Jede konsistente Menge prädikatenlogischer Formeln hat ein
Ohne Beweis (Kurt Gödel 1929)
A. Knapp, G. Schellhorn: Formale Methoden
108
Vollständigkeitssatz
Satz
Für eine Formel ϕ und eine Formelmenge Φ gilt
Φ |= ϕ
⇒
Φ `PL ⇒ ϕ
Beweisskizze
⇔
⇒
⇔
⇒
Φ |= ϕ
Φ ∪ {¬ cl∀ (ϕ)} hat kein Modell
Φ ∪ {¬ cl∀ (ϕ)} `PL ⇒
Φ `PL ⇒ cl∀ (ϕ)
Φ `PL ⇒ ϕ
(Def. Φ |= ϕ)
(Konsistenzlemma)
(Deduktionstheorem)
(mit Regel (R∀))
Intuition: Korrektheit und Vollständigkeit von PL garantieren, daß
Berechnungen im Kalkül“ genau die Theoreme ergeben, die in allen
”
Datenstrukturen der Axiome gelten.
A. Knapp, G. Schellhorn: Formale Methoden
109
Endlichkeitssatz
Satz
Eine Menge von Formeln Φ hat genau dann ein Modell, wenn jede
endliche Teilmenge von Φ ein Modell hat.
Beweisskizze
ist.
Für ⇐“: Nach Konsistenzlemma reicht es zu zeigen, daß Φ konsistent
”
I Angenommen,
Φ wäre inkonsistent.
I Dann gibt es einen Beweis für die leere Sequenz (false).
I Der Beweis verwendet nur endliche viele Axiome.
I Somit ist schon diese endliche Menge inkonsistent und hat kein Modell, im
Widerspruch zur Annahme.
A. Knapp, G. Schellhorn: Formale Methoden
110
Unentscheidbarkeit der Prädikatenlogik
Satz
Es gibt kein Entscheidungsverfahren für die Allgemeingültigkeit von
prädikatenlogischen Formeln.
Ohne Beweis (Alonzo Church 1936)
Zählt man alle Beweise des Sequenzenkalküls auf, so wird darin jede
allgemeingültige Formel irgendwann vorkommen, aber das Verfahren kann
nicht so verschärft werden, daß es auch für alle nicht allgemeingültigen
Formeln immer abbricht.
Somit ist Prädikatenlogik schwierig“ im Gegensatz zur Aussagenlogik, für die
”
der Sequenzenkalkül ein Entscheidungsverfahren ist.
Das Problem bei PL liegt bei der Frage, welche Terme t man bei den Regeln
(L∀) und (R∃) wählen soll.
A. Knapp, G. Schellhorn: Formale Methoden
111
Zusammenfassung
I
Prädikatenlogik
I
I
I
I
Sequenzenkalkül PL
I
I
I
Syntax: Signaturen, Terme, Formeln
Semantik: Algebren
Modelle, Folgerbarkeit, Erfüllbarkeit
Korrektheit und Vollständigkeit
Beweisen in KIV
Unentscheidbarkeit der Prädikatenlogik
A. Knapp, G. Schellhorn: Formale Methoden
112
Semantische Beschreibung von Softwaresystemen
Operationale Sicht
I
Semantischer Bereich: Zustandsübergangssysteme (Automaten)
I
Zustände, Zustandsübergänge, Abläufe
Algebraische Sicht
I
Semantischer Bereich: Algebren
I
Datentypen mit Sorten und Operationen
A. Knapp, G. Schellhorn: Formale Methoden
113
Algebraische Sicht: Automaten
specification
sorts state;
predicates trans : state × state;
initial : state;
final : state;
end specification
Abläufe eines Automaten als Folgen [s1 , . . . , sn ] von Zuständen
initial(s1 ) ∧ final(sn ) ∧ ∀k . k < n → trans(sk , sk + 1 )
A. Knapp, G. Schellhorn: Formale Methoden
114
Algebraische Sicht: Abstrakte Syntaxbäume
specification
sorts prog;
boolexpr;
...
functions (: Konstruktoren :)
mkif : boolexpr × prog × prog → prog;
mkwhile : boolexpr × prog → prog;
...
(: Selektoren :)
test : prog → boolexpr;
thenbranch : prog → prog;
...
variables b : boolexpr;
p1, p2 : prog;
...
axioms test(mkif(b, p1, p2)) = b;
thenbranch(mkif(b, p1, p2)) = p1;
...
end specification
A. Knapp, G. Schellhorn: Formale Methoden
115
Algebraische Sicht: Syntax und Semantik
Syntax und semantische Bereiche als Datentypen beschreibbar
Relation zwischen Syntax und semantischen Bereichen als Abbildung
I
sem : prog → set(trace)
I
Semantik von Programmier- und Spezifikationssprachen
A. Knapp, G. Schellhorn: Formale Methoden
116
Algebraische Spezifikationen
Ziel: Festlegung eines bestimmten Datentyps (Algebra)
I
Welche Operationen?
I
Welche Axiome?
I
Welche Datentypen können überhaupt spezifizieren werden?
I
Sind alle wahren Aussagen über dem Datentyp beweisbar?
A. Knapp, G. Schellhorn: Formale Methoden
117
Einfache Spezifikationen
Definition
Eine einfache Spezifikation Sp = (Σ, X, Ax) besteht aus einer
Signatur Σ, einer Variablenmenge X für Σ und einer entscheidbaren Menge
von Axiomen Ax ⊆ F (Σ, X).
I
Axiomenschemata“ führen auf unendliche Mengen von Axiomen
”
Eine Algebra A ist ein Modell einer einfachen Spezifikation
Sp = (Σ, X, Ax), geschrieben als A |= Sp oder A ∈ Mod(Sp), falls
A ∈ Alg(Σ) und A |= Ax.
Definition
I
Lose Semantik von Sp: Modellklasse Mod(Sp)
Eine Formel ϕ ∈ F (Σ, X) folgt aus einer einfachen Spezifikation
Sp = (Σ, X, Ax), geschrieben als Sp |= ϕ, falls für alle M ∈ Mod(Sp) gilt:
M |= ϕ.
Definition
A. Knapp, G. Schellhorn: Formale Methoden
118
Einfache Spezifikationen: Beispiel
Bool = specification
sorts bool;
constants tt, ff : bool;
variables b : bool;
axioms ax1: tt 6= ff;
ax2: b = tt ∨ b = ff;
end specification
I
B ∈ Mod(Bool) mit ttB = tt, ffB = ff
I
Mod(Bool) = {B}?
A. Knapp, G. Schellhorn: Formale Methoden
119
Homomorphismen
Sei Σ = (S, F, P) eine Signatur. Für zwei Algebren
A, B ∈ Alg(Σ) ist ein Σ-Homomorphismus h : A → B eine Familie von
Abbildungen (hs )s∈S mit
Definition
I
hs : As → Bs
I
Für jedes f : s1 . . . sn → s ∈ F gilt
hs (f A (a1 , . . . , an )) = f B (hs1 (a1 ), . . . , hsn (an )) .
I
Für jedes p : s1 . . . sn ∈ P gilt:
(a1 , . . . , an ) ∈ pA ⇐⇒ (hs1 (a1 ), . . . , hsn (an )) ∈ pB .
I
Ein Σ-Homomorphismus ist eine Familie von Abbildungen zwischen den
Trägermengen zweier Algebren, die mit den Funktions- und
Prädikatsymbolen verträglich ist.
I
Verallgemeinerung von Homomorphismen für Gruppen, Ringe &c.
A. Knapp, G. Schellhorn: Formale Methoden
120
Isomorphismus, Monomorphie
Definition
Ein Σ-Homomorphismus (hs )s∈S ist ein Σ-Isomorphismus, falls
alle hs bijektiv sind.
Zwei Σ-Algebren A, B heißen isomorph, geschrieben als A ∼
= B , falls ein
Σ-Isomorphismus h : A → B existiert.
I
Ein Isomorphismus h : A → B benennt die Elemente von A in die
Elemente von B um.
Definition
Eine Spezifikation Sp ist monomorph, wenn für alle
A, B ∈ Mod(Sp) gilt: A ∼
= B.
A. Knapp, G. Schellhorn: Formale Methoden
121
Monomorphie: Beispiel
Die Spezifikation Bool spezifiziert B bis auf Isomorphie.
Beweisskizze
Sei A ∈ Mod(Bool).
I Dann enthält
Abool die Elemente ttA und ffA (nach Definition).
I Wegen
A |= ax1 sind die beiden Elemente verschieden.
I Wegen
A |= ax2 gibt es keine weiteren Elemente in Abool .
I Also folgt aus
I Definiere
A ∈ Mod(Bool), daß Abool = {ttA , ffA }.
h : A → B durch hbool (ttA ) = tt, hbool (ffA ) = ff .
I
h ist mit den Funktionssymbolen (hier: Konstanten) verträglich, da
ttB = tt, ffB = ff ; h ist also ein Homomorphismus.
I
h ist ein Isomorphismus, da injektiv und surjektiv.
A. Knapp, G. Schellhorn: Formale Methoden
122
Axiomatisierung der natürlichen Zahlen
Signatur ΣNat = ({Nat}, {0 : → Nat, s : Nat → Nat}, ∅)
Peano-Axiome für ΣNat -Algebren A
P1 0 ist kein Wert der Nachfolgerfunktion s.
I A |= ∀n . s(n) 6= 0
P2 Die Nachfolgerfunktion s ist injektiv.
I A |= ∀m, n . s(m) = s(n) → m = n
P5 Für jede Teilmenge X von ANat gilt: Ist 0A ∈ X und ist mit n ∈ X stets
sA (n) ∈ X , so ist X = ANat .
I A |= ∀X . (X(0) ∧ ∀x . X(x) → X(s(x))) → ∀y . X(y)
Insbesondere: N erfüllt Peano-Axiome.
I
0N = 0, sN (n) = n + 1
(P5) Induktionsprinzip
I
ad-hoc“-Formalisierung in Prädikatenlogik zweiter Stufe
”
A. Knapp, G. Schellhorn: Formale Methoden
123
Peano-Axiome: Charakterisierung der natürlichen Zahlen (1)
Satz
Die Peano-Axiome (P1, P2, P5) charakterisieren N bis auf Isomorphie.
Sei A ein Modell von (P1), (P2) und (P5).
Beweisskizze
M = {T J0K A, T Js(0)K A, T Js(s(0))K A, . . . , T Jsn (0)K A, . . .}
mit sn (0) für den Term s(s(. . . (0) . . .)) mit n Vorkommen von s
I Setze
I
I Dann gilt
I Setze
M ⊆ ANat und aus (P5) folgt, daß M = ANat .
h : N → A mit hNat (n) = T Jsn (0)K A.
I Dann ist
h ein Homomorphismus, da 0N = 0, T Jsn (0)K N = n.
I Weiters ist hNat surjektiv, da
A. Knapp, G. Schellhorn: Formale Methoden
ANat = {T Jsn (0)K A | n ∈ N}.
124
Peano-Axiome: Charakterisierung der natürlichen Zahlen (2)
Beweisskizze
I
(Forts.)
hNat ist auch injektiv, d. h. m 6= n ⇒ T Jsm (0)K A =
6 T Jsn (0)K A für alle m, n ∈ N,
durch Induktion über m:
I Für
m = 0: direkt mit (P1).
I Schluß von
I
I
m auf m + 1:
Induktionshypothese:
Für alle n ∈ N gilt: m 6= n ⇒ T Jsm (0)K A =
6 T Jsn (0)K A.
Zu zeigen:
Für alle n ∈ N gilt: m + 1 6= n ⇒ T Jsm+1 (0)K A =
6 T Jsn (0)K A.
I Für
n = 0 ebenfalls direkt mit (P1).
I Für
n 6= 0, ist n = n0 + 1 für ein n0 ∈ N.
I Da
m + 1 6= n, ist m 6= n0 .
I Induktionshypothese mit n0 für
I Mit (P2) folgt die Behauptung.
A. Knapp, G. Schellhorn: Formale Methoden
0
n liefert: T Jsm (0)K A =
6 T Jsn (0)K A.
125
Ausdrucksschwäche der Prädikatenlogik (1)
Satz
Es gibt keine einfache Spezifikation Sp = (Σ, X, Ax) mit Sorte Nat und
Funktionssymbolen 0 : Nat, s : Nat → Nat in Σ, die bis auf Isomorphie als
einziges Modell die natürlichen Zahlen hat.
I
Satz von Thoralf Skolem (1934)
I
Prädikatenlogische Axiome können nicht ausdrücken, daß es neben den
echten“ natürlichen Zahlen keine weiteren Zahlen gibt.
”
A. Knapp, G. Schellhorn: Formale Methoden
126
Ausdrucksschwäche der Prädikatenlogik (2)
Habe Sp die natürlichen Zahlen als Modell: N |= Ax
Beweisskizze
I Erweitere
Σ um neue Konstante c : Nat zu Σ0 .
I Dann gilt für alle
(Σ0 , X, Ax) |= ϕ.
I Setze
ϕ ∈ F (Σ, X), daß (Σ, X, Ax) |= ϕ genau dann, wenn
Ax0 = Ax ∪ {c 6= 0, c 6= s(0), . . .}.
I Jede endliche Teilmenge von
I Aus Endlichkeitssatz folgt:
I
Ax0 hat N (für geeignetes cN ) als Modell.
Ax0 hat ein Modell A0 .
0
A0 muß ein Element a = cA enthalten, das ungleich T Jsn (0)K A für alle n ∈ N
ist.
I Somit ist
A0 betrachtet über Σ ein Modell von Ax, das nicht isomorph zu N ist.
A. Knapp, G. Schellhorn: Formale Methoden
127
Ausdrucksschwäche der Prädikatenlogik (3)
Prädikatenlogik kann nicht ausdrücken, daß es außer den Zahlen 0, 1, 2, . . .
(d. h. den aus 0 und s gebildeten Termen 0, s(0), s(s(0)), . . . ) keine weiteren
Elemente gibt.
Dasselbe Problem gibt es auch für andere Datentypen:
I
I
Alle ganzen Zahlen sind mit 0, +1, −1 gebildet.
Alle Listen sind die aus [] und + gebildeten Terme:
[], a + [], a + b + [], . . .
I
Terme dürfen Elementvariablen enthalten
I
Alle (endlichen) Graphen bekommt man aus dem leeren Graphen ∅ durch
Addieren von Knoten mit addnode und Kanten mit addedge.
I
Alle Arrays bekommt man durch mkarray(n) (erzeugt Array der Größe n)
und put(a, i, d) (schreibt an Position i das Datum d).
Gemeinsame Idee: Alle Datenelemente durch endlich-malige Anwendung von
Konstruktoren bildbar.
A. Knapp, G. Schellhorn: Formale Methoden
128
Generiertheitsklauseln
Spezialaxiome für: Daten eines Datentyps sind genau die mit bestimmten
Konstruktoren gebildeten Terme.
Definition
Eine Generiertheitsklausel shCi für eine Signatur Σ = (S, F, P)
besteht aus einer Sorte s ∈ S und einer endlichen Menge von Konstruktoren
C ⊆ F , wobei die Ergebnissorte jedes f ∈ C die Sorte s ist und für wenigstens
ein f ∈ C alle Argumentsorten ungleich s sind. Die Menge aller
Generiertheitsklauseln für ein Σ wird mit G (Σ) bezeichnet.
Ein Konstruktorterm t hat die Sorte s, ist mit Konstruktoren gebildet und enthält
nur Variablen anderer Sorten, ist also aus T ((S, C, ∅), X \ Xs )s .
Beispiel: Listen
I
Generiertheitsklausel Listh{[], +}i
I
Konstruktorterme [], x + y + [] für x, y ∈ XElt
A. Knapp, G. Schellhorn: Formale Methoden
129
Generiertheitsklauseln: Semantik
Jedes Element der generierten Sorte ist der Wert eines Konstruktorterms,
wenn man die Parametervariablen geeignet belegt.
Definition
Eine Generiertheitsklausel shCi gilt über einer Algebra A,
geschrieben als A |= shCi, wenn es für jedes a ∈ As eine Belegung v und
einen Konstruktorterm t ∈ T ((S, C, ∅), X \ Xs )s mit a = T JtK A v gibt.
Beispiel: Liste über den natürlichen Zahlen [2, 5]
I
Konstruktorterm x + y + []
I
Belegung v der Variablen x, y als v(x) = 2 und v(y) = 5
I
Dann: T Jx + y + []K AList(Nat) v = [2, 5].
A. Knapp, G. Schellhorn: Formale Methoden
130
Elementare Spezifikationen
Definition
Eine elementare Spezifikation Sp = (Σ, X, Ax, Gen) besteht aus
einer Signatur Σ, einer Variablenmenge für Σ, einer entscheidbaren Menge
Ax ⊆ F (Σ, X) von Axiomen und einer Menge Gen ⊆ G (Σ) von
Generiertheitsklauseln.
Eine Algebra A ist ein Modell einer elementaren Spezifikation
Sp = (Σ, X, Ax, Gen), geschrieben als A |= Sp oder A ∈ Mod(Sp), falls
A ∈ Alg(Σ), A |= Ax und A |= Gen.
Definition
Definition
Eine Formel ϕ ∈ F (Σ, X) folgt aus einer elementaren
Spezifikation Sp = (Σ, X, Ax, Gen), geschrieben als Sp |= ϕ, falls für alle
M ∈ Mod(Sp) gilt: M |= ϕ.
A. Knapp, G. Schellhorn: Formale Methoden
131
Basis-Spezifikation der natürlichen Zahlen
I
In KIV: induction s generated by C für shCi
Nat-basic = specification
sorts nat;
constants 0 : nat;
functions . +1 : nat → nat;
induction nat generated by 0, +1;
variables m, n : nat;
axioms P1: 0 6= n +1;
P2: m +1 = n +1 ↔ m = n;
end specification
Satz
Nat-basic ist konsistent und monomorph für N.
Beweisskizze Analog zum Beweis, daß die Peano-Axiome monomorph sind: Die
Generiertheitsklausel garantiert (anstelle von (P5)) für jedes Modell A, daß
ANat = {T J0K A, T Js(0)K A, T Js(s(0))K A, . . . , T Jsn (0)K A, . . . }.
A. Knapp, G. Schellhorn: Formale Methoden
132
Spezifikation der natürlichen Zahlen
Nat = specification
sorts nat;
constants 0 : nat;
functions . +1 : nat → nat;
. + . : nat × nat → nat; (: prio 9 left :)
. ∗ . : nat × nat → nat prio 10 left;
induction nat generated by 0, +1;
variables m, n : nat;
axioms P1: 0 6= n +1;
P2: m +1 = n +1 ↔ m = n;
P3a: m + 0 = m;
P3b: m + n +1 = (m + n) +1;
P4a: m ∗ 0 = 0;
P4b: m ∗ n +1 = m ∗ n + m;
end specification
Satz
Nat ist konsistent und monomorph für N.
Beweisskizze Die Definitionen von + und ∗ folgen einem strukturellem
Rekursionsschema; ein solches Schema definiert immer genau eine Funktion.
A. Knapp, G. Schellhorn: Formale Methoden
133
Basis-Spezifikation von Listen
List-basic = specification
sorts elem;
list;
constants [] : list;
functions . + . : elem × list → list;
induction list generated by [], +;
variables a, b : elem;
variables x, y : list;
axioms [] 6= a + x;
a + x = b + y ↔ a = b ∧ x = y;
end specification
Satz
List-basic ist konsistent. Die Spezifikation ist nicht monomorph, aber
jedes Modell A ist isomorph zur Algebra der Listen mit Elementen aus Aelem .
I
Monomorphie modulo der Elemente“
”
A. Knapp, G. Schellhorn: Formale Methoden
134
Induktionsprinzip aus Generiertheitsklauseln: Beispiele (1)
Generiertheitsklausel sh{c : s, f : s → s}i
I
Jedes Element der Trägermenge darstellbar als Konstruktorterm
f(f(. . . f(c)))
I
Intuition: wie natürliche Zahlen (ohne (P1), (P2))
Induktionsformeln
ϕ{x 7→ c} ∧ (∀x . ϕ → ϕ{x 7→ f(x)}) → ∀x . ϕ
Induktionsregel
Γ{x 7→ c} ⇒ ∆{x 7→ c} IH, Γ{x 7→ f(x)} ⇒ ∆{x 7→ f(x)}
Γ⇒∆
mit IH = ∀~y .
V
Γ→
W
A. Knapp, G. Schellhorn: Formale Methoden
∆, ~y = fvar(Γ ⇒ ∆) \ {x}
135
Induktionsprinzip aus Generiertheitsklauseln: Beispiele (2)
Generiertheitsklausel sh{c : s, g : s0 s s → s}i
I
Konstruktorterme: c, g(y, c, c), g(y0 , g(y1 , c, c), g(y2 , c, c)), . . .
I
Intuition: wenn alle Terme verschieden, Binärbäume mit Blättern c und
inneren Knoten g (mit Inhalt aus s0 )
I
Die Terme müssen nicht alle verschieden sein: Auch endliche Mengen mit
cA = ∅, gA (y, m0 , m1 ) = {y} ∪ m0 ∪ m1 mögliche Algebra
Induktionsformeln
ϕ{x 7→ c} ∧ (∀x1 , x2 . ϕ{x 7→ x1 } ∧ ϕ{x 7→ x2 } → ϕ{x 7→ g(y, x1 , x2 )}) → ∀x . ϕ
Induktionsregel
Γ{x 7→ c} ⇒ ∆{x 7→ c}
IH1 , IH2 , Γ{x 7→ g(y, x1 , x2 )} ⇒ ∆{x 7→ g(y, x1 , x2 )}
Γ⇒∆
mit IHi = ∀~y .
V
Γ{x 7→ xi } →
A. Knapp, G. Schellhorn: Formale Methoden
W
∆{x 7→ xi } für i ∈ {1, 2}, ~y = fvar(Γ ⇒ ∆) \ {x}
136
Regel der strukturellen Induktion
Für Generiertheitsklausel sh{f1 , . . . , fn }i strukturelle Induktionsregel
IH1 , Γ1 ⇒ ∆1
IHn , Γn ⇒ ∆n
...
Γ⇒∆
mit
I
Pro Konstruktor fi : s1 . . . sk → s ∈ C eine Prämisse
Γi ⇒ ∆i = Γ{x 7→ fi (x1 , . . . , xk )} ⇒ ∆{x 7→ fi (x1 , . . . , xk )}
I
I
Die Variablen x1 , . . . , xk sind dabei neue Argumentvariablen.
Pro Konstruktor fi : s1 . . . sk → s ∈ C eine Induktionshypothese
IHi =
V
sj =s IH{x
7→ xj }
für genau die Argumente xj , deren Sorte s ist; wobei
IH = ∀~y.
V
Γ→
A. Knapp, G. Schellhorn: Formale Methoden
W
∆ mit ~y = fvar(Γ ⇒ ∆) \ {x}
137
Kalkül mit struktureller Induktion
Definition
Eine Sequenz Γ ⇒ ∆ ist aus einer elementaren Spezifikation Sp
induktiv ableitbar, geschrieben als Sp `IND Γ ⇒ ∆, wenn sie aus den Axiomen
und den Generiertheitsklauseln von Sp durch Anwendung des
Sequenzenkalküls und der Regel der strukturellen Induktion ableitbar ist.
Satz
Die Induktionsregel ist korrekt für jede Algebra, die die entsprechende
Generiertheitsklausel erfüllt. Insbesondere gilt
Sp `IND Γ ⇒ ∆
⇒
Sp |= Γ ⇒ ∆
Der Kalkül ist nicht vollständig.
A. Knapp, G. Schellhorn: Formale Methoden
138
Wechselseitig rekursive Konstruktoren
Beispiel: Bäume mit endlich vielen Prämissen
I
Konstruktor für Bäume: mktree : Node Treelist → Tree
I
Konstruktoren für Baumlisten:
[] : Treelist (leere Liste)
+ : Tree Treelist → Treelist (Element vorne an Liste anhängen)
I
Konstruktorterme aus
T (({Node, Tree, Treelist}, {mktree, [], +}, ∅), XNode )Tree bzw.
T (({Node, Tree, Treelist}, {mktree, [], +}, ∅), XNode )Treelist
sollen alle Bäume bzw. Baumlisten beschreiben.
I Zwei einzelne Generiertheitsklauseln Treeh{mktree}i und Treelisth{[], +}i
würden Graphen erlauben, z. B. t = mktree(n, tl), tl = t + []
Ähnlich in Programmiersprachen: Ausdrücke und Listen von Ausdrücken;
Anweisungen und Blöcke
A. Knapp, G. Schellhorn: Formale Methoden
139
Allgemeine Generiertheitsklauseln
Eine allgemeine Generiertheitsklausel GhCi für eine Signatur
Σ = (S, F, P) besteht aus einer Menge von Sorten G ⊆ S und einer endlichen
Menge von Konstruktoren C ⊆ F , wobei die Ergebnissorte jedes f ∈ C eine
Sorte in G ist und für wenigstens ein f ∈ C alle Argumentsorten nicht aus G
Definition
sind.
Ein Konstruktorterm t hat eine Sorte aus G, ist mit Konstruktoren gebildet und
enthält nur Variablen von Sorten nicht aus G, ist also aus
S
T ((S, C, ∅), X \ g∈G Xg )s für ein Sorte s ∈ G.
Definition
Eine allgemeine Generiertheitsklausel GhCi gilt über einer
Algebra A, geschrieben als A |= GhCi, wenn es für jedes s ∈ G und jedes
a ∈ As eine BelegungSv und einen Konstruktorterm
t ∈ T ((S, C, ∅), X \ g∈G Xg )s mit a = T JtK A v gibt.
Beispiel: Bäume mit endlichen vielen Prämissen
I Generiertheitsklausel {Tree, Treelist}h{mktree, +, []}i
A. Knapp, G. Schellhorn: Formale Methoden
140
Allgemeine Generiertheitsklauseln: Induktion
Beispiel: Bäume mit endlich vielen Prämissen
I
Jetzt zwei Induktionsbehauptungen ϕ für Bäume und ψ für Baumlisten.
Induktionsregel
⇒ ψ{tl 7→ []} ϕ, ψ ⇒ ψ{tl 7→ t + tl} ψ ⇒ ϕ{t 7→ mktree(n, tl)}
⇒ ∀t . ϕ ∧ ∀tl . ψ
A. Knapp, G. Schellhorn: Formale Methoden
141
Strukturell-rekursive Definitionen von Funktionen
Dem Induktionsprinzip entspricht die Definition durch strukturelle Rekursion.
Beispiel: Definition von + und ∗ über den natürlichen Zahlen (mit Nath{0, s}i)
plus-base: m + 0 = m
plus-rec: m + s(n) = s(m + n)
mult-base: m ∗ 0 = 0
mult-rec: m ∗ s(n) = m ∗ n + m
Axiome folgen dem strukturellen Rekursionsschema
I
f -base: f (~y, 0) = t; f -rec: f (~y, s(n)) = t0
I
rekursive Position nicht notwendig an letzter Stelle
I
An rekursiver Position Konstruktor mit Argumentvariablen: 0 bzw. s(n)
I
Variablen ~y ∪ {n} paarweise verschieden
I
var(t) ⊆ ~y und t enthält kein Vorkommen von f
I
var(t0 ) ⊆ ~y ∪ {n} und t0 enthält nur Aufrufe von f (~u, n) mit Termen ~u
A. Knapp, G. Schellhorn: Formale Methoden
142
Strukturelle Rekursion und Induktion
I
Sei f durch strukturelle Rekursion definiert
f -base: f (~y, 0) = t
f -rec: f (~y, s(n)) = t0
I
Gegeben sei eine Behauptung ϕ, in der ein Term f (~u, x) vorkommt (mit
beliebigen Termen ~u).
I
Dann ergibt Induktion über x zwei Prämissen: ϕ{x 7→ 0}, ϕ{x 7→ s(x)};
auf die erste ist f -base, auf die zweite f -rec anwendbar.
I In KIV: Häufig f -base und f -rec Simplifierregeln
I
Generelles Vorgehen für induktive Beweise
I
I
I
I
Suche Variable, die nur an rekursiven Positionen eines f vorkommt.
Induziere über diese Variable, wende jeweils passendes Axiom an.
Umgekehrt: Induktion über Variable, die an keiner rekursiver Position
vorkommt, nicht sinnvoll
Schwieriger: gemischte Fälle (häufig Lemmas, Verallgemeinerung &c.)
A. Knapp, G. Schellhorn: Formale Methoden
143
Strukturell-rekursive Definition von Prädikaten
Beispiel: Definition von even und grt über den natürlichen Zahlen
even-base: even(0)
gt-base: gt(0, m) ↔ false
even-rec: even(s(n)) ↔ ¬even(n)
gt-rec: gt(s(n), m) ↔ m = n ∨ gt(n, m)
Axiome folgen dem strukturellen Rekursionsschema
I
p-base: p(~y, 0) ↔ ϕ; p-rec: p(~y, s(n)) ↔ ϕ0
I
An rekursiver Position Konstruktor mit Argumentvariablen: 0 bzw. s(n)
I rekursive Position bei gt ist die erste Stelle
I
Variablen ~y ∪ {n} paarweise verschieden
I
fvar(ϕ) ⊆ ~y und ϕ enthält kein Vorkommen von p
I
fvar(ϕ0 ) ⊆ ~y ∪ {n} und ϕ0 enthält nur Aufrufe von p(~u, n) mit Termen ~u
A. Knapp, G. Schellhorn: Formale Methoden
144
Strukturelle Rekursion: Beispiele
Listen von natürlichen Zahlen mit Listh{[] : List, + : Nat List → List}i
I
Definition von append : List List → List durch
append-base: append([], y) = y
append-rec: append(m + x, y) = m + append(x, y)
I
Definition von ordered : List
ordered-base: ordered([])
ordered-rec: ordered(m + x) ↔
ordered(x) ∧ (x = [] ∨ ∃n, y . x = n + y ∧ m < n)
I
Alternativ: Umformung von ordered-rec mit x = [] ∨ ∃n, y . x = n + y zu
ordered-rec1: ordered(m + [])
ordered-rec2: ordered(m + n + y) ↔ m < n ∧ ordered(n + y)
A. Knapp, G. Schellhorn: Formale Methoden
145
Strukturelle Rekursion mit Fallunterscheidung
Listen über Nat mit Listh{[] : List, + : Nat List → List}i
I
Definition von remove : Nat List → List durch
remove-base: remove(m, []) = []
remove-rec1: m = n → remove(m, n + x) = remove(m, x)
remove-rec2: m 6= n → remove(m, n + x) = n + remove(m, x)
I
Alternative Formulierung von remove-rec1
remove-rec1: remove(m, m + x) = remove(m, x)
Aufspaltung von Basis- oder Rekursionsfall nach Bedingungen
f -rec1: ϕ1 → f (~y, n + x) = t1
...
f -reck: ϕk → f (~y, n + x) = tk
I
Einschränkungen für Bedingungen ϕi wie für ti
I
Bedingungen gegenseitig ausschließend und überdeckend (
I
typisch für parameterisierte Datentypen (Listen über . . . , Bäume über . . . )
W
A. Knapp, G. Schellhorn: Formale Methoden
ϕi ↔ true)
146
KIV-Simplifier
Beobachtung: Viele Gleichungen und Äquivalenzen dienen zur Vereinfachung
I
datenstrukturunabhängig: Tautologien wie ϕ ∧ ϕ ↔ ϕ
I
datenstrukturabhängige Regeln
Beispiel: Natürliche Zahlen
I
` n + 0 = n zum Ersetzen von t + 0 durch t
Selbstdefinierte Simplifierregeln
I
markierte Axiome oder (schon bewiesene) Theoreme
Für das Verständnis von KIV wichtig: Welche Simplifierregel hat welchen Effekt?
A. Knapp, G. Schellhorn: Formale Methoden
147
KIV-Simplifier: Lokale und globale Regeln
Zwei Klassen von Simplifierregeln
I
lokale Simplifierregeln werden in Beweisen über der Spezifikation, in der
sie definiert sind, benutzt.
I
globale Simplifierregeln werden in Beweisen in Spezifikationen, die über
der, in der sie definiert sind, benutzt.
Pragmatik
I
Lokal werden Axiome als Simplifierregeln verwendet.
I
Global werden Theoreme verwendet, die gute“ Simplifierregeln sind.
”
Eintragen von Theoremen als Simplifierregeln durch used for: s, ls;
nach Sequenz in specification/sequents-Datei
A. Knapp, G. Schellhorn: Formale Methoden
148
KIV-Simplifier: Typen von Simplifierregeln
Termersetzungsregel (Rewriteregel)
I
Form: Γ ` ϕ → (t = u)
I
Effekt: (Instanzen von) t durch u ersetzen
Formelersetzungsregel (Äquivalenzregel)
I
Form: Γ ` ϕ → (ψ ↔ χ)
I
Effekt: (Instanzen von) ψ durch χ ersetzen
Assoziativität und Kommutativität
I
Form: ` (a + b) + c = a + (b + c) und ` a + b = b + a
I
Effekt: Alle anderen Regeln modulo Assoziativität und Kommutativität
anwenden
A. Knapp, G. Schellhorn: Formale Methoden
149
KIV-Simplifier: Pragmatik von Bedingungen (1)
Rewrite- und Äquivalenzregeln haben die Form
Γ ` ϕ → t = u und Γ ` ϕ → (ψ ↔ χ)
Vorbedingungen Γ und ϕ: Als Formel dieselbe Bedeutung, aber unterschiedlich
behandelt:
I
I
Γ darf beliebige Formeln enthalten
ϕ muß Konjunktion ϕ1 ∧ . . . ∧ ϕn von Literalen sein
I
Literal: evtl. negierte Gleichung oder Prädikatformel
I
(Instanzen von) ϕ1 , . . . , ϕn werden in der Sequenz gesucht:
nicht-negierte Formeln im Antezedent, negierte im Sukzedent
I
Γ wird versucht, durch rekursiven Simplifieraufruf zu beweisen
A. Knapp, G. Schellhorn: Formale Methoden
150
KIV-Simplifier: Pragmatik von Bedingungen (2)
Wann Vorbedingungen in Γ, wann in ϕ1 , . . . , ϕn ?
I
Vorbedingungen vor `“ in Γ nur,
”
wenn sie in sinnvollen Sequenzen immer erfüllt sind.
I
I
sonst viele nutzlose Simplifieraufrufe
Typische sinnvolle Vorbedingungen: Definiertheitsbedingungen
I m −1 (Vorgänger von m) ist nur für m 6= 0 definiert
I m − n ist nur für n ≤ m definiert
I .rest und .last sind nur für nichtleere Listen definiert
I Arrays: i < #a sollte für Zugriff a[i] immer wahr sein
A. Knapp, G. Schellhorn: Formale Methoden
151
KIV-Simplifier: Beispiele zu Vorbedingungen
I
I
n 6= 0 ` (m < n − 1 ↔ m + 1 < n)
Vorbedingung im Antezedent, da 0 − 1 nicht sinnvoll ist
` m < n → (n < m + 2 ↔ m + 1 = n)
Vorbedingung nicht im Antezedent, sonst, sobald Instanzen von
n < m + 2 vorkommen: viele unnötige Beweisversuche für m < n
I
m ≤ n ` (n − m) + m = n
beweist z. B. die Sequenz
f(x) > 5 ` (f(x) − 3) + 3 = f(x)
(da der Simplifier f(x) > 5 ` 3 ≤ f(x) beweisen kann)
` m ≤ n → (n − m) + m = n
beweist die Sequenz nicht, da 3 ≤ f(x) nicht in der Sequenz vorkommt
A. Knapp, G. Schellhorn: Formale Methoden
152
KIV-Simplifier: Rewrite-Regeln
Γ`ϕ→t=u
ersetzt (Instanzen von) t durch u, wenn Vorbedingungen gelten
I
fvar(ϕ) ∪ var(t) muß alle freien Variablen abdecken
I
t und u müssen Terme sein, t darf keine Variable sein
Beispiele:
I
` (m + n) − n = m
I
` i > 0 → sqrt(iˆ2) = i (i Ganzzahl)
I
` (s1 ∪ s2) \ s2 = s1 \ s2 (Mengen)
I
` y 6= [] → append(x, y).last = y.last (Listen)
A. Knapp, G. Schellhorn: Formale Methoden
153
KIV-Simplifier: Äquivalenzregeln
Γ ` ϕ → (ψ ↔ χ)
ersetzt (Instanzen von) ψ durch χ, wenn Vorbedingungen gelten
I
fvar(ϕ) ∪ fvar(ψ) muß alle freien Variablen abdecken
I
ψ muß Prädikat oder Gleichung sein, χ ist beliebige Formel
I
Vereinfachung: falls ψ keine Gleichung, statt (ψ ↔ true) nur ψ
I
Vereinfachung: statt (ψ ↔ false) nur ¬ ψ
Beispiele:
I
` sorted([a]), #(x) = 0 ↔ x = [] (Listen)
I
` m + n < m + n0 ↔ n < n0
I
` n 6= 0 ` (m < n −1 ↔ m +1 < n)
A. Knapp, G. Schellhorn: Formale Methoden
154
KIV-Simplifier: Äquivalenzregeln mit Konjunktion, Disjunktion
Äquivalenzregel ` a ∈ s1 ∪ s2 ↔ a ∈ s1 ∨ a ∈ s2 führt auf
Γ ` a ∈ s1, a ∈ s2, ∆
Γ ` a ∈ s1 ∪ s2, ∆
Γ, a ∈ s1 ` ∆, a ∈ s2
Γ, a ∈ s2 ` ∆, a ∈ s1
Γ, a ∈ s1 ∪ s2 ` ∆, a ∈ s2
Γ, a ∈ s1 ∪ s2 ` ∆, a ∈ s1
Kein Effekt auf Γ1 , a ∈ s1 ∪ s2, Γ2 ` ∆ (wenn a ∈ s1 und a ∈ s2 nicht in ∆)
I
Verschachtelte aussagenlogische Ausdrücke schwer zu lesen
Dasselbe, falls χ in Äquivalenzregel Γ ` ϕ → (ψ ↔ χ) eine Konjunktion (mit
Antezedent und Sukzendent vertauscht); z. B.
` a ∈ s1 ∩ s2 ↔ a ∈ s1 ∧ a ∈ s2
A. Knapp, G. Schellhorn: Formale Methoden
155
KIV-Simplifier: Weitere Äquivalenzregeln
I
Wenn in Γ ` ϕ → (ψ ↔ χ) das χ keine Konjunktion oder Disjunktion ist,
wird immer ersetzt
I
Deshalb: Die Regel
` a ∈ s1 ∪ s2 ↔ ¬ ¬(a ∈ s1 ∨ a ∈ s2)
umgeht den Effekt der Disjunktion (nur selten verwendet)
I
Regel, die nur auf ψ (Prädikat oder Gleichung) im Antezedent angewandt
wird:
Γ ` ϕ → (¬ ¬ ψ ↔ ¬ χ)
I
Regel, die nur auf ψ im Sukzedent angewandt wird:
Γ ` ϕ → (¬ ψ ↔ χ)
A. Knapp, G. Schellhorn: Formale Methoden
156
KIV-Simplifier: Pragmatik für einseitige Regeln
Verwendung von ` ϕ → ψ als Simplifierregel, wobei ϕ komplexe Formel, ψ
einfache, schwächere Formel
Beispiel: ` prime(n) → n > 1
I
Direkte Verwendung als Simplifierregel ergibt:
I Beweisziele prime(n), Γ ` n > 1, ∆ werden geschlossen
I Aus Beweiszielen prime(n), n > 1, Γ ` ∆ wird n > 1 gelöscht
I
Letzteres ist unerwünscht, da n > 1 evtl. eine nützliche Vorbedingung ist.
I
Deshalb besser: ` prime(n) → (¬ n > 1 ↔ false)
Beispiel: ` prime(n) ∧ n 6= 2 → ¬ even(n)
I
(ψ negiert)
Besser: ` prime(n) ∧ n 6= 2 → (¬ ¬ even(n) ↔ false)
A. Knapp, G. Schellhorn: Formale Methoden
157
KIV-Simplifier: Beispiele für Äquivalenzregeln
I
` m ≤ n → (n < m ↔ false)
I
I
I
` (s1 \ s2) \ s3 = (s1 \ s3) \ s2 ↔ true
I
I
beweist m ≤ n, n < m, Γ ` ∆
entfernt in m ≤ n, Γ ` n < m, ∆ das n < m
beweist Gleichung im Sukzedent, entfernt sie im Antezedent
` s ∩ s0 = ∅ ∧ a ∈ s → ¬ a ∈ s0 als Simplifierregel
I
I
In Sequenz s ∩ s0 = ∅, a ∈ s ` a ∈ s0 nicht das a ∈ s0 durch false
ersetzen (und damit entfernen). Nur im Antezedent auf
s ∩ s0 = ∅, a ∈ s, a ∈ s0 anwenden und damit Sequenz schließen
Damit besser: ` s ∩ s0 = ∅ ∧ a ∈ s → (¬ ¬ a ∈ s0 ↔ false)
A. Knapp, G. Schellhorn: Formale Methoden
158
KIV-Simplifier: Kommutativität und Assoziativität
I
Assoziative und kommutative Operatoren: +, ·, min, ggT auf ganzen
Zahlen, ∪, ∩ auf Mengen, . . .
I
Assoziative Operatoren: append auf Listen, · auf Matrizen, . . .
Simplifierregeln:
I
Kommutativität: ` m + n = n + m,
I
Assoziativität: ` (m + n) + k = n + (m + k),
I
für assoziativ und kommutativ kurz AC(+)
I
A, C, AC werden nicht direkt verwendet; ob eine Simplifierregel paßt, wird
kurz: C(+)
kurz: A(+)
modulo“ dieser Regeln geprüft
”
Beispiele:
I
` a + b ∗ c = c ∗ b + a wird mit C(+, ∗) sofort (per Reflexivität)
bewiesen.
I
` b ∗ c ≤ (c ∗ a) ∗ b wird für AC(∗) mit der Regel ` m ≤ m ∗ n bewiesen.
A. Knapp, G. Schellhorn: Formale Methoden
159
KIV-Simplifier: Regeln für Zahlen
I
Zahlen in KIV vordefiniert:
I für die Sorte nat: 0, 1, 2, . . .
I für die Sorte int: . . . , ∼2, ∼1, 0, 1, 2, . . .
I
Implizite Regeln in KIV: Summen, Differenzen, <, ≤ &c. mit Zahlen
werden immer gleich ausgewertet.
I
Wenn eine Simplifierregel nur angewendet werden soll, wenn eine ihrer
Variablen m durch eine Zahl instantiiert ist: (∗ m) statt m mindestens einmal
in der Regel
Beispiel: ` a ∗ (∗ m) + a ∗ (∗ n) = a ∗ (n + m) (Distributivität)
I
Sind m, n Zahlen, so wird n + m sofort ausgerechnet
I
Sind m, n keine Zahlen, dann wird die Regel umgekehrt angewendet
A. Knapp, G. Schellhorn: Formale Methoden
160
KIV-Simplifier: Forwardregeln
Hinzufügung abgeleiteter Information zu Sequenzen
I
Transitivität von Ordnungs- und Äquivalenzrelationen:
` m < n ∧ n < n0 → m < n0
` isperm(x, y) ∧ isperm(y, z) → isperm(x, z)
Forward-Regeln der Form
Γ ` ϕ1 ∧ . . . ∧ ϕn → ψ
I
Lokale und globale Regeln wie bei Simplifierregeln
Deklaration als used for: f, lf;
I
Vorbedingungen werden wie bei Simplifierregeln behandelt.
I
ψ wird genau einmal zur Sequenz hinzugefügt.
A. Knapp, G. Schellhorn: Formale Methoden
161
KIV-Simplifier: Pragmatik von Forwardregeln
I
Transitivität unkritisch
I
Häufig etliche Varianten notwendig
` m < n ∧ n ≤ n0 → m < n0
` m < n ∧ ¬n0 < n → m < n0
` m ≤ n + 1 ∧ n < n0 → m ≤ n0
I
Forward-Regeln führen leicht zu Endlosschleifen im Simplifier
I z. B. ` m < n → m < n + 1
I
Ein Lemma sollte nie Forward- und Simplifierregel sein.
I
Forwardregeln auch mit Zahlen
0 < n ` (∗ n) ≤ m → m 6= 0
A. Knapp, G. Schellhorn: Formale Methoden
162
Automatisierung in KIV: Heuristiken
I
Flexible Automatisierung ist zentral, um bei großen Fallstudien nicht immer
wieder die gleichen Beweisschritte wiederholen zu müssen
I
Deshalb in KIV: Automatisierung durch zuschaltbare Heuristiken
I
Simplifier eine Heuristik; sollte man (fast) immer benutzen
I
Für jedes Beweisziel werden alle Heuristiken der Reihen nach ausprobiert
I
gewählte Heuristiken jederzeit änderbar
Für das Verständnis von KIV wichtig: Welche Heuristik hat welchen Effekt?
A. Knapp, G. Schellhorn: Formale Methoden
163
Wichtige Heuristiken für PL in KIV (1)
I
Simplifier
I
I
I
I
I
I
wendet die Simplifier-Regel an
PL case distinction
wendet Regel case distinction an
für einfache bis mittelschwere Beweise
Gefahr, unnötige Fallunterscheidungen zu machen
if-then-else-Split
I
I
I
I
if-then-else-Operator: (ϕ ⊃ σ; τ ) bezeichnet σ , falls ϕ wahr ist, sonst τ
wendet (Cut)-Regel mit ϕ an
Häufig einsetzbar, um sinnvolle Fallunterscheidungen zu erzwingen
Beispiel: Fallunterscheidung nach Anwendung von Rewrite-Regel
abs(i) = (i ≥ 0 ⊃ i; −i)
A. Knapp, G. Schellhorn: Formale Methoden
164
Wichtige Heuristiken für PL in KIV (2)
I
Quantifier closing
I
I
I
I
I
Sucht Instanzen, mit denen eine Prämisse direkt geschlossen werden kann
immer verwenden
einziges Problem: bei sehr vielen Quantoren braucht die Heuristik viel
unnötige Zeit
deshalb Spezifikationsmethodik: Prädikat (& Simplifierregeln) definieren,
statt große Quantorenformeln zu verwenden
Quantifier
I
I
I
Sucht sinnvolle“ Instanzen für Quantoren
”
kann Endlosschleifen verursachen!
nur bei einfachen Quantorenbeweisen einsetzbar
A. Knapp, G. Schellhorn: Formale Methoden
165
Wichtige Heuristiken für PL in KIV (3)
I
Structural induction
I
I
I
I
Macht strukturelle Induktion über sinnvolle“ Terme
”
Idee für sinnvoll“: Variablen an rekursiven Positionen:
”
n ist sinnvoll in m + n, da + rekursiv über das zweite Argument definiert:
m + 0 = m, m + (n +1) = (m + n) +1
Funktioniert meistens, aber nicht immer
Module specific
I
I
I
eigentlich eine Meta-Heuristik: erlaubt heuristische Anwendung von Regeln
durch Patterns
Pattern: Gibt Formeln (oder Schemata für Formeln) an, die in der Sequenz
vorkommen müssen bzw. nicht vorkommen dürfen & Regel die angewandt
werden soll
Alle Patterns stehen in der Datei module-specific
A. Knapp, G. Schellhorn: Formale Methoden
166
Heuristiksätze in KIV
I
In KIV drei vordefinierte Heuristiksätze:
I
I
I
I
PL Heuristics: minimale Menge sinnvoller Heuristiken
PL Heuristics + Case Splitting: Keine Induktion, FU automatisch
PL Heuristics + Struct. Ind.: versucht Ziel induktiv zu beweisen und
Fallunterscheidungen (FU) automatisch zu machen
Standardüberlegung zur Wahl des Heuristiksatzes:
I
I
I
Ist der Beweis induktiv?: Wenn ja, PL Heuristics + Struct. Ind.
Wenn nein, sind die Fallunterscheidungen im Beweis ungefähr die, die sich
aus den aussagenlog. Verknüpfungen der Sequenz ergeben?
Wenn ja, PL Heuristics + Case Splitting, sonst nur PL Heuristics
I
Für größere Projekte definiert man häufig seinen eigenen Standardsatz (in
Datei default-heuristics)
I
Weitere Heuristiken für Programme; dort noch wichtiger, da Programme
mehr Struktur haben.
A. Knapp, G. Schellhorn: Formale Methoden
167
Natürliche Zahlen: Peano-Axiom 5 vs. Induktion
Induktionsaxiom codiert (P5) für ΣNat -Formeln ϕ
I
Induktionsaxiom: ϕ{n 7→ 0} ∧ (∀n . ϕ → ϕ{n 7→ s(n)}) → ∀n . ϕ
I
Instanz von (P5) für X = {n | ϕ(n)}
(P5) spricht über alle Teilmengen von N
I
Es gibt nur abzählbar viele Formeln.
I
I
Zeichenketten sind numerierbar, z. B. durch ASCII-Code.
Die Teilmengen von N sind nicht abzählbar:
I Angenommen X0 , X1 , X2 , . . . wäre eine Aufzählung der Teilmengen.
I Setze X = {k | k 6∈ X }.
k
I Dann kommt X nicht in der Aufzählung vor; Widerspruch.
Gibt es eine konsistente, entscheidbare Menge von Axiomen, sodaß alle
wahren Formeln über N bewiesen werden können?
A. Knapp, G. Schellhorn: Formale Methoden
168
Natürliche Zahlen ohne Multiplikation
Satz
Die Formeln über den natürlichen Zahlen mit 0, +, < sind
entscheidbar.
Ohne Beweis (Mojżsez Presburger 1929)
I
keine Multiplikation
I
Aufwand doppelt exponentieller in der Länge der Formel
Lineare Arithmentik erfordert keine Kreativität, nur viel Rechenaufwand
I
Entscheidbarkeit gilt nur ohne weitere Funktionen.
I
Entscheidungsprozeduren auch für andere einfache“ Datentypen
”
I
I
verwendet etwa in PVS, automatischen Theorembeweisern
Kombination mehrerer Entscheidungsprozeduren und mit zusätzlichen
Funktionen schwierig (Verfahren von Nelson und Oppen, 1979)
A. Knapp, G. Schellhorn: Formale Methoden
169
Gödelscher Unvollständigkeitssatz (1)
Satz
Es gibt keine konsistente, entscheidbare Menge von Formeln über
(0, s, +, ·), die (P1–4) und n 6= 0 → ∃m . n = s(m) enthält oder impliziert, mit
der sich alle in N wahren Aussagen ableiten lassen.
I
Satz von Kurt Gödel (1930)
I
Unvollständigkeit einer Axiomenmenge (für N) heißt, daß nicht alle wahren
Aussagen über N bewiesen werden können.
I
Ein Kalkül heißt vollständig, wenn alle in allen Modellen wahren Aussagen
bewiesen werden können.
A. Knapp, G. Schellhorn: Formale Methoden
170
Gödelscher Unvollständigkeitssatz (2)
Beweisskizze Zunächst: Für einen Algorithmus und eine Numerierung seiner Einund Ausgabedaten läßt sich eine Formel α(x, y) über 0, s, + und · angeben mit:
α(sm (0), sn (0)) gilt genau dann, wenn der Algorithmus mit Eingabe Nummer m die
Ausgabe Nummer n liefert.
I Intuitiv: Jeder Algorithmus kann in eine Zahlenrechnung codiert werden.“
”
Formeln und Beweisbäume sind numerierbar; Ableitbarkeit und Substitution sind
Algorithmen.
I Es gibt eine Formel
Abl(x) mit: Abl(sn (0)) gilt genau dann, wenn die Formel
Nummer n ableitbar ist.
Subst(x, y) mit: Subst(sm (0), sn (0)) gilt genau dann, wenn die
Formel Nummer n aus der Formel Nummer m mit Ersetzung der freien Variablen
durch sm (0) entsteht.
I Es gibt eine Formel
Setze G(x) = ∀y . Subst(x, y) → ¬Abl(y). Die Formel habe Nummer k.
I Die Gödelformel
G(sk (0)) sagt: Die Formel mit meiner Nummer ist nicht
”
ableitbar“. (Instanz des Lügnerparadoxons)
I Diese Formel ist nicht ableitbar, aber wahr.
A. Knapp, G. Schellhorn: Formale Methoden
171
Gödelscher Unvollständigkeitssatz (3)
Es gibt keine gute“ Axiomenmenge, mit der alle wahren Aussagen über N
”
herleitbar sind.
I
Induktionsaxiome reichen nicht, um alle wahren Aussagen zu finden.
I
Die Menge der wahren Aussagen über N wäre aussreichend, ist also nicht
entscheidbar.
I
Scheitern des Hilbertschen Programms, die Mathematik auf einfachen“
”
Grundlagen aufzubauen
Für praktische Beweise ist die Gödelformel wenig relevant.
A. Knapp, G. Schellhorn: Formale Methoden
172
Ω-Kalkül
Für eine Signatur Σ = (S, F, P) und eine Generiertheitsklausel shCi ∈ G (Σ)
Ω-Regel
(⇒ ϕ{x 7→ t})t∈T ((S,C,∅),X\Xs )s
⇒ϕ
I
Ω-Regel hat i. A. unendlich viele Prämissen, deshalb auf Rechnern nicht
implementierbar
Definition
Eine Sequenz Γ ⇒ ∆ ist aus einer elementaren Spezifikation Sp
Ω-ableitbar, geschrieben als Sp `ω Γ ⇒ ∆, wenn sie aus den Axiomen und
den Generiertheitsklauseln von Sp durch Anwendung des Sequenzenkalküls
und der Ω-Regeln für jede Generiertheitsklausel ableitbar ist.
I
Beweisbäume sind endlich hoch aber unendlich breit: Infinitärer Kalkül
A. Knapp, G. Schellhorn: Formale Methoden
173
Ω-Kalkül: Korrektheit und Vollständigkeit
Satz
Für eine Formel ϕ und eine elementare Spezifikation Sp gilt
Sp `ω ϕ
⇔
Sp |= ϕ
Wenn man von der Ableitbarkeit von ϕ(0), ϕ(s(0)), ϕ(s(s(0))), . . . auf
∀n . ϕ(n) schließen darf, reicht das aus, um die natürlichen Zahlen als
minimale Menge“ zu charakterisieren.
”
I Das Problem ist also lediglich, daß manchmal der Beweis nicht per
Induktion geht: ϕ(n) → ϕ(s(n)) ist nicht immer beweisbar.
I
A. Knapp, G. Schellhorn: Formale Methoden
174
Beinahe-Vollständigkeit der strukturellen Induktion (1)
Spezifikation von x from a: Liste x ab dem erstem Vorkommen des Elements a
(exklusiv); falls a in x nicht vorkommt, die leere Liste.
specification
sorts elem; list;
constants [] : list;
functions . + . : elem × list → list;
. from . : list × elem → list;
induction list generated by [], +;
variables a, b : elem;
x, y : list;
axioms [] 6= a + x; x 6= y → a + x 6= b + y;
[] from a = [];
(a + x) from a = x;
a 6= b → (b + x) from a = x from a;
end specification
Spezifikation monomorph modulo der Elemente; genau eine Listenfunktion
from
A. Knapp, G. Schellhorn: Formale Methoden
175
Beinahe-Vollständigkeit der strukturellen Induktion (2)
I
Für die Funktion from gilt ∀x . ϕ mit ϕ(x) = x 6= [] → x from a 6= x
I
Es lassen sich ϕ([]), ϕ(b + []), . . . beweisen:
[] 6= [] → [] from a 6= []
b + [] 6= [] → (b + []) from a 6= b + []
b + c + [] 6= [] → (b + c + []) from a 6= b + c + []
b + c + d + [] 6= [] → (b + c + d + []) from a 6= b + c + d + []
...
I
I
Aber: Induktionsschluß x from a 6= x → (b + x) from a 6= b + x nicht
durchführbar
Man muß die Aussage für Induktion verallgemeinern:
x 6= [] → x from a < x
x 6= [] → #(x from a) < #x
I
Dazu neues Prädikat < (ist Endstück) oder neue Funktion # (Länge)
notwendig; beide können rekursiv definiert werden
A. Knapp, G. Schellhorn: Formale Methoden
176
Beinahe-Vollständigkeit der strukturellen Induktion (3)
Im allgemeinen benötigt man für ein ϕ mit Sp |= ϕ eine Erweiterung Sp0 von Sp
um neue, rekursiv definierte Funktionen, damit Sp0 `IND ϕ gilt.
I
Die Induktions-Regel ist nicht vollständig, manchmal ist ϕ(n) → ϕ(s(n))
nicht beweisbar.
I
In diesem Fall muß man die Behauptung verallgemeinern: Die
zusätzlichen Symbole von Sp0 machen eine passend verallgemeinerte
Induktionshypothese ψ für den Beweis von ϕ ausdrückbar:
Sp0 `IND ψ(x) → ϕ(x) und Sp0 `IND ψ(n) → ψ(s(n))
I
Die Erweiterung Sp0 ist je nach ϕ verschieden (kein uniformes Sp0 ).
I
In jedem Sp0 gibt es eine Formel ϕ0 , die wahr aber nicht ableitbar ist.
I
Kreativitität also für Verallgemeinerung und passende Hilfsfunktionen
A. Knapp, G. Schellhorn: Formale Methoden
177
Spezifikation von Datentypen
Vorgehen
I
Definition der benötigten Sorten
I
Definition der Konstruktoren und Generiertheitsklauseln
I
I
Datentypen auf Rechnern generiert
Definition weiterer Operationen und Axiome
I
Keine Einführung von Inkonsistenzen, möglichst monomorphe
Charakterisierung
A. Knapp, G. Schellhorn: Formale Methoden
178
Freie und nichtfreie Datentypen
Manche Datentypen sind frei erzeugt: Zwei verschiedene Konstruktorterme
repräsentieren auch immer zwei verschiedene Elemente.
nat
nat
list
freely generated by 0, +1
generated by 0, 1, +
0+0=0
freely generated by [], +
integer
generated by 0, +1, −1
0 +1 −1 = 0
set
generated by ∅, ins
ins(a, ins(a, ∅)) = ins(a, ∅)
set
generated by ∅, {.}, ∪
{a} ∪ {a} = {a}
stack
freely generated by empty, push
bintree freely generated by mkleaf, mkbranch
graph
generated by ∅, +node, +edge
∅ +node n +node n =
∅ +node n
array
generated by mkar, put
put(put(mkar(n), i, d), i, d) =
put(mkar(n), i, d)
A. Knapp, G. Schellhorn: Formale Methoden
179
Freie Erzeugtheitsklauseln
Eine freie Generiertheitsklausel GhhCii für eine Signatur
Σ = (S, F, P) besteht aus einer Menge von Sorten G ⊆ S und einer endlichen
Menge von Konstruktoren C ⊆ F , wobei die Ergebnissorte jedes f ∈ C eine
Sorte G ist und für wenigstens ein f ∈ C alle Argumentsorten nicht Sorten aus
G sind.
Definition
Definition
Eine freie Generiertheitsklausel GhhCii gilt über einer Algebra A,
geschrieben als A |= GhhCii, wenn A |= GhCi gilt, für jedes f ∈ C die Funktion
f A injektiv ist, und für f : s1 . . . sn → s, f 0 : s01 . . . s0n0 → s mit f 6= f 0 ∈ C, s ∈ G
und a1 ∈ As1 , . . . , an ∈ Asn , a01 ∈ As0 , . . . , a0n0 ∈ Asn0 gilt:
f A (a1 , . . . , an ) 6= f 0A (a01 , . . . , a0n0 ).
1
Insbesondere sind Terme mit verschiedenen Konstruktoren immer verschieden.
A. Knapp, G. Schellhorn: Formale Methoden
180
Axiome für freie Datentypen
Beispiel: Konstante c, einstellige Funktion f, zweistellige Funktion g
I
Verschiedenheit der Konstruktoren c, f und g:
c 6= f(x), f(x) 6= g(y, z), c 6= g(x, y)
I
Injektivität der Konstruktoren:
f(x) = f(y) ↔ x = y, g(x, y) = g(u, v) ↔ x = u ∧ y = v
A. Knapp, G. Schellhorn: Formale Methoden
181
Freie Generiertheitsklauseln als Abkürzung
Es gilt A |= GhhCii genau dann, wenn
Satz
I
A |= GhCi
I
Für alle f ∈ C gilt A |= f (~x) = f (~y) ↔ ~x = ~y.
I
Für alle f 6= g ∈ C mit derselben Zielsorte gilt A |= f (~x) 6= g(~y).
Freie Generiertheit ist also durch Axiome und Generiertheit ausdrückbar.
In KIV:
I
G freely generated by C für GhhCii
I
G freely generated by C als Abkürzung; daraus werden die Axiome
für freie Generiertheit erzeugt.
A. Knapp, G. Schellhorn: Formale Methoden
182
Freie Datentypen: Beispiele (1a)
Wochentage
Weekday = specification
sorts weekday;
constants Mon, Tue, Wed, Thu, Fri, Sat, Sun : weekday;
induction weekday freely generated by
Mon, Tue, Wed, Thu, Fri, Sat, Sun;
variables w : weekday;
end specification
Generierte Axiome:
I
Die Konstanten Mon, Tue, Wed, . . . sind paarweise verschieden:
Mon 6= Tue,
A. Knapp, G. Schellhorn: Formale Methoden
Mon 6= Wed,
Mon 6= Thu,
Mon 6= Fri,
...
183
Freie Datentypen: Beispiele (1b)
Induktionsregel für die Sorte weekday
Γ{w 7→ Mon} ⇒ ∆{w 7→ Mon}
...
Γ{w 7→ Sun} ⇒ ∆{w 7→ Sun}
Γ⇒∆
Damit: Beweise durch Fallunterscheidung nach dem Tag
I
Verallgemeinerung: Aufzählungstypen
A. Knapp, G. Schellhorn: Formale Methoden
184
Freie Datentypen: Beispiele (2a)
Paare
Pair = specification
sorts elem1, elem2, pair;
functions mkpair : elem1 × elem2 → pair;
induction pair freely generated by mkpair;
variables a, a1, a2 : elem1; b, b1, b2 : elem2; p : pair;
end specification
Generiertes Axiom:
mkpair(a1, b1) = mkpair(a2, b2) ↔ a1 = a2 ∧ b1 = b2
A. Knapp, G. Schellhorn: Formale Methoden
185
Freie Datentypen: Beispiele (2b)
Induktionsregel für die Sorte pair
Γ{p 7→ mkpair(a, b)} ⇒ ∆{p 7→ mkpair(a, b)}
Γ⇒∆
Damit: Variable p expandiert zu mkpair(a, b)
I
Verallgemeinerung: Tupel
A. Knapp, G. Schellhorn: Formale Methoden
186
Freie Datentypen: Beispiele (3)
Natürliche Zahlen
Nat = specification
sorts nat;
constants 0 : nat;
functions . +1 : nat → nat;
induction nat freely generated by 0, +1;
variables n : nat;
end specification
Axiome für natürliche Zahlen daraus generiert
A. Knapp, G. Schellhorn: Formale Methoden
187
Freie Datentypen: Beispiele (4a)
Listen
List = specification
sorts list, elem;
constants [] : list;
functions . + . : elem × list → list;
induction list freely generated by [], +;
variables a, b : elem; l, l1, l2 : list;
end specification
Generierte Axiome:
[] 6= a + l,
a + l1 = b + l2 ↔ a = b ∧ l1 = l2
A. Knapp, G. Schellhorn: Formale Methoden
188
Freie Datentypen: Beispiele (4b)
Induktionsregel für die Sorte list
∀~y .
V
Γ{l 7→ []} ⇒ ∆{l 7→ []}
W
Γ → ∆, Γ{l 7→ a + l} ⇒ ∆{l 7→ a + l}
Γ⇒∆
wobei ~y = fvar(Γ ⇒ ∆) \ {l}
A. Knapp, G. Schellhorn: Formale Methoden
189
KIV: Data Specifications
Häufige Situation:
I
freie Generiertheit mit Konstruktoren c
I
Selektoren, die aus c(x1 , . . . , xn ) die xi auswählen
Testprädikate ist mit Konstruktor c gebildet“
”
I Ordnung ist Unterterm von“
”
I Größenfunktion Anzahl nichtkonstanter Konstruktoren“
”
I
Für Datendefinitionen eigenes KIV-Syntaxkonstrukt data specification
zur Vermeidung unnötiger Schreibarbeit
A. Knapp, G. Schellhorn: Formale Methoden
190
KIV-Data Specifications: Beispiele (1)
Wochentage
Weekday = data specification
weekday = Mon | Tue | Wed | Thu | Fri | Sat | Sun;
variables w : weekday;
end data specification
Axiome für freie Generiertheit (Mon 6= Tue, &c.) werden wie bei einem
freely generated by erzeugt.
A. Knapp, G. Schellhorn: Formale Methoden
191
KIV-Data Specifications: Beispiele (2)
Paare
Pair = data specification
using Elem1, Elem2;
pair = mkpair (. .1 : elem1; . .2 : elem2);
variables p : pair;
end data specification
Für jeden Selektor wird ein Axiom generiert:
mkpair(a, b).1 = a
mkpair(a, b).2 = b
A. Knapp, G. Schellhorn: Formale Methoden
192
KIV-Data Specifications: Beispiele (3)
Natürliche Zahlen
Nat = data specification
nat = 0 | . +1 (. −1 : nat);
order predicates . < . : nat × nat;
variables k, m, n : nat;
end data specification
Neues Axiom für den Selektor −1 (0 −1 ist nicht spezifiziert)
n +1 −1 = n
Neue Axiome für das Prädikat < (strukturell-rekursive Definition)
¬m < 0
m < n +1 ↔ (m = n ∨ m < n)
Irreflexivität und Transitivität werden auch generiert (könnte man beweisen)
¬n < n
m<n∧n<k→m<k
A. Knapp, G. Schellhorn: Formale Methoden
193
KIV-Data Specifications: Beispiele (4a)
Listen
List = data specification
using Nat, Elem;
list = [] with nilp
| . + . (. .first : elem; . .rest : list) with consp;
order predicates . . : list × list;
(: ist Unterterm für Listen: ist Endstück :)
size functions length : list → nat;
variables l : list;
end data specification
A. Knapp, G. Schellhorn: Formale Methoden
194
Partielle Funktionen
Anwendung eines Selektors auf einen falschen Summanden
I
Was sind [].first und [].rest?
I
Ähnlich für 0 −1 oder n/0 (natürliche Zahlen) oder
“Out-of-bounds”-Zugriffe a[i] für Arrays
Allgemeiner: Behandlung partieller Funktionen
I
Prädikatenlogik kennt keine partiellen Funktionen
I
Mehrere Möglichkeiten: Erweiterung der Logik, Unterspezifikation,
Fehlerelemente, . . .
A. Knapp, G. Schellhorn: Formale Methoden
195
Unterspezifikation
I
[].rest und n/0 bleiben unspezifiziert
I
I
Konsequenz: [].rest muß irgendeine Liste sein, da Funktion total
I
I
Vorteil: kein unnötiger Overhead
Die Spezifikation ist dann nicht monomorph:
In Modell A: T J[].restK A = [].
In Modell B : T J[].restK B = [a] mit einem Element a.
In Modell C : T J[].restK C = [b] mit einem Element b 6= a.
Konsequenz: Wenn [].rest bzw. n/0 in Programmen aufgerufen wird,
dann muß
I
I
entweder die Implementierung irgendeine Liste/Zahl zurückgeben (und
keine Exception auslösen)
oder in der Programmsemantik dieser Fall speziell behandelt werden (bei
Exceptions muß das sowieso sein, Programmabbruch geht einfacher)
A. Knapp, G. Schellhorn: Formale Methoden
196
KIV-Data Specifications: Beispiele (4b)
Neue Axiome für List
I
I
I
Axiome für nilp und consp (eines pro Konstruktur)
nilp([])
¬nilp(a + l)
¬consp([])
consp(a + l)
Axiome für die Selektoren (je eines pro Verwendung)
(a + l).first = a
kein Axiom für [].first
(a + l).rest = l
kein Axiom für [].rest
Axiome für das Ordnungsprädikat ist Endstück“ (strukt.-rek. Def.)
”
¬l []
l (a + l1 ) ↔ l = l1 ∨ l l1
¬l l
l1 l2 ∧ l2 l3 → l1 l3
beweisbar, aber der Einfachheit halber generiert
I
Axiome für die Größenfunktion Länge“ (zählt nur nicht-konst. Konstr.)
”
length([]) = 0
A. Knapp, G. Schellhorn: Formale Methoden
length(a + l) = length(l) +1
197
KIV-Kalkül: Elimination für Selektoren
I
Listen haben (Postfix-)Selektoren
I .first (erstes Element)
I .rest (Rest der Liste)
I
Beseitigung von Selektoren mit Hilfe von (insert elim lemma)
I
Benötigt wird Lemma
` x 6= [] → a = x.first ∧ y = x.rest ↔ x = a + y
I
Eliminationsregel sucht einen Term t.first oder t.rest
I
Wenn t 6= [] gilt, wird t = a + y ersetzt (neue Variablen a, y)
I
Damit wird aus t.first bzw. t.rest jetzt a bzw. y
t = a + y, Γ(a, y, a + y) ` ∆(a, y, a + y)
t 6= [], Γ(t.first, t.rest, t) ` ∆(t.first, t.rest, t)
A. Knapp, G. Schellhorn: Formale Methoden
198
KIV-Kalkül: Elimination für andere Funktionen
I
Manchmal geht Elimination auch für andere unbeliebte“ Funktionen, etwa
”
Minus und Division
I
Lemma für Minus: n ≤ m ` n0 = m − n ↔ m = n0 + n
I Vorteil: Man kann auf Simplifierregeln für − verzichten
I Nachteil: Neue Variable n0 wird eingeführt (manchmal unintuitiv)
Γ(n0 + n, n, n0) ` ∆(n0 + n, n, n0)
n ≤ m, Γ(m, n, m − n) ` ∆(m, n, m − n)
I
KIV-Heuristik Elimination gesteuert durch Eliminationsregeln
(analog zu: Simplifier durch Simplifierregeln)
I
KIV-Eingabe analog zu Simplifierregeln: used for: e; &c.
A. Knapp, G. Schellhorn: Formale Methoden
199
KIV-Data Specifications: Beispiele (5)
I
Bäume (gegenseitig rekursive Definition) und Binärbäume sind freie
Datentypen.
I
Abstrakte Syntaxbäume von Sprachen sind freie Datentypen.
I
Auch Terme und Formeln sind freie Datentypen:
formula = . = . ( . .term1 : term; . .term2 : term)
| ∀ . . . ( . .var : var; . .fma : formula)
| ...
A. Knapp, G. Schellhorn: Formale Methoden
200
KIV-Data Specifications: Allgemeine Form (1)
Eine KIV-Datentyp-Definition hat die Form (optionales in eckigen Klammern)
s = c1 (σ1,1 : s1,1 ; . . . ; σ1,n1 : s1,n1 ) [with p1 ]
| ...
| ck (σk,1 : sk,1 ; . . . ; σk,nk : sk,nk ) [with pk ];
I
Überladene Selektoren: σi,j = σi0 ,j0 erlaubt, falls si,j = si0 ,j0 ,
ansonsten alle Operationen paarweise verschieden
A. Knapp, G. Schellhorn: Formale Methoden
201
Datentyp-Definitionen in Java
abstract class s {
}
/* Subklasse für Konstruktor c1 */
class c1 extends s {
s11 sel11; // ein Feld pro Selektor
s12 sel12;
...
/* Konstruktor */
public c1(s11 sel11, s12 sel12, ...) {
this.sel11 = sel1; this.sel12 = sel12; ...
}
}
/* Subklasse für Konstruktor c2 */
class c2 extends s {
...
}
A. Knapp, G. Schellhorn: Formale Methoden
202
KIV-Data Specifications: Allgemeine Form (2)
Syntax von KIV-Data Specifications
data specification
using hspecname1i, hspecname2 i, . . .;
hDatentyp-Definition für Sorte s1i;
hDatentyp-Definition für Sorte s2i;
...
order predicates p1 : s1 × s1;
p2 : s2 × s2;
...
size functions f1 : s1 → nat;
...
variables x1 : s1; . . .
end data specification
I
Die Sorten sind gegenseitig rekursiv (eine Generiertheitsklausel für alle)
I
wenn size function, dann für alle Sorten, und using nat
A. Knapp, G. Schellhorn: Formale Methoden
203
KIV-Data Specifications: Eigenschaften
Satz
Eine Data Specification, die keine anderen Datentypen verwendet, ist
konsistent. Sie ist monomorph, bis auf unspezifizierte Selektoren.
I
Die natürlichen Zahlen sind also als Spezialfall monomorph, genauso
Aufzählungstypen.
I
Für Listen von Elementen, Tupel &c. gilt Analoges.
A. Knapp, G. Schellhorn: Formale Methoden
204
Zusammenfassung
I
Einfache Spezifikationen
I
I
I
Homomorphismen, Isomorphismen
Monomorphie
Elementare Spezifikationen
I
I
I
Generiertheitsklauseln
Strukturelle Induktion
Strukturelle Rekursion
I
KIV: Simplifier und Heuristiken
I
Unvollständigkeit der Arithmetik
I Ω-Regel
I
Freie Datentypen
I
I
Freie Generiertheitsklauseln
KIV-Data Specifications
A. Knapp, G. Schellhorn: Formale Methoden
205
Strukturierte Spezifikationen
Spezifikationen werden sehr schnell sehr groß: Strukturierung
I
Übersichtlichkeit & Verständlichkeit
I
Wiederverwendung von Komponenten
I
unabhängige Entwicklung von Komponenten
I
Strukturierung und Wiederverwendung von Beweisen
A. Knapp, G. Schellhorn: Formale Methoden
206
Strukturierte Spezifikationen in KIV
I
KIV zeigt strukturierte Spezifikationen als Spezifikationsgraph an.
I
In KIV enthält jeder Knoten neben der Spezifikation außerdem eine
Theorembasis.
I
Die Theorembasis enthält eine Menge von Theoremen (Sequenzen) über
der Gesamtsignatur.
I
Für jede Sequenz kann ein Beweis vorhanden sein, der zeigt, daß die
Sequenz aus der Spezifikation und anderen Theoremen folgt (keine
zyklischen Abhängigkeiten).
I
Theoreme aus darunterliegenden Spezifikationen werden mit
(insert spec-lemma) statt (insert lemma) angewendet.
I
KIV hat ein Korrektheitsmanagement, um Abhängigkeiten zwischen
Beweisen zu verwalten.
A. Knapp, G. Schellhorn: Formale Methoden
207
Vereinigung und Anreicherung
I
Vereinigung
I
I
Sp1 + Sp2
wirft Signaturen und Axiome zusammen
KIV-Syntax: union specification
hSpec1i + hSpec2 i + . . .
end union specification
I
Anreicherung
I
I
Sp (Σ, X, Ax, Gen)
addiert neue Signaturen und Axiome
KIV-Syntax: enrich hSpec1i, hSpec2 i, . . . with
hsig i hind i hax i
end enrich
I
implizit: Ausgangsspezifikation der Anreicherung ist die Vereinigung von
hSpec1i, hSpec2 i, . . .
A. Knapp, G. Schellhorn: Formale Methoden
208
Anreicherung
Hinzunahme neuer Axiome macht eine Spezifikation schnell inkonsistent;
es sind nur konsistenzerhaltende“ Anreicherungen gewünscht.
”
I Formaler Begriff: Konsistenzerhaltend = hierarchiepersistent
I
I
Neue Operationen sollten monomorphieerhaltend“ sein: Wenn genau ein
”
Datentyp spezifiziert ist, sollte die Operation ebenfalls eindeutig festgelegt
sein.
I
Formaler Begriff: Monomorphieerhaltend = eindeutig
Vorgehen
I
Anreicherung nur durch rekursive und nichtrekursive Definitionen für neue
Operationen. Diese sind hierarchiepersistent und eindeutig.
A. Knapp, G. Schellhorn: Formale Methoden
209
Erweiterungen und Redukte
Eine Signatur Σ0 = (S0 , F 0 , P0 ) heißt Erweiterung von
Σ = (S, F, P), geschrieben als Σ ⊆ Σ0 , wenn S ⊆ S0 , F ⊆ F 0 und P ⊆ P0 und
Funktionen und Prädikate dieselben Sorten haben.
Definition
0
0
Sei Σ = (S, F, P), Σ0 = (S0 , F 0 , P0 ), A0 = ((A0s )s∈S0 , (f A )f ∈F0 , (pA )p∈P0 ) mit
Σ ⊆ Σ0 und A0 ∈ Alg(Σ0 ).
0
0
Dann ist A0 |Σ = ((As )s∈S , (f A |Σ )f ∈F , (pA |Σ )p∈P ) eine Σ-Algebra mit
I
As = A0s für alle s ∈ S
I
f A |Σ = f A für alle f ∈ F
I
pA |Σ = pA für alle p ∈ P
0
0
0
0
Definition
Ist Σ ⊆ Σ0 und A0 ∈ Alg(Σ0 ), so heißt A0 |Σ, das Redukt von A0
auf Σ und A0 eine Erweiterung von A|Σ.
A. Knapp, G. Schellhorn: Formale Methoden
210
Anreicherung und Algebren
I
Wenn A ∈ Alg(Σ) und Σ ⊆ Σ0 , dann gibt es eine Erweiterung A0 mit
A0 |Σ = A.
I
Ist A0 ∈ Mod(Sp (Σ0 , X 0 , Ax0 , Gen0 )), dann ist A0 |Σ(Sp) ∈ Mod(Sp)
(wobei Σ(Sp) die Signatur von Sp ist).
I
Wann kann jedes Modell von Sp erweitert werden?
I
Wann ist die Erweiterung konsistent?
I
Wann gibt es nur eine Erweiterung?
A. Knapp, G. Schellhorn: Formale Methoden
211
Hierarchiepersistenz
Eine Anreicherung ist hierarchiepersistent, wenn sie die Bedeutung alter
Symbole nicht einschränkt: Jedes Modell der Ausgangsspezifikation läßt sich
erweitern.
Definition
Eine Anreicherung Sp0 = Sp (Σ, X, Ax, Gen) heißt
hierarchiepersistent, wenn es für jedes A ∈ Mod(Sp) ein A0 ∈ Mod(Sp0 ) mit
A0 |Σ(Sp) = A gibt.
I
Eine hierarchiepersistente Anreicherung einer konsistenten Spezifikation
ist konsistent.
A. Knapp, G. Schellhorn: Formale Methoden
212
Eindeutigkeit
Eine Anreicherung ist eindeutig, wenn man für die neuen Symbole nicht zwei
echt verschiedene Bedeutungen finden kann, sofern man eine für die alten
festlegt.
I
Es ist aber möglich, daß sich nur bestimmte alte Datenstrukturen (im
schlimmsten Falle keine) erweitern lassen.
Definition
Eine Anreicherung Sp0 = Sp (Σ, X, Ax, Gen) ist eindeutig, wenn
je zwei Modelle A0 , A00 ∈ Mod(Sp0 ) mit A0 |Σ(Sp) = A00 |Σ(Sp) isomorph sind.
I
Eine eindeutige Anreicherung einer monomorphen Spezifikation ist
monomorph.
A. Knapp, G. Schellhorn: Formale Methoden
213
Reine Signaturerweiterung und zusätzliche Axiome
Satz
Sp (Σ, ∅, ∅, ∅) ist hierarchiepersistent.
Satz
Sp (∅, X, Ax, Gen) ist eindeutig. Die Anreicherung ist bei Gen = ∅
aber nur hierarchiepersistent, wenn die neuen Axiome aus den alten folgen.
Satz
Sp ((S, C, ∅), ∅, ∅, ShhCii) ist eindeutig und hierarchiepersistent.
A. Knapp, G. Schellhorn: Formale Methoden
214
Eigenschaften von Datendefinitionen
Satz
Eine Datendefinition ist eine spezielle Anreicherung der verwendeten
Spezifikationen und ist hierarchiepersistent. Sie ist eindeutig, bis auf
unspezifizierte Selektoren.
Für List: Beschreibung exakt des Datentyps der Listen
I
I
Zu jedem Elementtyp gibt es einen Listentyp.
Genau ein Listentyp für jeden Elementtyp, bis auf die Festlegung von
[].first und [].rest.
A. Knapp, G. Schellhorn: Formale Methoden
215
Anreicherung: Beispiele (1)
Partielle und totale Ordnungen
POElem = specification
sorts elem;
predicates . < . : elem × elem;
variables a, b, c : elem;
axioms ¬ a < a;
a < b ∧ b < c → a < c;
end specification
TOElem = enrich POElem with
axioms a < b ∨ a = b ∨ b < a;
end enrich
I
Die Anreicherung TOElem ist nicht hierarchiepersistent, aber (trivial)
eindeutig.
A. Knapp, G. Schellhorn: Formale Methoden
216
Anreicherung: Beispiele (2)
Ringe und Körper
Ring = specification
sorts elem;
constants 0, 1 : elem;
functions . + . : elem × elem → elem;
− . : elem → elem;
. ∗ . : elem × elem → elem;
variables a, b, c : elem;
axioms a + 0 = a;
a + (− a) = 0;
1 ∗ a = a;
a ∗ (b + c) = a ∗ b + a ∗ c; ...
end specification
Field = enrich Ring with
functions . −1 : elem → elem;
axioms a 6= 0 → a ∗ (a−1 ) = 1;
end enrich
I
Die Anreicherung Field ist nicht hierarchiepersistent; sie ist fast eindeutig,
bis auf das unspezifizierte inverse Element der 0.
A. Knapp, G. Schellhorn: Formale Methoden
217
Anreicherung: Verwendungen
Anreicherung wird also zu zwei Zwecken verwendet:
I
hierarchiepersistent: um neue Funktionalität zu spezifizieren
I
I
I
der Standardfall
häufig auch eindeutig, aber manchmal will man auch nur interessante“ Fälle
”
definieren
nicht hierarchiepersistent und eindeutig: um kleinere Klassen von
Modellen auszuzeichnen
I
I
I
Gefahr der Inkonsistenz
sollte man in Softwarespezifikationen besser vermeiden
Besser: Man beweise, daß die Modelle der einen Spezifikation eine
Teilmenge der Modelle einer anderen sind.
I
Spezialfall von Verfeinerung
A. Knapp, G. Schellhorn: Formale Methoden
218
Transitivität von Hierarchiepersistenz und Eindeutigkeit
Satz
Seien
I
Sp1 = Sp (Σ, X, Ax, Gen),
I
Sp2 = Sp1 (Σ0 , X 0 , Ax0 , Gen0 )
I
Sp3 = Sp (Σ ∪ Σ0 , X ∪ X 0 , Ax ∪ Ax0 , Gen ∪ Gen0 )
Dann gilt:
I
Sind Sp1 und Sp2 hierarchiepersistent, dann ist auch Sp3
hierarchierpersistent.
I
Sind Sp1 und Sp2 eindeutig, dann ist auch Sp3 eindeutig.
A. Knapp, G. Schellhorn: Formale Methoden
219
Vereinigung
Satz
Ist Sp1 + Sp2 eine Vereinigung, so ist sie hierarchiepersistent als
Anreicherung von Sp1 um die Differenz von Sp2 und Sp1 (und umgekehrt), wenn
I
der beiden gemeinsame Teil ausschließlich in gemeinsamen
Unterspezifikationen Sp01 , . . . , Sp0n definiert ist;
I
die Anreicherungen von Sp0i zu Sp1 und Sp2 hierarchiepersistent sind;
I
für jede Vereinigung Sp0i + Sp0j dasselbe Kriterium wie für Sp1 + Sp2 gilt.
Kriterium für Hierarchiepersistenz von Vereinigungen
I
Spezialfall: Die Spezifikationen haben disjunkte Signatur.
A. Knapp, G. Schellhorn: Formale Methoden
220
Modulare Spezifikationsgraphen
Für alle Spezifikationsknoten in einem Spezifikationsgraphen zeigt man: Jede
Spezifikation ist hierarchiepersistente Erweiterung jeder Teilspezifikation.
Wenn Sp1 und Sp2 dann als Durchschnitt Sp0 = Sp01 + . . . + Sp0n haben, dann
I
sind sowohl Sp1 als auch Sp2 hierarchiepersistente Erweiterung von Sp0 ;
I
jedes Modell A von Sp0 kann also zu A1 ∈ Mod(Sp1 ), A2 ∈ Mod(Sp2 )
erweitert werden, mit A1 |Σ(Sp0 ) = A2 |Σ(Sp0 ) = A.
I
Die beiden Modelle können also zusammengeworfen“ werden zu einem
”
Modell von Sp1 + Sp2 (und das geht für alle A1 , A2 wegen
Hierarchiepersistenz).
I
Wenn also alle elementaren Spezifikationen konsistent sind, alle
Anreicherungen hierarchiepersistent, und die Vereinigungen das Kriterium
erfüllen (modularer Spezifikationsgraph), dann ist die Gesamtspezifikation
konsistent.
A. Knapp, G. Schellhorn: Formale Methoden
221
Nichtrekursive Definitionen
Definitionen zur Abkürzung großer Terme und Formeln
I
Prädikat: p(~x) ↔ ϕ (p kommt in Formel ϕ nicht vor, fvar(ϕ) ⊆ ~x)
I
Funktion: f (~x) = t (f kommt im Term t nicht vor, var(t) ⊆ ~x)
A. Knapp, G. Schellhorn: Formale Methoden
222
Nichtrekursive Definitionen: Beispiele (1)
Anreicherung um nichtrekursives Prädikat
NatDiv = enrich Nat with
predicates | : nat × nat;
axioms m | n ↔ ∃ k . k * m = n;
end enrich
I
Die Anreicherung NatDiv ist hierarchiepersistent und eindeutig.
A. Knapp, G. Schellhorn: Formale Methoden
223
Nichtrekursive Definitionen: Beispiele (2)
Anreicherung um nichtrekursives Prädikat mit Fallunterscheidung
NatPrime = enrich NatDiv with
predicates prime : nat;
axioms ¬ prime(0);
¬ prime(1);
n ≥ 2 → (prime(n) ↔
∀ m . m | n → m = 1 ∨ m = n);
end enrich
I
Die Anreicherung NatPrime ist hierarchiepersistent und eindeutig (da
Fallunterscheidung nach n = 0, n = 1, n ≥ 2 vollständig).
A. Knapp, G. Schellhorn: Formale Methoden
224
Nichtrekursive Definitionen: Beispiele (3)
Anreicherung um nichtrekursive Konstante
Nat12 = enrich Nat with
constants 1 : nat;
2 : nat;
axioms 1 = 0 +1
2 = 0 +1 +1;
end enrich
I
Die Anreicherung Nat12 ist hierarchiepersistent und eindeutig.
A. Knapp, G. Schellhorn: Formale Methoden
225
Nichtrekursive Definitionen: Beispiele (4)
I
m ≤ n ↔ ∃k . m + k = n
I
m < n ↔ m ≤ n ∧ m 6= n
I
m>n↔n<m
I
even(n) ↔ ∃m . n = m + m
I
odd(n) ↔ ¬even(n)
I
m < n → min(m, n) = m, ¬m < n → min(m, n) = n
I
x ≥ 0 → abs(x) = x, x < 0 → abs(x) = −x
I
last(l + (a + [])) = a (unvollständige Definition)
I
a ∈ l ↔ ∃l0 , l00 . l0 + a + l00 = l
I
isprefix(l, l0 ) ↔ ∃l00 . l + l00 = l0
I
nodups(l) ↔ ¬∃l1 , l2 , l3 , a . l = l1 + a + l2 + a + l3
A. Knapp, G. Schellhorn: Formale Methoden
226
Nichtrekursive Definitionen: Allgemeine Form
I
Prädikat: p(~x) ↔ ϕ (p kommt in Formel ϕ nicht vor, fvar(ϕ) ⊆ ~x)
I
Funktion: f (~x) = t (f kommt im Term t nicht vor, var(t) ⊆ ~x)
I
Prädikat mit zwei vollständigen Fällen:
γ(x, y) → (p(x, y) ↔ ϕ1 (x, y)),
¬γ(x, y) → (p(x, y) ↔ ϕ2 (x, y))
I
Funktionen mit drei unvollständigen Fällen:
γ1 (x, y) ∧ γ2 (x, y) → f (x, y) = t1 ,
γ1 (x, y) ∧ ¬γ2 (x, y) → f (x, y) = t2 ,
¬γ1 (x, y) ∧ γ2 (x, y) → f (x, y) = t3
Satz
Die Hinzunahme einer neuen Operation (Funktion oder Prädikat) mit
nichtrekursiver Definition ist immer hierarchiepersistent. Wenn die Fälle
vollständig sind, ist die Erweiterung eindeutig.
A. Knapp, G. Schellhorn: Formale Methoden
227
Rekursive Definitionen
I
Datentypen bestehen aus (der Semantik von) Konstruktortermen.
I
Rekursive Definitionen geben Definition durch Reduktion auf kleinere
Konstruktorterme.
I
Rekursive Definitionen entsprechen einem rekursiven Programm, das den
Term abläuft (das Programm terminiert immer).
Satz
Die Hinzunahme einer neuen Operation mit rekursiver Definition zu
einem freien Datentyp ist immer hierarchiepersistent. Wenn die Fälle vollständig
sind, ist die Erweiterung immer eindeutig.
A. Knapp, G. Schellhorn: Formale Methoden
228
Rekursive Definitionen: Beispiele (1)
Anreicherung um rekursive Funktion
Length = enrich List with
functions length : list → nat;
axioms ax1: length([]) = 0;
ax2: length(a + l) = length(l) +1;
end enrich
I
Length ist hierarchiepersistent und eindeutig.
I
Dabei darf ax2 nicht durch length(x) = length(x.rest) +1 ersetzt
werden.
A. Knapp, G. Schellhorn: Formale Methoden
229
Rekursive Definitionen: Beispiele (2)
Anreicherung um rekursive Funktion
Append = enrich List with
functions . + . : list × list → list;
axioms [] + l = l;
(a + l) + l’ = a + (l + l’);
end enrich
I
Append ist hierarchiepersistent und eindeutig.
I
Dabei ist + überladen: sowohl Element vor Liste hängen, als auch zwei
Listen zusammenhängen
A. Knapp, G. Schellhorn: Formale Methoden
230
Rekursive Definitionen: Beispiele (3)
Anreicherung um rekursives Prädikat mit Fallunterscheidung
Ordered = enrich List with
predicates ordered : list;
axioms ordered([]);
ordered(a + []);
ordered(a + b + l) ↔ a < b ∧ ordered(b + l);
end enrich
I
Ordered ist hierarchiepersistent und eindeutig, da die Fallunterscheidung
vollständig ist (jede Liste ist entweder gleich [], a + [] oder a + b + l).
A. Knapp, G. Schellhorn: Formale Methoden
231
Umbenennung
Umbenennung
Spρ
I
benennt die Operationen einer Spezifikation um
I
nützlich um zwei Kopien zu erhalten
I
KIV-Syntax: rename hSpec i by morphism
hrenaming1i;
...
hrenamingni;
end rename
mit hrenaming i von der Form hsort/op/vari → hsort/op/vari
I
identische Umbenennungen weglassen (werden beim Ansehen der
Spezifikation aber angezeigt)
I
Nicht zwei Symbole auf dasselbe abbilden: injektiv umbenennen
I
entweder alle Variablen oder keine umbenennen
A. Knapp, G. Schellhorn: Formale Methoden
232
Umbenennung: Beispiel
Listen zu Stacks
rename List by morphism
list → stack;
[] → empty;
(: Typangabe für überladenes Symbol :)
+ :: (elem × list → list) → push prio 0;
(: pop soll nicht mehr Postfix sein, default übernimmt prio :)
.rest → pop prio 0;
(: top soll nun Präfix sein :)
.first → top .;
(: eigentlich keine Stack-Operation, nur um Overloading zu zeigen :)
+ :: (list × list → list) → concat prio 0;
x → st;
y → st0;
z → st1;
end rename
A. Knapp, G. Schellhorn: Formale Methoden
233
Generische Spezifikation
Generische Spezifikation
I
KIV-Syntax: generic specification
parameter hSpec i
using hSpec1i, . . . , hSpecni
target
hsig i hind i hax i
end generic specification
I
wie Anreicherung (von hSpec i, hSpec1i, . . . , hSpecni), nur wird von
hSpec i explizit gesagt, daß es sich um einen Parameter handelt
I
Vereinigung und Anreicherung übernimmt den (oder die) Parameter der
Unterspezifikationen
I
Variante: generic data specification: wie data
specification, nur mit Parameter
A. Knapp, G. Schellhorn: Formale Methoden
234
Generische Spezifikationen: Aktualisierung (1)
Aktualisierung
I
instantiiert Parameter (oder einen Parameter) einer Spezifikation
I
KIV-Syntax:
actualize hSpec i with hASpec1i, . . . , hASpecni by morphism
hrenaming1i;
...
hrenamingmi;
end actualize
mit hrenaming i von der Form hsort/op/vari → hsort/op/vari
I
Die Vereinigung von hASpec1i, . . . , hASpecni heißt aktuelle Spezifikation
I
identische Umbenennungen weglassen
I
entweder alle Variablen oder keine umbenennen
A. Knapp, G. Schellhorn: Formale Methoden
235
Generische Spezifikationen: Aktualisierung (2)
Aktualisierung
I
Der Parameter muß in die aktuelle Spezifikation abgebildet werden.
I
Abbildung darf auch nicht injektiv sein:
pair(elem1, elem2) → pair(nat, nat)
I
Der Nicht-Parameter-Teil darf nur injektiv und disjunkt zur aktuellen
Spezifikation umbenannt werden, z. B. list → natlist
I
Die instantiierten Axiome des Parameters müssen Axiome in der aktuellen
Spezifikation sein.
I
Verallgemeinerung instantiated specification
I
I
Axiome müssen bewiesen werden
mapping statt morphism erlaubt es, eine Sorte auf ein Tupel von Sorten
abzubilden
A. Knapp, G. Schellhorn: Formale Methoden
236
Aktualisierung: Beispiel (1)
Order = specification
sorts elem;
constants d : elem;
predicates : elem × elem
variables a, b, c : elem;
axioms ¬ a a; a b ∧ b c → a c;
¬ a d; (: d ist minimal :)
end specification
List-Ord = generic data specification
parameter Order;
using Nat
list = [] | . + . (. .first : elem; . .rest : list);
size functions length : list → nat;
end generic data specification
A. Knapp, G. Schellhorn: Formale Methoden
237
Aktualisierung: Beispiel (2)
Nat-List = actualize List-Ord with Nat by morphism
list → natlist;
elem → nat;
→ <;
d → 0;
a → n; b → n0; c → n1;
end actualize
I
Die instantiierten Axiome (u. a. ¬n < 0) sind (modulo Umbenennung der
Variablen) in Nat vorhanden.
I
Die Listenoperationen (+, .rest, etc.) werden nicht umbenannt, sie
bekommen nur die neuen Sorten als Argumente.
A. Knapp, G. Schellhorn: Formale Methoden
238
Nichtfreie Datentypen
Orderedlist = enrich List with
predicates . < . : elem × elem;
ordered : list;
axioms ¬ a < a;
a < b ∨ a = b ∨ b < a;
a < b ∧ b < c → a < c;
ordered([]);
ordered(a + []);
ordered(a + b + l) ↔ a < b ∧ ordered (b + l);
end enrich
I
Hinzunahme von ∀l . ordered(l) wäre inkonsistent.
I
Allgemein: Ein generierter Datentyp enthält immer alle Konstruktorterme.
Man kann nicht nachträglich Terme ausschließen. Man kann nur einen
nichtfreien Datentyp bilden, der Terme identifiziert.
A. Knapp, G. Schellhorn: Formale Methoden
239
Spezifikation nichtfreier Datentypen
I
Spezifikationen nichtfreier Datentypen werden sehr leicht inkonsistent oder
uneindeutig.
I
Deshalb: Standardvorgehen, das für alle containerartigen Datentypen, die
Elemente enthalten“, funktioniert (z. B. Arrays, Graphen, Mengen,
”
Multimengen, etc.)
I
Einzige Ausnahme für das Standardvorgehen: Ganze Zahlen (spezieller
Nachweis, daß Integerspezifikation monomorph)
A. Knapp, G. Schellhorn: Formale Methoden
240
Standardvorgehen zur Spezifikation nichtfreier Datentypen
I
Grundidee: Konstruiere nichtfreien Datentyp durch Zusammenfassung von
Termen in Klassen, die gleich sind.
I
Als erstes nach der Bestimmung der Konstruktoren: Definiere Gleichheit
durch Extensionalitätsaxiom: x = y ↔ EQ(x, y)
I
Dann: die in EQ verwendeten Operationen werden rekursiv definiert.
I
Damit Monomorphie: höchstens ein Datentyp spezifiziert
I
Aber: rekursive Definitionen können inkonsistent sein.
A. Knapp, G. Schellhorn: Formale Methoden
241
Beispiel einer inkonsistenten rekursiven Definition
I
Annahmen
I
I
I
Mengen von natürlichen Zahlen definiert, mit ∅ und insert generiert
Aus den Axiomen folgt: insert(a, insert(a, ∅)) = insert(a, ∅)
Rekursive Definition
sum(∅) = 0 ,
sum(insert(a, s)) = a + sum(s)
inkonsistent, da aus insert(1, insert(1, ∅)) = insert(1, ∅) folgt, daß
2 = sum(insert(1, insert(1, ∅))) = sum(insert(1, ∅)) = 1
I
Korrekte Definition
sum(∅) = 0 ,
¬a ∈ s → sum(insert(a, s)) = a + sum(s)
(im Fall a ∈ s ist insert(a, s) = s)
I
Operation sum muß mit der Definition der Gleichheit auf Mengen, d. h.
dem Extensionalitätsaxiom verträglich sein.
A. Knapp, G. Schellhorn: Formale Methoden
242
Standardvorgehen: Beispiele (1a)
Arrays
Array = generic specification
parameter Elem;
using Nat;
target
sorts array;
functions mkar : nat → array;
. [ . , . ] : array × nat × elem → array;
. [ . ] : array × nat → elem;
# . : array → nat;
induction array generated by mkar, . [ . , . ];
variables d : elem; ar, ar1, ar2 : array;
A. Knapp, G. Schellhorn: Formale Methoden
243
Standardvorgehen: Beispiele (1b)
Festlegungen:
I
Konstruktor mkar(n) liefert ein Array mit unbekannten Elementen
I Alternative: mkar(n, d) mit Initialelement d
I
Für m ≥ #a ist Selektion a[m] unspezifiziert
I
Für m ≥ #a ist Modifikation die Identität: a[m, d] = a
I
Alternativen: liefert irgendein Array, ein Array gleicher Größe
axioms ar1 = ar2 ↔ # ar1 = # ar2 ∧
∀ n . n < # ar1 → ar1[n] = ar2[n];
# mkar(n) = n;
# ar[m , d] = # ar;
m < # ar → ar[m , d][m] = d;
n 6= m → ar[m , d][n] = ar[n];
end generic specification
A. Knapp, G. Schellhorn: Formale Methoden
244
Beweisverpflichtungen für nichtfreie Datentypen
I
Der freie Datentyp existiert immer, rekursvie Definitionen dort eindeutig
I
Durch die EQ-Formel aus dem Extensionalitätsaxiom werden die
Konstruktorterme in Klassen eingeteilt, die gleich sind.
I
Damit EQ eine sinnvolle Klasseneinteilung bewirkt, muß gelten:
I Reflexivität: EQ(a, a)
I Symmetrie: EQ(a, b) → EQ(b, a)
I Transitivität: EQ(a, b) ∧ EQ(b, c) → EQ(a, c)
I Verträglichkeit: EQ(a, b) → f (a) = f (b)
I
I
für a, b aus der gleichen Klasse muß Operation f dasselbe liefern
Um die Konsistenz eines nichtfreien Datentyps formal zu zeigen, muß EQ
eine Kongruenz (= Äquivalenzrelation + Verträglichkeit) über dem freien
Datentyp sein
A. Knapp, G. Schellhorn: Formale Methoden
245
Standardvorgehen: Beispiele (1c)
Das Extensionalitätsaxiom ist eine Kongruenz; für
EQ(ar1, ar2) = #ar1 = #ar2 ∧ ∀n . n < #ar1 → ar1[n] = ar2[n]
läßt sich (ohne das Exensionalitätaxiom) zeigen:
I
Reflexivität: EQ(ar1, ar1)
I
Symmetrie: EQ(ar1, ar2) → EQ(ar2, ar1)
I
Transitivität: EQ(ar1, ar2) ∧ EQ(ar2, ar3) → EQ(ar1, ar3)
I
Verträglichkeit mit #: EQ(ar1, ar2) → #ar1 = #ar2
I
Verträglichkeit mit Auswahl: EQ(ar1, ar2) → ar1[n] = ar2[n]
I
Verträglichkeit mit Änderung: EQ(ar1, ar2) → EQ(ar1[n, d], ar2[n, d])
allerdings nur mit vollständig definiertem Selektor, z. B. mit
#ar ≤ n → ar[n] = mkar(0)[0]
A. Knapp, G. Schellhorn: Formale Methoden
246
Standardvorgehen: Beispiele (2a)
Geordnete Listen
Orderedlist = specification
sorts elem, ordlist;
constants [] : ordlist;
functions . + . : elem × ordlist → ordlist;
min : ordlist → elem;
butmin : ordlist → ordlist;
predicates . < . : elem × elem;
variables a, b, c : elem;
l, l’ : ordlist;
induction ordlist generated by [], +;
A. Knapp, G. Schellhorn: Formale Methoden
247
Standardvorgehen: Beispiele (2b)
axioms ¬
a
a
l
< a;
b ∨ a = b ∨ b < a;
b ∧ b < c → a < c;
l’ ↔
l = [] ∧ l’ = []
∨ l 6= [] ∧ l’ 6= []
∧ min(l) = min(l’)
∧ butmin(l) = butmin(l’);
min(a + []) = a;
a < b → min(a + b + l) = min(a + l);
¬ a < b → min(a + b + l) = min(b + l);
butmin(a + []) = [];
a < b → butmin(a + b + l) = b + butmin(a + l);
¬ a < b → butmin(a + b + l) = a + butmin(b + l);
end specification
a
<
<
=
A. Knapp, G. Schellhorn: Formale Methoden
248
Standardvorgehen: Beispiele (3a)
Speicher
Store = generic specification
parameter Loc+Data (: Parametersorten loc, data :)
using Nat
target
sorts store;
constants (: leerer Speicher :)
∅ : store;
functions (: Schreiben :)
. [ . , . ] : store × loc × data → store;
(: Lesen :)
. [ . ] : store × loc → data;
(: Anzahl allokierter Adressen :)
# . : store → nat;
(: Freigeben :)
. -- . : store × loc → store;
(: neue, nicht allokierte Adresse :)
new : store → loc;
predicates (: Adresse ist allokiert :)
. ∈ . : loc × store;
A. Knapp, G. Schellhorn: Formale Methoden
249
Standardvorgehen: Beispiele (3b)
Entscheidungen:
I
Schreib-Konstruktor allokiert Adresse, falls noch nicht vorhanden
I
I
Falls a ∈
/ st, liefert Selektion st[a] immer dasselbe unspezifizierte
Datum ∅[a].
I
I
Alternative: separates Allokieren
Alternative: das unspezifizierte Element ändert sich evt. beim Schreiben
(Axiom At-other und st1[a] = st2[a] in Extension mit zusätzlicher
Vorbedingung a ∈ st)
unbeschränkte Zahl an Adressen vorhanden (keine Memory overflows
betrachtet)
nur unendliche Parameter für loc verwendbar (nicht hierarchiepersistent)
I Alternativen: new : store → loc or overflow oder Prädikat
full(st)
A. Knapp, G. Schellhorn: Formale Methoden
250
Standardvorgehen: Beispiele (3c)
induction store generated by
∅, . [ . , . ] :: (store × loc × data → store);
variables a, b : loc; d : data; st, st1, st2 : store;
axioms
Extension: st1 = st2 ↔ ∀ a . (a ∈ st1 ↔ a ∈ st2)
∧ st1[a] = st2[a];
In-empty: ¬ a ∈ ∅;
In-insert: a ∈ st[b, d] ↔ a = b ∨ a ∈ st;
At-same: st[a, d][a] = d;
At-other: a 6= b → st[b, d][a] = st[a];
Size-base: # ∅ = 0;
Size-rec: ¬ a ∈ st → # st[a, d] = # st + 1;
(: a ∈ st → # st[a, d] = # st ist beweisbar :)
Del-base: ∅ -- b = ∅;
Del-same: st[a, d] -- a = st -- a ;
Del-other: a 6= b → (st[b, d] -- a) = (st -- a)[b, d];
New: ¬ new(st) ∈ st;
end generic specification
A. Knapp, G. Schellhorn: Formale Methoden
251
Spezifikation der ganzen Zahlen (1)
I
Integers sind von 0, +1, −1 generiert
I
Damit beliebig gemischte Terme: 0 +1 −1 −1 +1 +1 . . . −1 +1
I
In einer Algebra A (ohne Axiome) können diese beliebig gleich oder
verschieden sein.
I
Zwei Ziele für die Axiome, um die Integers als einzige Algebra zu haben:
1. Alle Werte aus Aint sind
I
T J0 +1 . . . +1K A = T J0 +1n K A = Sn mit n > 0 oder
| {z }
I
T J0 −1 . . . −1K A = T J0 −1m K A = Pm mit m > 0 oder
| {z }
I
T J0K A = 0A
n×
m×
2. 0A , Sn und Pm sind alle verschieden.
I
Dann Isomorphismus h : A → Z mit h(Sn ) = n, h(Pm ) = −m, h(0A ) = 0.
A. Knapp, G. Schellhorn: Formale Methoden
252
Spezifikation der ganzen Zahlen (2)
Ziel 1: Keine weiteren Elemente außer Sn , 0, Pm
Axiome: predsucc: i −1 +1 = i
succpred: i +1 −1 = i
Für jeden Konstruktorterm t gilt (in jedem Modell der Axiome): |= t = 0 oder
|= t = 0 +1n oder |= t = 0 −1m (und damit T JtK A ∈ {Sn , 0A , Pm }).
Durch Induktion über die Anzahl k der Konstruktoren in t:
I
I
k = 0: Dann ist t = 0 und die Behauptung gilt.
k → k + 1:
I
I
I
Es gilt: t = t0 +1 oder t = t0 −1.
Nach Induktionsvoraussetzung |= t0 = 0 +1n oder |= t = 0 −1m oder
|= t0 = 0.
Zwei interessante Fälle mit insert rewrite lemma:
t = t0 −1 und |= t0 = 0 +1n : Verwendung von predsucc
t = t0 +1 und |= t0 = 0 −1m : Verwendung von succpred
A. Knapp, G. Schellhorn: Formale Methoden
253
Spezifikation der ganzen Zahlen (3)
Ziel 2: Die Elemente Sn , 0A und Pm sind alle verschieden.
0
Problem: Endlich viele Ungleichungen (z. B. 0 +1n 6= 0 +1n für n 6= n0
genügen nicht, da es beliebig große Zn (sogar Körper, wenn n Primzahl) gibt.
Auch rekursive Definitionen von Addition und Multiplikation gelten in Zn .
Deshalb: Definition der <-Ordnung (endlich viele Axiome). Irreflexivität
impliziert i < j → i 6= j, somit sind die Elemente dann alle verschieden.
Damit < exakt die richtige Ordnung ist, muß gelten:
1. Für 0 ≤ m < n: (a) |= 0 +1m < 0 +1n und (b) |= ¬0 +1n < 0 +1m
2. Für 0 ≤ m < n: (a) |= 0 −1n < 0 −1m und (b) |= ¬0 −1m < 0 −1n
3. Für 0 ≤ m, 0 < n: (a) |= 0 −1m < 0 +1n und (b) |= ¬0 +1m < 0 −1n .
4. Für 0 ≤ n: |= ¬0 +1n < 0 +1n , |= ¬0 −1n < 0 −1n .
A. Knapp, G. Schellhorn: Formale Methoden
254
Spezifikation der ganzen Zahlen (4)
Reduktion der Fälle: Mit den Axiomen
irrefl: ¬i < i
trans: i < j ∧ j < k → i < k
läßt sich Fall (4) beweisen, und Fall (1b) kann auf Fall (1a) (und analog (2b)/(3b)
auf (2a)/(3a)) reduziert werden:
Zu zeigen ist: Wenn 0 ≤ m < n, dann |= ¬0 +1n < 0 +1m .
I
Wegen (1a): |= 0 +1m < 0 +1n .
I
Nach Transitivität: |= i < j ∧ j < i → i < i
I
Zusammen mit Irreflexivität und Aussagenlogik also: |= i < j → ¬j < i
I
Zusammen mit (1a) also: |= ¬0 +1n < 0 +1m .
A. Knapp, G. Schellhorn: Formale Methoden
255
Spezifikation der ganzen Zahlen (5)
Weitere Reduktion: (2a) kann auf (1a) reduziert werden mit dem Axiom
remsucc: i < j ↔ i +1 < j +1
Es gilt auch (durch Einsetzen von i0 = i −1, j0 = j −1 und predsucc)
rempred: i −1 < j −1 ↔ i < j
Denn: Sei 0 ≤ m < n.
Mit (1a): |= 0 +1m < 0 +1n
Mit rempred m + n mal: |= 0 +1m −1m+n < 0 +1n −1m+n
Mit succpred m + n mal: |= 0 −1n < 0 −1m
Analog: (3a) kann auf (1a) reduziert werden.
A. Knapp, G. Schellhorn: Formale Methoden
256
Spezifikation der ganzen Zahlen (6)
Es bleibt also, Axiome zu finden, so daß Fall (1a): |= 0 +1m < 0 +1n für
0 ≤ m < n gilt.
Axiom wie bei natürlichen Zahlen:
less-recsucc: i < j +1 ↔ i < j ∨ i = j
Aus dem Axiom folgt speziell (für i = j):
less-succ: i < i +1
Damit 0 < 0 +1, 0 +1 < 0 +1 +1, . . . . Mit Transitivität folgt die Behauptung
(exakter Beweis: Induktion über Konstruktorenzahl wie vorher).
Ähnliches Problem wie bei der from-Funktion: less-succ genügt für
Monomorphie, aber ¬∃i . 0 < i < 0 +1 ist wegen des schwachen
Induktionsprinzips wohl nur mit less-recsucc beweisbar.
A. Knapp, G. Schellhorn: Formale Methoden
257
Spezifikation der ganzen Zahlen: Zusammenfassung
Integer = specification
sorts int;
constants 0 : int;
functions . +1 : int → int;
. −1 : int → int;
. + . : int × int → int;
predicates . < . : int × int;
induction int generated by 0, +1, −1;
variables i, j : int;
axioms i +1 −1 = i;
i −1 +1 = i;
¬ i < i;
i < j ∧ j < k → i < k;
i < j ↔ i +1 < j +1;
i < j +1 ↔ i < j ∨ i = j;
i + 0 = i;
i + (j +1) = (i + j) +1;
i + (j −1) = (i + j) −1;
end specification
A. Knapp, G. Schellhorn: Formale Methoden
258
Resolution und Skolemisierung
Aussagenlogik
I
Konjunktive Normalform
I
Klauseln
I
darauf basierend SAT-Beweiser
Prädikatenlogik
I
Pränex-Normalform mit konjunktiver Normalform
Q1 x1 . Q2 x2 . . . . . Qn xn .
V W
i
j Li,j
Jedes Li,j ist Literal (also evtl. negierte Gleichung oder Prädikat)
I
Skolemisierung: Beseitigung von Existenzquantoren
I
damit: Klauseln
I
darauf basierend Resolutions-Beweiser
A. Knapp, G. Schellhorn: Formale Methoden
259
Skolemisierung (1)
Satz
Sei ψ = ∀~x . ∃y . ϕ(~x, y) eine geschlossene Formel über Σ = (S, F, P)
mit ~s den Sorten von ~x und s0 die Sorte von y. Sei f : ~s → s0 ein neues
Funktionssymbol, das nicht in F vorkommt, und χ = ∀~x . ϕ(~x, f (~x)). Dann gilt: ψ
hat genau dann ein Modell über Σ, wenn χ ein Modell über (S, F ∪ {f }, P) hat.
Der Satz gestattet es, in der Pränexnormalform den äußersten Existenzquantor
zu beseitigen. Iteration beseitigt alle Existenzquantoren. Das ergibt die
Skolem-Normalform.
A. Knapp, G. Schellhorn: Formale Methoden
260
Skolemisierung (2)
Beweisskizze
⇒“: Wenn ψ ein Modell A hat, gibt es zu jeder Belegung ~a der
”
Variablen ~x eine Belegung b für y, sodaß ψ wahr wird. Also läßt sich das Modell zu A0
0
0
erweitern durch Definition einer Funktion f A , sodaß f A (~a) = b.
(Der Beweis verwendet das Auswahlaxiom der Mengenlehre: Ist M
S eine Menge
nichtleerer Mengen, dann gibt es eine Auswahlfunktion f : M → M mit f (M) ∈ M
für jedes M ∈ M. Hier: M Menge aller M~a = {b | FJϕ(~x, y)K A v{~x, y 7→ ~a, b} = tt}.)
⇐“: ϕ{y 7→ f (~x)} → ∃y . ϕ ist Tautologie.
”
A. Knapp, G. Schellhorn: Formale Methoden
261
Klauseln für Prädikatenlogik
Definition
Ein (prädikatenlogisches) Literal ist ein Prädikat, eine Gleichung
oder die Negation eines der beiden. Eine Klausel C = {L1 , . . . Ln } ist eine
Menge von Literalen; die Semantik der Klausel ist die Formel cl∀ (L1 ∨ . . . ∨ Ln ).
Eine Klauselmenge C = {C1 , . . . , Cm } ist eine endliche Menge von Klauseln;
V
Die Semantik der Klauselmenge ist die Formel 1≤i≤m Ci .
I
In einer Klausel sind die Variablen wie in einem Axiom implizit
allquantifiziert.
A. Knapp, G. Schellhorn: Formale Methoden
262
Transformation von Formeln in Klauseln
Satz
Zu jeder Formel ϕ gibt es eine Klauselmenge C (ϕ), sodaß ϕ genau
dann ein Modell hat, wenn C (ϕ) ein Modell hat.
Beweisskizze
I Bilde Pränexnormalform.
I Bringe Rumpf in konjunktive Normalform.
I Skolemisiere.
I Schiebe die übrigbleibenden Allquantoren über die Konjunktionen nach innen mit
(∀x . ψ ∧ χ) ↔ (∀x . ψ) ∧ (∀x . χ).
I Es ergibt sich eine Konjunktion von allquantifzierten Disjunktionen.
A. Knapp, G. Schellhorn: Formale Methoden
263
Klauseln und Beweise
Satz
Jedes Beweisproblem Ax |= ϕ mit endlicher Axiomenmenge läßt sich
in eine Klauselmenge C transformieren, sodaß Ax |= ϕ genau dann, wenn C
kein Modell hat.
Beweisskizze
⇔
⇔
Es gilt:
Ax |= ϕ
Ax ∪ {¬ cl∀ (ϕ)} hat kein Modell
S
{C (ψ) | ψ ∈ Ax ∪ {¬ cl∀ (ϕ)}} hat kein Modell
A. Knapp, G. Schellhorn: Formale Methoden
264
Resolutionskalkül für Prädikatenlogik
Resolutionskalkül
I
Berechne Klauselmenge zum Problem Ax |= ϕ.
I
Nehme inkrementell neue Klauseln hinzu.
I
Sobald die leere Klausel (entspricht ff ) hinzugenommen wird, hat die
Menge kein Modell, d. h. der Beweis war erfolgreich.
I
Wesentliche Regel zum Klauseln hinzunehmen: Resolution.
I
Schwierig: Gleichheit behandeln mit Paramodulation, Superposition
Beispiel
{p(x, g(z)), q(x, z)} {¬p(f(w), y), r(w, y)}
{q(f(w), z), r(w, g(z))}
A. Knapp, G. Schellhorn: Formale Methoden
265
Skolemisierung und Klauseln
Skolemisierung
I
Skolemisierung besagt: man kann auf Existenzquantoren verzichten,
Allquantoren implizit
I
Programmiersprachen verzichten auch auf Quantoren
I
Spezifikationssprache nur mit rekursiven Definitionen: ACL2
Klauseln
I
Eine Klausel der Form {P, ¬P1 , . . . , ¬Pn } heißt Hornklausel.
I Man schreibt sie auch P ← P ∧ . . . ∧ P
1
n
I
Algorithmus: Beweise P, indem P1 , . . . , Pn bewiesen wird.
I
Suchbaum für die Lösung, terminiert mit Fakten P ←.
I
Programmiersprache Prolog
A. Knapp, G. Schellhorn: Formale Methoden
266
Logiken höherer Stufe
I
Prädikatenlogik = Logik erster Stufe
I
schwache Logik 2. Stufe erlaubt Funktions- und Prädikatvariablen und
Quantoren darüber
I
volle Logik 2. Stufe (“second order logic”) erlaubt Funktionen als
Argumente von Funktionen (2. Stufe), z. B.
compose : (A → B) × (B → C) → (A → C)
I
Logik 3. Stufe hat Variablen und Quantoren für Funktionen mit Funktionen
als Argument etc.
I
Allgemeine Higher-Order-Logik (HOL) erlaubt beliebige Funktionen mit
beliebigen Typen.
A. Knapp, G. Schellhorn: Formale Methoden
267
HOL: Typen
Definition
Sei S eine Menge von Sorten mit bool ∈ S. Dann ist die Menge
der Typen T definiert durch
I
Für jede Sorte s ∈ S ist s ∈ T .
I
Wenn τ1 , . . . , τn , τ ∈ T , dann ist der Funktionstyp
τ1 × . . . × τn → τ ∈ T .
Eine Signatur Σ = (S, F) besteht aus Sorten S und typisierten Operationen
f : τ ∈ F.
A. Knapp, G. Schellhorn: Formale Methoden
268
HOL: Semantik von Typen
Definition
Sei Σ = (S, F) eine Signatur. Eine Σ-HOL-Algebra enthält für
jede Sorte s eine Trägermenge As und Abool = {ff , tt}. Die Standardsemantik
eines Funktionstyps τ1 × . . . × τn → τ ∈ T ist die Menge aller Funktionen
Aτ1 ×...×τn →τ = Aτ1 × . . . × Aτn → Aτ . Jede Operation f : τ ∈ F erhält als
Semantik ein f A ∈ Aτ .
Alternativen zur Standardsemantik
I
die Menge der durch einen Algorithmus berechenbaren Funktionen
I
die Menge der syntaktisch ausdrückbaren Funktionen, etc.
A. Knapp, G. Schellhorn: Formale Methoden
269
HOL: Ausdrücke
Definition
HOL-Ausdrücke e ∈ E (Σ, X)τ des Typs τ ∈ T über der Signatur
Σ und über den Variablen X = (Xτ )τ ∈T sind rekursiv gegeben durch
I
x ∈ Xτ ist ein Ausdruck des Typs τ .
I
f ∈ Fτ ist ein Ausdruck des Typs τ .
I
Sind e1 , . . . , en Ausdrücke der Typen τ1 , . . . , τn und ist e vom Typ
τ1 × . . . × τn → τ dann ist e(e1 , . . . , en ) ein Ausdruck des Typs τ .
I
Sind e1 , e2 vom Typ τ , so ist e1 = e2 ein Ausdruck des Typs bool.
I
Wenn e ein Ausdruck des Typs bool und x eine Variable ist, so sind ∀x . e
und ∃x . e Ausdrücke des Typs bool.
I
Sind e1 , e2 Ausdrücke des Typs τ und e ein Ausdruck des Typs bool, so ist
(e ⊃ e1 ; e2 ) ein Ausdruck der Sorte τ .
A. Knapp, G. Schellhorn: Formale Methoden
270
HOL: Semantik von Ausdrücken
Definition
Gegeben eine HOL-Algebra A und eine Belegung v. Dann ist die
Semantik EJeK A v eines Ausdrucks e des Typs τ das folgende Element aus Aτ :
I
EJxK A v = v(x) für x ∈ X
I
EJf K A v = f A für f ∈ F
I
I
EJe(e1 , . . . , en )K A v = (EJeK A v) (EJe1 K A v, . . . , EJen K A v)
EJe1 = e2 K A v = tt, falls EJe1 K A v = EJe2 K A v (sonst ff )
I
EJ∀x . eK A v = tt, falls, wenn x ∈ Xτ , für alle a ∈ Aτ gilt:
EJeK A v{x 7→ a} = tt (sonst ff )
I
EJ∃x . eK A v = tt, falls, wenn x ∈ Xτ , es ein a ∈ Aτ gibt mit
EJeK A v{x 7→ a} = tt (sonst ff )
I
EJ(e ⊃ e1 ; e2 )K A v: falls EJeK A v = tt, dann EJe1 K A v, sonst EJe2 K A v.
A. Knapp, G. Schellhorn: Formale Methoden
271
HOL: λ-Ausdrücke
I
HOL erlaubt die Definition von anonymen Funktionen:
λn . n + 2 ist die Funktion, die jedem n den Wert n + 2 zuordnet.
I
Allgemeine Definition:
Ist e ein Ausdruck des Typs τ und sind x1 , . . . , xn Variablen der Typen
τ1 , . . . , τn , so ist λx1 , . . . , xn . e eine Funktion vom Typ τ1 × . . . × τn → τ
I
Semantik: EJλ~x . eK A v ist die Funktion, die zu jedem ~a passenden Typs
als Ergebnis EJeK A v{~x 7→ ~a} berechnet.
A. Knapp, G. Schellhorn: Formale Methoden
272
HOL: Varianten und Vereinfachungen
I
Eine Funktion f : A × B → C ist äquivalent zu f : A → (B → C): Currying
I
Deshalb: Man kann auf mehrstellige Funktionen verzichten.
I
Quantoren können als Abkürzung aufgefaßt werden: ∀x . ϕ gilt genau
dann, wenn λx . ϕ = λx . true.
I
Notation: Wenn nur einstellige Funktionen: Schreibe f x statt f (x) wie in
funktionalen Programmiersprachen
I
Einstellige Funktionen mit Polymorphie (Generics in Java) z. B. in Isabelle
I
In KIV: nur mehrsortig, mehrstellige Funktionen, Parametrisierung statt
Polymorphie
A. Knapp, G. Schellhorn: Formale Methoden
273
HOL: Axiome
Die Erweiterung der Logik erfordert zusätzliche Axiome:
I
Extensionalität: f = g ↔ ∀x . f (x) = g(x)
I
I
I
I
realisiert als Regeln (expand left) und (expand right)
β -Reduktion: (λ~x . f )(~e) = f {~x 7→ ~e}
im Simplifier
Auswahlaxiom: (∀~x . ∃y . ϕ) → ∃f . ∀~x . ϕ{y 7→ f (~x)}
I
realisiert als Regeln (choice left), (choice right)
A. Knapp, G. Schellhorn: Formale Methoden
274
Eigenschaften von HOL
I
HOL-Kalkül ist (sehr) unvollständig, aber auch sehr ausdrucksstark
I
Mengenlehre (mit evtl. unendlichen Mengen!) läßt sich codieren: Statt
{x | ϕ(x)} charakteristische (boolesche) Funktion λx . ϕ(x)
I
Es gibt jetzt eine Formel für strukturelle Induktion mit Variable
P : nat → bool
∀P . (P(0) ∧ ∀n . P(n) → P(n+1)) → ∀n . P(n)
I
automatisches Beweisen wird wesentlich schwieriger
A. Knapp, G. Schellhorn: Formale Methoden
275
Existenz und Eindeutigkeit: Beispiele (1a)
Spezifikation der Ganzzahldivision x div y
Nat div : nat nat → nat, Ax
Alternativen für Axiome Ax
I
Ax1: y 6= 0 → (x div y = k ↔ k ∗ y ≤ x ∧ x < (k + 1) ∗ y)
I
I
Ohne y 6= 0 inkonsistent
Es gilt, daß ein passendes k immer existiert:
Nat |= ∀x, y . ∃k . y 6= 0 → k ∗ y ≤ x ∧ x < (k + 1) ∗ y
I
div ist die Skolemfunktion dieser Formel
I
Die entsprechende Formel mit Skolemfunktion eingesetzt ist:
Ax2: y 6= 0 → (x div y) ∗ y ≤ x ∧ x < ((x div y) + 1) ∗ y
I
Wegen Skolemisierung Anreicherung mit Ax2 hierarchiepersistent
A. Knapp, G. Schellhorn: Formale Methoden
276
Existenz und Eindeutigkeit: Beispiel (1b)
I
Ax2 ist äquivalent zu →“ in der Äquivalenz von Ax1
”
Die Rückrichtung ←“ in der Äquivalenz verlangt, daß k eindeutig ist.
”
I Gäbe es zwei verschiedene k, die Ax1 erfüllen, wäre die Spezifikation
inkonsistent.
I
I
Bei Ax2 ist die Spezifikation i. a. nicht eindeutig: Es gibt evtl. mehrere
Funktionen
I
k ist aber eindeutig, denn es gilt:
|= y 6= 0 ∧ k ∗ y ≤ x < (k + 1) ∗ y ∧ k0 ∗ y ≤ x < (k0 + 1) ∗ y → k = k0
I
Eindeutigkeit garantiert, daß auch die Anreicherung eindeutig ist.
I
Damit: Mit Ax1 zu spezifizieren, erfordert Nachweis der Existenz und der
Eindeutigkeit; mit Ax2 zu spezifizieren, erfordert nur Nachweis der
Existenz. Beide Axiome laufen ohne Beweise Gefahr, inkonsistent zu
werden.
A. Knapp, G. Schellhorn: Formale Methoden
277
Spezifikation über Existenz und Eindeutigkeit
Satz
Sei ϕ(~x, y) eine Formel mit freien Variablen ~x der Sorten ~s und y der
0
Sorte s über einer Spezifikation Sp. Außerdem sei
exists = ∀~x . ∃y . ϕ(~x, y)
unique = ∀~x, y, z . ϕ(~x, y) ∧ ϕ(~x, z) → y = z
Sp0 = Sp f : ~s → s0 , f (~x) = y ↔ ϕ(~x, y)
Sp00 = Sp f : ~s → s0 , ϕ(~x, f (~x))
Dann gilt:
I
Wenn Sp 6|= exists, dann sind Sp0 und Sp00 inkonsistent.
I
Wenn Sp |= exists, dann ist Sp00 hierarchiepersistent.
I
Wenn Sp |= unique, dann sind Sp0 und Sp00 eindeutig.
I
Wenn Sp 6|= unique, ist Sp0 inkonsistent (aber nicht notwendig Sp00 ).
I
Wenn Sp |= exists und Sp |= unique, sind Sp0 und Sp00 äquivalent.
A. Knapp, G. Schellhorn: Formale Methoden
278
Existenz und Eindeutigkeit: Beispiele (2)
Spezifikation von .last und .butlast mit
last-butlast: x 6= [] → x.butlast + x.last = x
I
Beweisbar ist: ∀x . ∃a . ∃y . x 6= [] → y + a = x
I
Mit vorigem Satz ist Hinzunahme von .last mit Axiom
onlylast: ∀x . ∃y . x 6= [] → y + x.last = x
hierarchiepersistent
I
Dieses Axiom hat wieder die Form ∀x . ∃y . . . .; also ist die Hinzunahme
von last-butlast hierarchiepersistent
I
onlylast folgt aus last-butlast
I
.last und .butlast sind eindeutig spezifiziert, weil
∀x . x 6= [] ∧ y + a = x ∧ y0 + a0 = x → y = y0 ∧ a = a0 gilt.
A. Knapp, G. Schellhorn: Formale Methoden
279
Existenz und Eindeutigkeit: Beispiele (1c)
Ganzzahldivision mit Existenz und Eindeutigkeit zu definieren, erfordert
Beweise.
Rekursive Ansätze
I
Versuch 1: strukturell über y
I x div 0 wird nicht spezifiziert.
I Welches ϕ in x div (y +1) = ϕ(x div y) wählen?
I
Versuch 2: strukturell über x
I div-base: y 6= 0 → 0 div y = 0
I Welches ϕ für div-rec: y 6= 0 → x +1 div y = ϕ(x div y) wählen?
I Es geht mit ϕ(z) = (x mod y = y −1 ⊃ z +1; z)
I
Einfachere, implementierungsnahe rekursive Definition
div-base: x < y → x div y = 0
div-rec: y 6= 0 ∧ x ≥ y → x div y = (x − y) div y +1
I
Korrektheit? Korrekt für y = 0? Eindeutigkeit?
A. Knapp, G. Schellhorn: Formale Methoden
280
Existenz und Eindeutigkeit: Beispiele (3)
Löschen aus Multimengen
I
Axiome zum Löschen aller Vorkommen (delall) aus Multisets mit Hilfe des
Löschens eines Vorkommens (delone)
¬a ∈ s → delall(s, a) = s
a ∈ s → delall(s, a) = delall(delone(s, a), a)
I
implementierungsnah
I
Sinnvolle Definition?
A. Knapp, G. Schellhorn: Formale Methoden
281
Allgemeine rekursive Definition
Definition
Eine allgemeine rekursive Definition für ein f ist gegeben durch
eine Menge von Axiomen der Form ϕ → f (~x) = t, wobei sich die
Vorbedingungen ϕ gegenseitig ausschließen und f nicht enthalten, und in ϕ
und t nur die freien Variablen ~x vorkommen.
Wenn die Formeln ϕ alle Fälle abdecken, so heißt die Definition vollständig.
I
In t dürfen (ein oder mehrere) rekursive Aufrufe f (~t0 ) vorkommen.
I
Vollständige Definitionen kann man durch Verwendung des
“if-then-else”-Operators ⊃ immer in der Form f (~x) = t schreiben.
A. Knapp, G. Schellhorn: Formale Methoden
282
Rekursion und Nichtterminierung (1)
Ein rekursives Programm liefert immer eine eindeutige partielle Funktion (bei
Nichterminierung undefiniert). In Logik wird eine totale Funktion erzwungen. Die
Spezifikation kann dann uneindeutig oder auch inkonsistent sein.
Beispiele
I
f(n) = f(n): Programm terminiert nicht, spezifiziert wird eine beliebige
Funktion
I
f(n) = f(n +1) (über den natürlichen Zahlen): Programm terminiert nicht,
spezifiziert wird eine konstante Funktion
I
f(n) = f(n) +1: Programm terminiert nicht, Spezifikation ist inkonsistent
I
leq(i, j) ↔ i = j ∨ leq(i, j −1) (über den ganzen Zahlen): terminiert genau
für i ≤ j (und liefert true), Spezifikation hat auch: leq(i, j) gilt für alle i, j als
Modell.
A. Knapp, G. Schellhorn: Formale Methoden
283
Rekursion und Nichtterminierung (2)
Wenn die Rekursion nicht terminiert, ergibt sich in der Spezifikation Beliebiges.
Wir zeigen: Wenn die Rekursion immer terminiert, dann ergibt sich eine
eindeutig spezifizierte Funktion. Diese ist dann auch das Ergebnis der
Rekursion.
Sicherstellung der Termination
Definiere Relation x~0 ≺ ~x durch f (x~0 ) ist rekursiver Aufruf in f (~x)“.
”
I Zeige, daß die Argumente abnehmen, und das nicht unendlich oft können.
I
I
Nachweis, daß ≺ eine noethersche Relation ist.
A. Knapp, G. Schellhorn: Formale Methoden
284
Noethersche Relationen
Definition
Sei A eine Menge und ≺ ⊆ A × A. Die Relation ≺ heißt
noethersch (oder wohlfundiert, engl. well-founded), wenn es keine unendlichen
≺-Ketten der Form . . . ≺ a3 ≺ a2 ≺ a1 ≺ a0 in A gibt.
Beispiele und Gegenbeispiele:
I
< auf N ist noethersch.
I
⊂ auf endlichen Mengen ist noethersch (aber nicht ⊆).
I
x y definiert durch length(x) < length(y) auf Listen ist noethersch.
I
< auf Z ist nicht noethersch.
A. Knapp, G. Schellhorn: Formale Methoden
285
Noethersche Relationen: Beispiele (1)
Satz
Ordnungsprädikate aus Datendefinitionen sind noethersch.
Beweisskizze t ≺ t0 bedeutet, daß t weniger Konstruktoren als t0 hat. Also kann eine
Kette, die bei t beginnt, nur Anzahl der Konstruktoren von t lang sein.
I
insbesondere < für Nat noethersch
Satz
Sei für einen Datentyp D eine Größenfunktion # : D → N gegeben.
Dann ist d ≺ d0 definiert durch #(d) < #(d0 ) eine noethersche Relation.
Beweisskizze Eine unendliche Kette . . . ≺ d2 ≺ d1 ≺ d0 ergäbe auch eine
unendliche Kette . . . < #(d2 ) < #(d1 ) < #(d0 ).
I
Insbesondere für Größenfunktionen length für Listen, Kardinalität für
Mengen, die size functions in Datendefinitionen
I
Fast alle Terminerungsbeweise funktionieren mit einer Größenfunktion.
A. Knapp, G. Schellhorn: Formale Methoden
286
Noethersche Relationen: Beispiele (2)
Satz
Sind A und B Mengen und ≺1 ⊆ A × A und ≺2 ⊆ B × B noethersch,
so ist auch die lexikalische Kombination ≺ ⊆ (A × B) × (A × B) von ≺1 und
≺2 mit
(a, b) ≺ (a0 , b0 ) gdw. a ≺1 a0 ∨ (a = a0 ∧ b ≺2 b0 )
noethersch.
Beweisskizze
Angenommen es gäbe eine Kette . . . ≺ (a2 , b2 ) ≺ (a1 , b1 ) ≺ (a0 , b0 ).
I Dann nimmt ai nach Definition in jedem Schritt (bzgl.
I
≺1 ) ab oder bleibt gleich.
ai kann nicht unendlich oft abnehmen, da ≺1 noethersch ist. Also wird ai
irgendwann konstant.
I Ab dieser Stelle nimmt bi unendlich oft ab, im Widerspruch zur Voraussetzung,
daß ≺2 noethersch ist.
A. Knapp, G. Schellhorn: Formale Methoden
287
Noethersche Relationen und partielle Ordnungen
Satz
Sei ≺ ⊆ A × A eine noethersche Relation.
I
≺ ist irreflexiv.
I
Ist ≺0 ⊆ ≺, so ist ≺0 noethersch.
I
Die transitive Hülle ≺+ ist noethersch und eine partielle Ordnung.
I
Insbesondere kann man bei noetherschen Relationen immer Transitivität
fordern.
A. Knapp, G. Schellhorn: Formale Methoden
288
Noethersche Relationen und Rekursion
Für eine allgemeine rekursive Definition von f definiere man ein Prädikat
x~0 ≺ ~x, das genau dann zutrifft, wenn
I
es einen Fall ϕ → f (~x) = t gibt
I
ϕ gilt und x~0 = ~t0 für einen rekursiven Aufruf f (~t0 ) in t.
Dann: Rekursion terminiert immer, genau dann, wenn ≺ noethersch.
Beispiel: Ganzzahldivision
I
I
Axiom: y 6= 0 ∧ x ≥ y → x div y = (x − y) div y +1
Zugehörige Relation:
(x0 , y0 ) ≺ (x, y) ↔ y 6= 0 ∧ x ≥ y ∧ x0 = x − y ∧ y0 = y.
I
Es gilt offenbar: (x0 , y0 ) ≺ (x, y) → x0 < x
I
Damit ist nach dem vorigem Satz ≺ noethersch.
Allgemein: Man zeige für eine bekannte noethersche Relation, daß die
Argumente im rekursiven Aufruf abgenommen haben.
A. Knapp, G. Schellhorn: Formale Methoden
289
Wohlfundierte Rekursion
Satz
Sei ≺ eine noethersche Relation, und sei eine vollständige allgemein
rekursive Definition mit Axiomen ϕ → f (~x) = t gegeben. Dann gibt es zu jedem
Ausdruck e(~x), der f nicht enthält, immer genau eine totale Funktion f , die die
folgenden abgeänderten Axiome erfüllt: ϕ → f (~x) = t{f 7→ f 0 }, wobei
f 0 (~y) = (~y ≺ ~x ⊃ f (~y); e(~y)).
Ohne Beweis
I
Für fixe Stelligkeit im Kalkül beweisbar.
I
Intuition: Die Rekursion wird abgebrochen (und irgendein e(~y) als
Ergebnis genommen), wenn die Argumente nicht kleiner geworden sind.
I
Für unvollständige Definitionen gilt, daß es zu jeder Ergänzung zu einer
vollständigen Definition eine Funktion gibt, die Definition also nicht mehr
eindeutig ist.
A. Knapp, G. Schellhorn: Formale Methoden
290
Wohlfundierte Rekursion: Beispiele
Ganzzahldivision
I
Originalaxiom: y 6= 0 ∧ x ≥ y → x div y = (x − y) div y +1
I
Modifiziertes Axiom (mit < ⊆ N × N als noetherscher Ordnung):
y 6= 0 ∧ x ≥ y → x div y = (x − y < x ⊃ (x − y) div y +1; e(x, y))
I
Äquivalent zum Originalaxiom, da der “else”-Fall nie verwendet wird.
Löschen aus einer Multimenge
I
Originalaxiom: a ∈ s → delall(s, a) = delall(delone(s, a), a)
I
Modifiziertes Axiom (für Größe der Multimenge):
a ∈ s → delall(s, a) = delall(#delone(s, a) < #s ⊃
delall(delone(s, a), a); e(s, a))
I
Äquivalent zum Original, da a ∈ s → #delone(s, a) < #s beweisbar ist.
Man kann allgemeine rekursive Definitionen auch nur dann erlauben, wenn ein ≺
angegeben wird und die Äquivalenz von Original und modifiziertem Axiom gezeigt
werden kann (als Option z. B. in Isabelle).
A. Knapp, G. Schellhorn: Formale Methoden
291
Charakterisierung noetherscher Relationen
Satz
Eine Relation ≺ ⊆ A × A ist genau dann noethersch, wenn jede
nicht-leere Menge M ⊆ A ein ≺-minimales Element besitzt, es also ein
Element a ∈ M gibt, zu dem kein b ∈ M mit b ≺ a existiert.
Beweisskizze
⇒“: Angenommen es gibt eine Menge M ohne ≺-minimales Element.
”
I Wähle ein erstes Element a0
I Da es kein
∈ M (existiert, da M 6= ∅).
≺-minimales Element in M ist, gibt es ein a1 ∈ M mit a1 ≺ a0 .
I Zu a1 gibt es weiteres Element a2
∈ M mit a2 ≺ a1 usw.
I Nach dem Auswahlaxiom kann man also eine unendliche absteigende Kette
konstruieren.
⇐“: Eine unendliche ≺-Kette als Menge {. . . , a1 , a0 } ist eine nicht-leere Menge ohne
≺-minimales Element.
”
A. Knapp, G. Schellhorn: Formale Methoden
292
Noethersche Relationen in Logik
Satz
Sei ≺ ein zweistelliges Prädikatsymbol. Es gibt keine
prädikatenlogische Formel ϕ (in der ≺ vorkommt), sodaß gilt: A |= ϕ genau
dann, wenn ≺A eine noethersche Relation ist.
Falls es ein ϕ gäbe, betrachte man die Formelmenge
{. . . , c2 ≺ c1 , c1 ≺ c0 , ϕ} mit neuen Konstanten c0 , c1 , . . .. Die ganze Menge hat kein
Beweisskizze
Modell, aber jede endliche Teilmenge hat ein Modell, im Widerspruch zum
Endlichkeitssatz.
I
In Higher-Order-Logik läßt sich eine solche Formel angeben
wf(≺) ↔ ∀P . (∃x . P(x)) → ∃y . P(y) ∧ ¬∃z . z ≺ y ∧ P(z)
I
Prädikat P für Menge, ∃x . P(x) bedeutet, daß die Menge nicht leer ist, y ist
ein ≺-minimales Element
A. Knapp, G. Schellhorn: Formale Methoden
293
Noethersche Induktion
Eine Relation ≺ ⊆ A × A is noethersch genau dann, wenn für jedes
P ⊆ A gilt: Wenn für jedes a ∈ A aus der Gültigkeit von P(a0 ) für alle Elemente
a0 ≺ a die Gültigkeit von P(a) gefolgert werden kann, so gilt P für alle Elemente
von A:
Satz
∀a . (∀a0 . (a0 ≺ a → P(a0 )) → P(a)) → ∀b . P(b)
Beweisskizze
⇒“: Sei ≺ noethersch und der Vordersatz richtig, es gebe aber ein b
”
für das P(b) falsch ist. Dann ist die Menge aller b, für die P(b) falsch ist, nicht leer und
hat damit ein ≺-minimales Element a. Für alle Elemente a0 ≺ a ist P(a0 ) dann richtig,
und also nach dem Vordersatz auch P(a), im Widerspruch zur Annahme.
⇐“: Angenommen M ist eine nicht-leere Menge, die kein ≺-minimales Element hat.
”
Setze P(b) zu b ∈
/ M . Falls für ein a alle a0 ≺ a nicht in M sind, so kann auch a nicht in
M sein, sonst wäre es ein ≺-minimales Element von M . Aus der Implikation folgt also:
kein Element ist in M , im Widerspruch zur Annahme.
A. Knapp, G. Schellhorn: Formale Methoden
294
Noethersche Induktionsregel
Definition
Sei ~y = fvar(Γ ⇒ ∆) \ {x} und ≺ noethersch. Dann ist die
noethersche Induktionsregel über x gegeben durch
(Ind≺)
∀~y . ∀x0 . x0 ≺ x → (
V
Γ→
W
∆){x 7→ x0 }, Γ ⇒ ∆
Γ⇒∆
Beispiele
I
Natürliche Zahlen:
I
Listen:
∀n0 . n0 < n → ϕ(n0 ) ⇒ ϕ(n)
⇒ ϕ(n)
∀l0 . (l0 l) → ϕ(l0 ) ⇒ ϕ(l)
⇒ ϕ(l)
A. Knapp, G. Schellhorn: Formale Methoden
295
Noethersche Induktion in KIV (1)
I
In KIV ist die Regel (induction) mit den vordefinierten Ordnungsprädikaten
(pro Sorte eines) und den Größenfunktionen anwendbar.
I
Größenfunktionen für nichtfreie Datentypen kann man mit Unit – Add
”
HeuristicInfo“ hinzufügen.
Die Induktionshypothese wird in KIV als Ind-Hyp“ abgekürzt angezeigt.
”
I Goal-Again with Ind-Hyp“ zeigt die Induktionshypothese an.
”
I Anwendung der Induktionshypothese mit (apply induction) (statt (all left)).
I
A. Knapp, G. Schellhorn: Formale Methoden
296
Noethersche Induktion in KIV (2)
I
Strukturelle Induktion für strukturell rekursiv definierte Funktionen
I
Analog: Noethersche Induktion für wohlfundiert allgemein rekursiv
definierte Funktionen
I
Typischer Beweis: Induktion — Definition anwenden —
Induktionshypothese anwenden
I
Allerdings: Im Gegensatz zu struktureller Induktion kann die Definition
nicht als Rewriteregel angewandt werden. Für echte Programme gibt es
daher die KIV-Heuristik einmal Definition anwenden“.
”
A. Knapp, G. Schellhorn: Formale Methoden
297
Zusammenfassung
I
Strukturierte Spezifikationen
I
I
Anreicherung, Vereinigung, Umbenennung
Hierarchiepersistenz, Eindeutigkeit
I
Generische Spezfikationen
I
Nichtfreie Datentypen
I
Nichtrekursive, rekursive und allgemein rekursive Definitionen
I
Noethersche Relationen, noethersche Induktion
I
Resolution
I
Higher-Order-Logik
A. Knapp, G. Schellhorn: Formale Methoden
298
Deduktion über Programme (1)
Alternative 1: Definition der Semantik von Programmen als Funktion auf einer
Datenstruktur: J−K : Program → SemanticValue
Vorteile:
I
Formale Definition und Beweise über die Semantik möglich: Korrektheit
der Typisierung, korrekte Compilation, etc.
I
Keine Änderung der Logik
Nachteile:
I
Kalkül für Programme muß reduziert werden auf Prädikatenlogik;
aufwendig, ineffizient
I
Syntax der Programme (Parsing) exakt zu imitieren erfordert sehr viel
Flexibilität
I
Programmvariablen nicht Variablen der Logik; man erbt keine Typisierung
I
allerdings nutzt das nichts, wenn die Typen der Logik nicht den Typen der
Programmiersprache entsprechen
A. Knapp, G. Schellhorn: Formale Methoden
299
Deduktion über Programme (2)
Alternative 2: Erweiterung der Logik
I
Programmvariablen sind Variablen der Logik.
I
Ein Zustand eines Programms ist eine Belegung der Logik.
I
Abstrakte Programme, die über abstrakte Datentypen (auch solche, die
nicht direkt schon in einer Programmiersprache vorhanden sind) und
abstrakte Konzepte reden, ohne schon mit allen Details von Programmen
belastet“ zu sein.
”
A. Knapp, G. Schellhorn: Formale Methoden
300
Programme: Syntax
Definition
Die Menge der Programme p ∈ P(Σ, X) besteht aus
I
Sofortige Termination: skip
I
Nichtterminierung: abort
I
Parallele Zuweisung: x1 := t1 , x2 := t2 , . . ., xn := tn
I mit Variablen x ∈ X , Termen t ∈ T (Σ, X)
i
i
I kurz: ~
x := ~t
I
Sequentielle Komposition: p1 ; p2
I
Fallunterscheidung: if b then p1 else p2
I b ist (normalerweise) quantorenfreie Formel aus F (Σ, X)
I Abkürzung: if b then p für if b then p else skip
I
Schleife: while b do p
I
In konkreter Syntax Blöcke begin p end für eindeutige Klammerung.
A. Knapp, G. Schellhorn: Formale Methoden
301
Programme: Zustände
Für eine Σ-Algebra A betrachtet man die Menge
SA = {v | v :
S
s∈S Xs
→ As }
der Variablenbelegungen.
I
Im folgenden meist nur S (ohne Index), wenn Algebra A klar.
I
Eine Variablenbelegung aus S kann man als einen Zustand eines
Programms ansehen.
I
Einfachster Fall eines Zustands; genügt für abstrakte Programme.
I
Für komplexere Programme allgemeiner: Ein Zustand enthält eine
Variablenbelegung.
A. Knapp, G. Schellhorn: Formale Methoden
302
Programmsemantik: Ein-/Ausgabe-Verhalten
Für die Definition einer Semantik von Programmen oder auch anderen
Spezifikations- und Programmierkonstrukten hat man immer zwei
Möglichkeiten, je nachdem welche Eigenschaften interessant sind.
Alternative 1: Beschreibung des Effekts, d. h. des Ein- Ausgabeverhaltens eines
Programms oder Ausdrucks
I
I
Big-step Semantik: JpK(input) = output
genügt für den Korrektheitsnachweis von Kalkülen für sequentielle
Programme
I
auch relevant für funktionale und sequentielle objektorientierte Programme
und Ausdrücke
I
auch verwendet für die Definition von Logik
A. Knapp, G. Schellhorn: Formale Methoden
303
Programmsemantik: Abläufe
Alternative 2: Berücksichtigung von Zwischenzuständen
I
Explizite Trace-Semantik (Menge von Abläufen) oder implizite small-step
Semantik (Schritte von (p, v) nach (p0 , v0 ); die Abläufe ergeben sich
generisch)
I
feingranularer und maschinennäher als Alternative 1
I
relevant für Compilerbau: jeder Schritt wird durch Maschineninstruktionen
implementiert
I
relevant für parallele Systeme (z. B. Threads, Statecharts)
I
relevant für die Modellierung von allen Systemen, die evtl. endlos laufen
(z. B. Betriebssysteme, eingebettete Systeme etc.)
I
notwendig als Semantik für Kalküle, die über die Zwischenzustände reden
(Temporallogik: es gilt ständig ϕ“, es gilt immer wieder ϕ“)
”
”
A. Knapp, G. Schellhorn: Formale Methoden
304
Programme: Relationale Semantik (1)
Ein Programm überführt einen Anfangszustand in einen Endzustand:
JpK : S → S
Probleme mit dieser Semantik:
I
Was ist die Semantik von abort?
I Addiere ⊥ mit der Bedeutung terminiert nicht“: JpK : S → S ∪ {⊥}
”
I
Wie auf indeterministische Programme erweitern?
I
nicht nur ein Ergebnis, sondern potentiell mehrere
A. Knapp, G. Schellhorn: Formale Methoden
305
Programme: Relationale Semantik (2)
Deshalb: Relationale Semantik
RJpK ⊆ S × S
I
(v, v0 ) ∈ RJpK bedeutet: Zustand v wird von p in v0 überführt
I
Wenn zu v kein v0 mit (v, v0 ) ∈ RJpK vorhanden ist: s terminiert nicht,
wenn in v gestartet
I
Wenn {(v, v0 ), (v, v00 )} ⊆ RJpK, so ist das Programm mit v gestartet
indeterministisch mit zwei möglichen Endzuständen: v0 und v00
I
Derzeit betrachtete Programme sind deterministisch: zu jedem v
höchstens ein v0
A. Knapp, G. Schellhorn: Formale Methoden
306
Programme: Relationale Semantik (3)
Die relationale Semantik RJpK A eines Programmes
p ∈ P(Σ, X) bzgl. der Algebra A ∈ Alg(Σ) ist rekursiv gegeben durch
Definition
RJabortK A = ∅
RJskipK A = {(v, v) | v ∈ SA }
RJ~x := ~tK A = {(v, w) | w = v{~x 7→ T J~tK A v}}
RJp1 ; p2 K A = {(u, w) | ∃v . (u, v) ∈ RJp1 K A ∧ (v, w) ∈ RJp2 K A}
RJif b then p1 else p2 K A =
{(v, w) | (A, v |= b ∧ (v, w) ∈ RJp1 K A) ∨
(A, v |= ¬b ∧ (v, w) ∈ RJp2 K A)}
RJwhile b do pK A =
S
n
n∈N RJ(if b then p else abort) ; if b then abortK A
wobei pn = p ; ...; p
|
{z
n mal
(formal p0 = skip, pn+1 = p ; pn )
}
A. Knapp, G. Schellhorn: Formale Methoden
307
Korrektheitsbegriffe für Programme
Partielle Korrektheit: {ϕ} p {ψ}
I
Falls zu Beginn ϕ gilt und p terminiert,
I
dann gilt anschließend ψ .
Totale Korrektheit: [ϕ] p [ψ]
I
Falls zu Beginn ϕ gilt,
I
dann terminiert p und anschließend gilt ψ .
I
ϕ heißt Vorbedingung für das Programm p, ψ die Nachbedingung.
I
Die Angabe einer Vor- und Nachbedingung ist die Standardmethode, um
die Funktionalität einzelner Programme (Prozeduren, Methoden) zu
spezifizieren.
I
Vor- und Nachbedingung zusammen heißen oft Kontrakt.
A. Knapp, G. Schellhorn: Formale Methoden
308
Korrektheitsaussagen: Semantik
Definition
Sei p ∈ P(Σ, X), A ∈ Alg(Σ), ϕ, ψ ∈ F (Σ, X).
I
A |= {ϕ} p {ψ}, falls für jedes v ∈ SA mit A, v |= ϕ und jedes w ∈ SA
mit (v, w) ∈ RJpK A gilt: A, w |= ψ .
I
A |= [ϕ] p [ψ], falls es für jedes v ∈ SA mit A, v |= ϕ ein w ∈ SA gibt mit
(v, w) ∈ RJpK A und A, w |= ψ .
A. Knapp, G. Schellhorn: Formale Methoden
309
Korrektheitsaussagen: Beispiele
Partielle Korrektheit
I
|= {true} x := 2 {x = 2}
I
|= {x = 2} x := x + 1 {x = 3}
I
|= {x = y} x := x + 1 {x − 1 = y}
I
|= {x = a ∧ y = b} x := y, y := x {x = b ∧ y = a}
I
|= {x = 2} abort {x > 2}
Unterschied partielle und totale Korrektheit
I
|= {true} if y = 0 then abort else x := 1 {x = 1}
I
6|= [true] if y = 0 then abort else x := 1 [x = 1]
I
|= [y 6= 0] if y = 0 then abort else x := 1 [x = 1]
A. Knapp, G. Schellhorn: Formale Methoden
310
Hoare-Kalküle
I
Entwickelt von Robert W. Floyd (1967) und Charles A. R. Hoare (1969)
Sp `HP {ϕ} p {ψ}
Sp `HT [ϕ] p [ψ]
I
Kalküle HP, HT: Regeln zur Behandlung von Programmen zusammen mit
Regeln des Sequenzenkalküls
A. Knapp, G. Schellhorn: Formale Methoden
311
Hoare-Kalkül für partielle Korrektheit: Regeln (1)
(skiphp )
(aborthp )
(assignhp )
(seqhp )
{ϕ} skip {ϕ}
{ϕ} abort {ψ}
{ϕ{~x 7→ ~t}}~x := ~t {ϕ}
{ϕ} p1 {ψ}
{ψ} p2 {χ}
{ϕ} p1 ; p2 {χ}
A. Knapp, G. Schellhorn: Formale Methoden
312
Hoare-Kalkül für partielle Korrektheit: Regeln (2)
{ϕ ∧ b} p1 {ψ}
(ifhp )
{ϕ} if b then p1 else p2 {ψ}
(whilehp )
(conshp )
I
{ϕ ∧ ¬b} p2 {ψ}
{ϕ ∧ b} p {ϕ}
{ϕ} while b do p {ϕ ∧ ¬b}
{ϕ0 } p {ψ 0 }
{ϕ} p {ψ}
,
falls Sp `PL ϕ → ϕ0 , Sp `PL ψ 0 → ψ
In (whilehp ) ϕ Invariante
A. Knapp, G. Schellhorn: Formale Methoden
313
Hoare-Kalkül für partielle Korrektheit: Beweisabriß
Proof outline
I
Einfügung von Zusicherungen {ϕ} nach jeder Zeile eines Programms
I
eventuell Auslassung von (conshp )-Anwendungen
I
Insbesondere Angabe der Invariante
A. Knapp, G. Schellhorn: Formale Methoden
314
Hoare-Kalkül für partielle Korrektheit: Beispiel (1)
Beweisabriß
{x ≥ 0 ∧ y > 0}
ϕ1 : {x = 0 ∗ y + x ∧ x ≥ 0 ∧ y > 0}
d := 0;
ψ1 = ϕ2 : {x = d ∗ y + x ∧ x ≥ 0 ∧ x ≥ 0 ∧ y > 0}
r := x;
ψ2 = Inv: {x = d ∗ y + r ∧ r ≥ 0 ∧ x ≥ 0 ∧ y > 0}
while r ≥ y do begin
Inv ∧ r ≥ y: {x = d ∗ y + r ∧ r ≥ 0 ∧ x ≥ 0 ∧ y > 0 ∧ r ≥ y}
Inv{d 7→ d + 1}{r 7→ r − y}:
{x = (d + 1) ∗ y + (r − y) ∧ r − y ≥ 0 ∧ x ≥ 0 ∧ y > 0}
r := r − y;
Inv{d 7→ d + 1}: {x = (d + 1) ∗ y + r ∧ r ≥ 0 ∧ x ≥ 0 ∧ y > 0}
d := d + 1;
Inv: {x = d ∗ y + r ∧ r ≥ 0 ∧ x ≥ 0 ∧ y > 0}
end
Inv ∧ r < y: {x = d ∗ y + r ∧ r ≥ 0 ∧ x ≥ 0 ∧ y > 0 ∧ r < y}
{d = x div y}
A. Knapp, G. Schellhorn: Formale Methoden
315
Hoare-Kalkül für partielle Korrektheit: Beispiel (2)
{x ≥ 0 ∧ y > 0}
ϕ1
d := 0
ψ1
ϕ2
r := x
ψ2
Inv
Inv ∧ r < y
Inv
r≥y
{d = x div y}
Inv ∧ r ≥ y
Inv{d 7→ d + 1}{r 7→ r − y}
r := r − y
Inv{d 7→ d + 1}
d := d + 1
A. Knapp, G. Schellhorn: Formale Methoden
316
Hoare-Kalkül für partielle Korrektheit: Beispiel (3)
x ≥ 0∧y > 0
Inv{r 7→ x}{d 7→ 0}
d := 0
Inv{r 7→ x}
r := x
Inv ∧ r < y
d = x div y
r<y
Inv
r≥y
Inv ∧ r ≥ y
Inv{d 7→ d + 1}{r 7→ r − y}
d := d + 1
r := r − y
Inv{d 7→ d + 1}
A. Knapp, G. Schellhorn: Formale Methoden
317
Hoare-Kalkül für totale Korrektheit
HT wie HP (mit [−] statt {−}), nur Änderungen für abort und while wegen
möglicher Nichtterminierung.
Bedingung bei abort-Regel: Vorbedingung muß falsch sein:
(abortht )
[ϕ] abort [ψ],
falls `PL ¬ϕ
Bedingung bei while-Regel: Schleife darf nur endlich oft durchlaufen werden:
Benutze dazu noethersche Ordnung ≺ und einen Term t, der durch das
Programm bzgl. ≺ verkleinert wird, sowie eine Variable x ∈
/ var(p).
(whileht )
[ϕ ∧ b ∧ x = t] p [ϕ ∧ t ≺ x]
[ϕ] while b do p [ϕ ∧ ¬b]
A. Knapp, G. Schellhorn: Formale Methoden
318
Hoare-Kalkül für totale Korrektheit: Beispiel
Beweisabriß
[x ≥ 0 ∧ y > 0]
[x = 0 ∗ y + x ∧ x ≥ 0 ∧ y > 0]
d := 0;
[x = d ∗ y + x ∧ x ≥ 0 ∧ x ≥ 0 ∧ y > 0]
r := x;
[x = d ∗ y + r ∧ r ≥ 0 ∧ x ≥ 0 ∧ y > 0]
while r ≥ y do begin
[x = d ∗ y + r ∧ r ≥ 0 ∧ x ≥ 0 ∧ y > 0 ∧ r ≥ y ∧ a = r]
[x = (d + 1) ∗ y + (r − y) ∧ r − y ≥ 0 ∧ x ≥ 0 ∧ y > 0 ∧ r − y < a]
r := r − y;
[x = (d + 1) ∗ y + r ∧ r ≥ 0 ∧ x ≥ 0 ∧ y > 0 ∧ r < a]
d := d + 1;
[x = d ∗ y + r ∧ r ≥ 0 ∧ x ≥ 0 ∧ y > 0 ∧ r < a]
end
[x = d ∗ y + r ∧ r ≥ 0 ∧ x ≥ 0 ∧ y > 0 ∧ r < y]
[d = x div y]
A. Knapp, G. Schellhorn: Formale Methoden
319
Korrektheit der Hoare-Kalküle
Satz
gilt:
Die Hoare-Kalküle für partielle und totale Korrektheit sind korrekt. Es
Sp `HP {ϕ} p {ψ}
⇒
Sp |= {ϕ} p {ψ}
und
Sp `HT [ϕ] p [ψ]
⇒
Sp |= [ϕ] p [ψ]
Ohne Beweis
A. Knapp, G. Schellhorn: Formale Methoden
320
Unvollständigkeit des Hoare-Kalküls
Nat = data specification
nat = 0 | . +1 (. -1 : nat)
end data specification
{x = 0 ∧ y = y0 }
while y 6= 0 do begin
y := y -1;
x := x +1
end
{x = y0 }
Schleifeninvariante x + y = y0 keine Formel in Nat
I
selbes Problem wie bei Induktionshypothesen
A. Knapp, G. Schellhorn: Formale Methoden
321
Relative Vollständigkeit des Hoare-Kalküls
Satz
Die Hoare-Kalküle für partielle und totale Korrektheit sind
unvollständig.
Wenn die zugrundeliegende Spezifikation die Arithmetik mit (0, 1, +, ∗) enthält,
ist der Kalkül vollständig, wenn man annimmt, alle wahren Aussagen über
(0, 1, +, ∗) seien als Axiome vorhanden (relative Vollständigkeit).
Ohne Beweis (Stephen A. Cook 1978)
I
Die Unvollständigkeit liegt daran, daß eine Schleife wird endlich oft iteriert“
”
dieselbe Problematik wie die Generiertheitsklausel hat (jede natürliche
Zahl kann mit endlich vielen s-Aufrufen errreicht werden).
I
Die relative Vollständigkeit folgt daraus, daß man mit (0, 1, +, ∗) alle
Programme in arithmetische Formeln codieren kann.
A. Knapp, G. Schellhorn: Formale Methoden
322
Dynamische Logik
I
Modale Logik für Korrektheit von Programmen
I
Erweiterung der Formeln um Programme, Erweiterung des Kalküls für
neue Formeln
I
Entwickelt von Vaughan R. Pratt (1976)
I
I
basierend auf Andrzej Salwickis algorithmischer Logik (1970)
Bezeichnung dynamische Logik“ von David Harel (1977)
”
A. Knapp, G. Schellhorn: Formale Methoden
323
Dynamische Logik: Syntax (1)
Definition
Die Menge D(Σ, X) der Formeln der dynamischen Logik über
der Signatur Σ und der Variablenmenge X enthält
I
alle prädikatenlogischen Formeln F (Σ, X)
I
für p ∈ P(Σ, X) und ϕ ∈ D(Σ, X) auch [p]ϕ und hpiϕ.
Informelle Bedeutung
I
[p]ϕ: Wenn p terminiert, gilt anschließend ϕ“
I
hpiϕ: p hält, und anschließend gilt ϕ“
”
”
In KIV sind statt der prädikatenlogischen Formeln ϕ alle Higher-Order-Formeln
(boolesche Ausdrücke) zugelassen.
A. Knapp, G. Schellhorn: Formale Methoden
324
Einordnung der dynamischen Logik
I
Dynamische Logik ist eine (Multi-)Modallogik.
I
Für jedes Programm gibt es einen Modal-Operator 2 und einen
Modal-Operator ♦ (mit dem Programm in der “box” und dem “diamond”).
I
Modallogik mit Formeln 2ϕ und ♦ϕ stammen aus der philosophischen
Logik.
I Alethisch: Es ist notwendig, daß ϕ“, es ist möglich, daß ϕ“
”
”
I Epistemisch: Ich halte es für gewiß, daß ϕ“, ich halte es für möglich, daß ϕ“
”
”
I Deontisch: Es wird geboten, daß ϕ“, es ist erlaubt, daß ϕ“
”
”
I Temporal: ϕ gilt in der Zukunft immer“, ϕ gilt irgendwann in der Zukunft“
”
A. Knapp, G. Schellhorn: Formale Methoden
”
325
Dynamische Logik: Syntax (2)
I
Modal-Operatoren binden stärker als Junktoren:
[p]ϕ ∧ ψ bedeutet ([p]ϕ) ∧ ψ
I
Schachtelung möglich:
hp1 ihp2 iϕ bedeutet hp1 i(hp2 iϕ)
I
Auch gemischte Schachtelung: [p1 ](∀x . ϕ ∧ hp2 iψ)
I
Auch in dynamischer Logik betrachtet man Sequenzen, z. B.
hp1 iϕ, ψ ⇒ hp2 ihp1 iχ, ρ
A. Knapp, G. Schellhorn: Formale Methoden
326
Dynamische Logik: Semantik
Definition
Die Semantik von Formeln der dynamischen Logik ist definiert als
A, v |= [p]ϕ ⇐⇒ für alle w ∈ SA : wenn (v, w) ∈ RJpK A, dann A, w |= ϕ
A, v |= hpiϕ ⇐⇒ es gibt ein w ∈ SA mit (v, w) ∈ RJpK A und A, w |= ϕ
I
Es gilt: [p]ϕ ↔ ¬hpi¬ϕ
I
I
Man könnte also Box mit Hilfe von Diamond definieren.
Hoare-Tripel können als spezielle Formeln der dynamischen Logik
angesehen werden:
A, v |= {ϕ} p {ψ} ⇐⇒ A, v |= ϕ → [p]ψ
A, v |= [ϕ] p [ψ] ⇐⇒ A, v |= ϕ → hpiψ
A. Knapp, G. Schellhorn: Formale Methoden
327
Dynamische Logik als Verallgemeinerung der Hoare-Logiken
I
Wenn x in p vorkommt, x0 aber nicht, so besagt hpix = x0 : Am Ende von
”
p hat x den Wert, den x0 jetzt hat“.
I
hp1 ix = x0 → hp2 ix = x0 besagt: Wann immer p1 in x einen Wert x0
”
ausrechnet, so tut das auch p2“
I
Man kann in dynamischer Logik also über Programmähnlichkeit reden;
wichtig, wenn man von einer abstrakten Spezifikation (mit abstrakten
Programmen) zu konkreten übergehen will (Verfeinerung).
A. Knapp, G. Schellhorn: Formale Methoden
328
Dynamische Logik: Beispiele
I
|= [x := 1]x = 1
I
|= x = x0 → [x := x + 1]x = x0 + 1
I
|= x = x0 → hx := x + 1ix = x0 + 1
Unterschied Box und Diamond:
I
|= x = 5 → [abort]x = 5
I
6|= x = 5 → habortix = 5
In Sequenzen Programme auch im Antezedent:
I
|= x = x0 ⇒ [x := x + 1]x = x0 + 1
I
|= x > 0 ⇒ hwhile x > 1 do x := x − 1ix = 1
I
|= hif x > 0 then y := 1 else abortiy = y0 ⇒ y0 = 1 ∧ x > 0
I
|= [if x > 0 then y := 1 else abort]y = y0 ⇒
y0 = 1 ∧ x > 0 ∨ x = 0
A. Knapp, G. Schellhorn: Formale Methoden
329
Sequenzenkalkül DL für dynamische Logik
Symbolische Ausführung von Programmen
Ausführung des Programms
p1 ; p2 ; . . . ; pn
(pi ohne ; auf oberster Ebene)
I
Annahme: Initialer Zustand erfüllt Vorbedingung ϕ0 .
I
Berechne ϕ1 , die stärkste Formel, die nach p1 gilt;
I
berechne ϕ2 , die stärkste Formel, die nach p1 ; p2 gilt;
I
. . . solange, bis das Programm abgearbeitet ist.
I
Zum Schluß: Teste, ob ϕn die Nachbedingung impliziert (nur noch PL).
I
Gegenüber Hoare-Kalkül: Kein Raten von Zwischenformeln bzw.
Rückwärtsausführen, stattdessen Zuweisung vorwärts ausführen.
I
Symbolische Ausführung sowohl im Antezedent als auch im Sukzedent.
A. Knapp, G. Schellhorn: Formale Methoden
330
Sequenzenkalkül DL: Sequentielle Komposition
(L[;])
(Lh;i)
[p1 ][p2 ]ϕ, Γ ⇒ ∆
[p1 ; p2 ]ϕ, Γ ⇒ ∆
hp1 ihp2 iϕ, Γ ⇒ ∆
hp1 ; p2 iϕ, Γ ⇒ ∆
(R[;])
(Rh;i)
Γ ⇒ [p1 ][p2 ]ϕ, ∆
Γ ⇒ [p1 ; p2 ]ϕ, ∆
Γ ⇒ hp1 ihp2 iϕ, ∆
Γ ⇒ hp1 ; p2 iϕ, ∆
I
Normalisierung
I
In KIV: Nie explizit angewendet; die erste Anweisung wird bei jeder
Regelanwendung (in allen Programmformeln) immer automatisch
abgespalten; Programmformeln werden nach vorne rotiert.
A. Knapp, G. Schellhorn: Formale Methoden
331
Sequenzenkalkül DL: Zuweisung (1)
Originalregel im Hoare-Kalkül würde besagen:
Γ ⇒ ([p]ϕ){x 7→ t}, ∆
Γ ⇒ [x := t][p]ϕ, ∆
Aber ([p]ϕ){x 7→ t} kann nicht [p{x 7→ t}](ϕ{x 7→ t}) sein:
I
Für t = 3 und p = x := x + 1 ergäbe sich
([x := x + 1]x = 5){x 7→ 3} = [3 := 3 + 1]3 = 5
I
Die Substitution müßte den Effekt der Zuweisung in das Programm
hineinziehen“. Das geht für die Zuweisung hier (Resultat wäre x := 3 + 1
”
und die Nachbedingung bliebe x = 5), aber nicht für allgemeine
Programme (insbesondere Schleifen).
I
Substitution wird aber für Quantorenregeln (L∀), (R∃) gebraucht.
A. Knapp, G. Schellhorn: Formale Methoden
332
Dynamische Logik: Substitution und Umbenennung
Definition
Das Resultat einer Substitution in einer Programmformel ist
([p]ϕ){~x 7→ ~t} = [~x := ~t][p]ϕ
(hpiϕ){~x 7→ ~t} = h~x := ~tihpiϕ
Damit ist die Hoare-Regel für DL für eine Programmformel ϕ nicht verwendbar.
I
Bei (R∀), (L∃) werden Variablen in neue umbenannt; das geht auch für
Programmformeln.
Definition
Die in einem Programm p vorkommenden Variablen werden mit
var(p) bezeichnet.
Für eine Programmformel π = [p]ϕ oder π = hpiϕ ist die Menge der freien
Variablen fvar(π) gegeben durch var(p) ∪ fvar(ϕ).
A. Knapp, G. Schellhorn: Formale Methoden
333
Sequenzenkalkül DL: Zuweisung (2)
(L[:=]1 )
(R[:=]1 )
ϕ{~x 7→ ~t}, Γ ⇒ ∆
[~x := ~t]ϕ, Γ ⇒ ∆
Γ ⇒ ϕ{~x 7→ ~t}, ∆
Γ ⇒ [~x := ~t]ϕ, ∆
(L[:=]2 )
(R[:=]2 )
~y = ~t, [p{~x 7→ ~y}]ϕ{~x 7→ ~y}, Γ ⇒ ∆
[~x := ~t][p]ϕ, Γ ⇒ ∆
(1)
~y = ~t, Γ ⇒ [p{~x 7→ ~y}]ϕ{~x 7→ ~y}, ∆
Γ ⇒ [~x := ~t][p]ϕ, ∆
(1)
(1) ~y ∈
/ fvar([~x := ~t][p]ϕ) ∪ fvar(Γ) ∪ fvar(∆)
I
Analog: (Lh:=i1 ), (Lh:=i2 ), (Rh:=i1 ), (Rh:=i2 )
I
Neue Programmvariablen ~y bezeichnen die neuen Werte von ~x
I
In KIV: (assign left/right) kombinieren beide Regeln: Hoare-Regeln“
”
(L/R[:=]1 ), falls ϕ kein Programm enthält, sonst (L/R[:=]2 ).
A. Knapp, G. Schellhorn: Formale Methoden
334
Sequenzenkalkül DL: Fallunterscheidung
(L[if])
(R[if])
b, [p1 ]ϕ, Γ ⇒ ∆ ¬b, [p2 ]ϕ, Γ ⇒ ∆
[if b then p1 else p2 ]ϕ, Γ ⇒ ∆
Γ, b ⇒ [p1 ]ϕ, ∆ Γ, ¬b ⇒ [p2 ]ϕ, ∆
Γ ⇒ [if b then p1 else p2 ]ϕ, ∆
I
Analog: (Lhifi), (Rhifi),
I
KIV versucht immer die Tests zu entscheiden (per Simplifier), damit nur
eine Prämisse entsteht.
A. Knapp, G. Schellhorn: Formale Methoden
335
Sequenzenkalkül DL: Schleife
(R[while])
(Rhwhilei)
Γ ⇒ ψ, ∆ ψ, b ⇒ [p]ψ ψ, ¬b ⇒ ϕ
Γ ⇒ [while b do p]ϕ, ∆
Γ ⇒ ψ, ∆ ψ, b, x = t ⇒ hpi(ψ ∧ t ≺ x) ψ, ¬b ⇒ ϕ
Γ ⇒ hwhile b do piϕ, ∆
(2)
(2) x ∈
/ fvar([while b do p]ϕ)
I
Analog: (L[while]), (Lhwhilei)
I
In KIV: Die Schleifeninvariante ψ und die Schranke t müssen von Hand
eingegeben werden.
A. Knapp, G. Schellhorn: Formale Methoden
336
Sequenzenkalkül DL: (Nicht-)Termination
(L[abort])
(Lhaborti)
(L[skip])
(Lhskipi)
Γ⇒∆
[abort]ϕ, Γ ⇒ ∆
habortiϕ, Γ ⇒ ∆
ϕ, Γ ⇒ ∆
[skip]ϕ, Γ ⇒ ∆
ϕ, Γ ⇒ ∆
hskipiϕ, Γ ⇒ ∆
A. Knapp, G. Schellhorn: Formale Methoden
(R[abort])
(Rhaborti)
(R[skip])
(Rhskipi)
Γ ⇒ [abort]ϕ, ∆
Γ⇒∆
Γ ⇒ habortiϕ, ∆
Γ ⇒ ϕ, ∆
Γ ⇒ [skip]ϕ, ∆
Γ ⇒ ϕ, ∆
Γ ⇒ hskipiϕ, ∆
337
Lokale Variablen
Neues Programmkonstrukt let ~x = ~t in p für lokale Variablen
I
Variablen ~x duplikatfrei
Relationale Semantik
RJlet ~x = ~t in pK A =
{(v, v0 ) | ∃v00 . (v{~x 7→ T J~tK A v}, v00 ) ∈ RJpK A ∧
v0 = v00 {~x 7→ v(~x)}}
A. Knapp, G. Schellhorn: Formale Methoden
338
Lokale Variablen: Kalkülregeln
Der partielle (und genauso der totale) Hoare-Kalkül wird um die folgende Regel
erweitert (~y sind neue Variablen):
(lethp )
{~x = ~t{~x 7→ ~y} ∧ ϕ{~x 7→ ~y}} p {ψ{~x 7→ ~y}}
{ϕ} let ~x = ~t in p {ψ}
Für die Dynamische Logik erhält man (~y sind neue Variablen):
(L[let])
(R[let])
~y = ~t, [p{~x 7→ ~y}]ϕ, Γ ⇒ ∆
[let ~x = ~t in p]ϕ, Γ ⇒ ∆
~y = ~t, Γ ⇒ [p{~x 7→ ~y}]ϕ, ∆
Γ ⇒ [let ~x = ~t in p]ϕ, ∆
und dieselben Regeln für Diamonds statt Boxes.
A. Knapp, G. Schellhorn: Formale Methoden
339
Prozeduren: Syntax (1)
Neues Programmkonstrukt q(~t; ~z) für Prozeduraufrufe
I
I
I
q ist Prozedurname.
Terme ~t der Sorten ~s sind (aktuelle) Eingabeparameter.
Paarweise verschiedene Variablen ~z der Sorten ~s0 sind (aktuelle)
I/O-Parameter.
In KIV:
I
Konvention für Prozedurenamen: q#
I
Prozedurdefinitionen q# ~s : ~s0 ∈ Proc sind neuer Bestandteil der Signatur
einer DL-Spezifikation: Σ = (S, F, P, Proc)
I ~
s : ~s0 heißt (Aufrufs-)Modus der Prozedur.
I
Definitionen zwischen predicates und variables per
procedures q# s1 × . . . × sn : s01 × . . . × s0m ;
A. Knapp, G. Schellhorn: Formale Methoden
340
Prozeduren: Syntax (2)
Eine Prozedurdeklaration hat die Form q(~x; ~y) p mit formalen
Eingabeparametern ~x und formalen I/O-Parametern ~y. Die Parameter ~x, ~y sind
paarweise verschieden. Eine DL-Spezfikation enthält neben Signatur,
Variablen, Axiomen und Generiertheitsklauseln eine Menge von
Prozedurdeklarationen Decl mit paarweise verschiedenen Prozeduren:
DLSpec = ((S, F, P, Proc), X, Ax, Gen, Decl).
In KIV:
I
Es ist nicht erforderlich, für jede Prozedur eine Deklaration anzugeben.
Man kann Prozeduren auch nur mit Axiomen (z. B. Vor-/Nachbedingung)
spezifizieren.
I
Gegenseitige Rekursion ist erlaubt.
A. Knapp, G. Schellhorn: Formale Methoden
341
Prozedurdeklarationen in KIV: Beispiel (1)
Prozedurdeklarationen nach axioms
procedures f# nat : nat;
declaration f#(x; y) begin
if x = 0
then y := 1
else begin
f#(x -1; y); y := y * x
end
end;
Die Prozedur ist funktional (das Ergebnis in y hängt nicht vom Anfangswert ab;
i. e. y wird nur als Ausgabeparameter benutzt). Sie verwendet keine globalen
Variablen.
A. Knapp, G. Schellhorn: Formale Methoden
342
Prozedurdeklarationen in KIV: Beispiel (2)
procedures MAXL# natlist : nat;
MAX# nat, nat : nat;
declaration MAX#(m, n; n0) begin
if m < n
then n0 := n
else n0 := m
end;
MAXL#(x; n) begin
if x = []
then n := 0
else begin
MAXL#(x.rest; n); MAX#(n, x.first; n)
end
end;
A. Knapp, G. Schellhorn: Formale Methoden
343
KIV-Prozeduren: Funktionsprozeduren
I
Prozeduren in KIV relativ einfach, keine Funktionsprozeduren (oder
äquivalent Methoden mit Ergebnis).
Zusätzliche Komplexität von Funktionsprozeduren:
I
Terme müssen jetzt auch Prozedurnamen enthalten.
I
Eine Möglichkeit: Prozedurnamen = Funktionsbezeichner für Funktionen
mit einem Spezialergebnis ⊥ für Nichtterminierung.
I
Nichtterminierung (und evtl. Exceptions) muß nicht nur auf der
Programmebene, sondern auch auf der Termebene (also überall)
berücksichtigt werden.
A. Knapp, G. Schellhorn: Formale Methoden
344
KIV-Prozeduren: Alternative zur Modellierung
Deklarationen in KIV sind Teil der Spezifikation.
Alternative: Deklarationen sind Teil des Zustands (oder gleichwertig: neben
dem Zustand noch eine Umgebung für die Semantikdefinition).
I
Vorteil: Die Semantik einer kompletten Klasse oder eines Pakets wird
spezifizierbar, Deklarationen sind dynamisch überschreibbar.
Programmiersprachensemantiken wählen deshalb meist diese Alternative.
I
Nachteil: Keine nur spezifizierten und nicht implementierten Prozeduren.
Mit DL-Axiomen für Prozeduraufrufe kann man beliebige partielle
Funktionen (Definitionsbereich = Terminierungsbereich) beschreiben.
A. Knapp, G. Schellhorn: Formale Methoden
345
Prozeduren: Relationale Semantik
Analogie: Schleifen sind spezielle Form der Rekursion (tail recursion).
while b do p
entspricht dem Aufruf einer Prozedur w mit
w() begin if b then p; w() else skip end
Der Zahl der Schleifendurchläufe entspricht gerade der Rekursionstiefe.
n
I
Bei Schleifen kann die Semantik iteriert werden: RJif b then pK ; bei
Prozeduren nicht so einfach.
I
Für Schleifen geht es auch syntaktisch: loop p times n in KIV; das geht
auch für Prozeduren.
A. Knapp, G. Schellhorn: Formale Methoden
346
Tiefenbeschränkte Rekursion
Beschränkung der Rekursionstiefe in Analogie zur Beschränkung der
Iterationszahl mit loop.
Neues Programmkonstrukt q(~t; ~z) : c für beschränkten Prozeduraufruf
I
c Term der Sorte nat: maximale Rekursionstiefe (an der Obergrenze
abort)
Einführung einer Funktion p ↓ c, die im Rumpf von q alle Aufrufe mit der
Schranke c versieht, u. a.:
I
skip ↓ c = skip
I
p ; p0 ↓ c = (p ↓ c) ; (p0 ↓ c)
q(~t; ~z) ↓ c = q(~t; ~z) : c
(q(~t; ~z) : c0 ) ↓ c = q(~t; ~z) : min(c, c0 )
I
I
I
kann undefiniert bleiben, wenn (wie in KIV) beschränkte Prozeduraufrufe
innerhalb von Deklarationen verboten sind
A. Knapp, G. Schellhorn: Formale Methoden
347
Tiefenbeschränkte Rekursion: Relationale Semantik
Relationale Semantik für q(~x; ~y) p ∈ Decl
RJq(~t; ~z) : cK A = {(v, v0 ) | ∃n . n + 1 = T JcK A v ∧
∃v00 . (v{~x,~y 7→ T J~tK A v, v(~z)}, v00 ) ∈ RJp ↓ n̂K A ∧
v0 = v00 {~x,~y 7→ v(~x), v(~y)}{~z 7→ v00 (~y)}}
S
RJq(~t; ~z)K A = n∈N RJq(~t; ~z) : n̂K A
I
n̂ steht für den Term 0 + 1 + . . . + 1, der die Zahl n bezeichnet.
A. Knapp, G. Schellhorn: Formale Methoden
348
Semantik von (implementationslosen) Prozeduren
Die Semantik einer Prozedur q ~s : ~s0 ist eine Relation über den Parametern:
RJqK A ⊆ A~s × A~s0 × A~s0
I
(~a,~a0 ,~a00 ) ∈ RJqK A bedeutet: Die Prozedur q, aufgerufen mit
I
I
Eingaben ~a für die Eingabe-Variablen
Eingaben ~a0 für die Ein/Ausgabe-Variablen
terminiert mit Ausgabe ~a00 in den Ein/Ausgabe-Variablen.
I
In KIV: keine globale Variablen, stattdessen I/O-Parameter
I
I
I
I
auch vorteilhaft für Beweise
Alternative: nur globale Variablen, keine Parameter (vgl. µ-Kalkül)
Implementierungen ersetzen evtl. I/O-Parameter durch globale Variablen
Normalfall in KIV sind funktionale Prozeduren:
I
I/O-Variablen dienen nur der Ausgabe;
I
~a00 und Terminierung hängen nicht von ~a0 ab.
I
I
Funktionale Prozeduren haben etwas einfachere Regeln.
Wenn nicht funktional, Schlüsselwort nonfunctional am Ende der
Prozedurdefinition
A. Knapp, G. Schellhorn: Formale Methoden
349
Prozeduren: DL-Kalkülregeln (1)
(Rh()i1 )
(Rh()i2 )
(Rh():i)
~x0 = ~t,~y0 = ~z, Γ ⇒ hp{~x,~y 7→ ~x0 ,~y0 }iϕ{~z 7→ ~y0 }, ∆
Γ ⇒ hq(~t; ~z)iϕ, ∆
Γ ⇒ ∃n . hq(~t; ~z) : niϕ, ∆
Γ ⇒ hq(~t; ~z)iϕ, ∆
n = c − 1,~x0 = ~t,~y0 = ~z, Γ ⇒
c 6= 0 ∧ h(p ↓ n){~x,~y 7→ ~x0 ,~y0 }iϕ{~z 7→ ~y0 }, ∆
Γ ⇒ hq(~t; ~z) : ciϕ, ∆
mit neuen Variabeln n, ~x0 , ~y0 .
Analoge Regeln für die linke Seite und Boxen
I
In KIV: (h()i2 ) “proc omega”.
A. Knapp, G. Schellhorn: Formale Methoden
350
Prozeduren: DL-Kalkülregeln (2)
(Lhexeci)
(Rhexeci)
I
hq(~t; ~z)iϕ, hq(~t0 ; ~y)iψ, Γ ⇒ ∆
Γ ⇒ ~t = ~t0 , ∆ hq(~t; ~z)i~z = ~z0 , ϕ{~z 7→ ~z0 }, Γ ⇒ ψ{~y 7→ ~z0 }, ∆
hq(~t; ~z)iϕ, Γ ⇒ hq(~t0 ; ~y)iψ, ∆
Gilt so für funktionale Prozeduren und neue Variablen ~z0 .
I
I
Γ ⇒ ~t = ~t0 , ∆ hq(~t; ~z)i~z = ~z0 , ϕ{~z 7→ ~z0 }, ψ{~y 7→ ~z0 }, Γ ⇒ ∆
Für nichtfunktionale Prozeduren muß in der ersten Prämisse ~z = ~y
hinzugefügt werden.
nicht invertierbar (~t = ~t0 kann falsch sein)
Anwendung bei Induktion, um den Aufruf aus der Induktionsvoraussetzung
gegen den gerade aktuellen Aufruf zu kürzen“.
”
I In KIV: (Lhexeci) “contract call left”, (Rhexeci) “execute call”
I
A. Knapp, G. Schellhorn: Formale Methoden
351
Deklarationen als Abkürzung für Axiome
Satz
I
I
I
I
Eine Prozedurdeklaration q(~x; ~y) p ist äquivalent zu den Axiomen
hq(~t; ~z)iϕ ↔ (h~x0 , ~y0 := ~t, ~z; p{~x,~y 7→ ~x0 ,~y0 }iϕ{~z 7→ ~y0 }
hq(~t; ~z)iϕ ↔ ∃n . hq(~t; ~z) : niϕ
c = 0 → ¬hq(~t; ~z) : ciϕ
c 6= 0 ∧ n = c − 1 → (hq(~t; ~z) : ciϕ ↔
h~x0 , ~y0 := ~t, ~z; (p ↓ n){~x,~y 7→ ~x0 ,~y0 }iϕ{~z 7→ ~y0 })
mit neuen Variablen n, ~x0 , ~y0 .
Die Axiome ergeben sich direkt aus den Regeln (Rh()i1 ), (Rh()i2 ), (Rh():i).
A. Knapp, G. Schellhorn: Formale Methoden
352
Prozeduren im Hoare-Kalkül
Die Tiefenbeschränkung wird zum Beweis von semantischen Aussagen
gebraucht (Analoga zu Koinzidenzlemma etc.). Außerdem rechtfertigt sie
folgendes Vorgehen im Hoare-Kalkül für partielle Korrekheit (Skizze):
I
I
Gezeigt werden soll {ϕ} q(~x; ~y) {ψ} für rekursive Prozedur q(~x; ~y) p.
Dazu genügt es, einen Hoare-Kalkül-Beweisbaum mit Konklusion
{ϕ} p {ψ} zu bilden. Der Beweisbaum darf jetzt offene Prämissen für die
inneren Aufrufe haben.
I grob von der Form {ϕ{~
x,~y 7→ ~t,~z}} q(~t; ~z) {ψ{~x,~y 7→ ~t,~z}}.
I
Details recht kompliziert: Globale Variablen, lokale Bindungen
zwischendurch, logische Hilfsvariablen
I
Rechtfertigung: Innere Aufrufe haben (implizit) geringere Rekursionstiefe.
I
Aber: genügt nur für partielle Korrekheit, für totale Korrektheit wird auch
noch eine noethersche Ordnung ≺ benötigt.
I
In dynamischer Logik entfallen diese Probleme: einfache explizite
Induktion über die Rekursionstiefe bzw. noethersche Induktion.
A. Knapp, G. Schellhorn: Formale Methoden
353
Kontrakte
Ein Kontrakt für eine Prozedur q (oder auch für eine Methode) besteht
(mindestens) aus
I
einer Vorbedingung ϕ
I
einer Nachbedingung ψ
I
der Angabe der Eingabe-Parameter (und evtl. gelesene globale Variablen)
I
der Angabe der Ausgabe-Parameter (und evtl. geschriebene globale
Variablen)
I
Weiters informelle Beschreibung: u. a. Name und Zweck der Prozedur,
Querverweise zu Anwendungsfällen, etc.
A. Knapp, G. Schellhorn: Formale Methoden
354
Kontrakte: Semantik
Eine Implementierung mit Rumpf p erfüllt einen Kontrakt, falls der Rumpf total
korrekt bzgl. der Vor- und Nachbedingungen ist, falls also [ϕ] p [ψ] (Hoare) bzw.
ϕ → hpiψ (dynamische Logik) gilt.
I
Diese Interpretation von Kontrakten ist sehr stark. Man hätte gerne eine
interne Datenrepräsentation.
I
Wenn die Vorbedingung nicht eingehalten wird, darf Beliebiges passieren:
Absturz, Exception, Nichtterminierung, reguläres Ergebnis, illegaler
Speicher etc.
A. Knapp, G. Schellhorn: Formale Methoden
355
Kontrakte für Java/C#
I
Für Java oder C# sind die Argumente Eingabeparameter und das Ergebnis
der einzige Ausgabeparameter.
I
Es gibt immer genau einen I/O-Parameter: den Speicher.
I
Der Speicher wird gelesen/modifiziert“ ist unnötig (und zu schwach);
”
deshalb genauere Angaben, welche Objekte/Assoziationen
gelesen/geschrieben/erzeugt werden, sind in Vor- und Nachbedingung
erforderlich.
I
Die Nachbedingung kann auch: löst für bestimmte Eingaben eine
”
bestimmte Ausnahme aus“ lauten. Sinnvollerweise teilt man die
Nachbedingung deshalb in einen regulären und einen Exception-Teil.
A. Knapp, G. Schellhorn: Formale Methoden
356
Vollständigkeit der dynamischen Logik (1)
In dynamischer Logik kann man (im Gegensatz zu Hoare-Kalkül) Programme
vergleichen:
I
I
hpitrue → hp0 itrue für Wenn p terminiert, so auch p0“.
”
Sei ~x = var(p) ∪ var(p0 ) und ~x0 neue Variablen: hpi~x = ~x0 ↔ hp0 i~x = ~x0 für
p und p0 berechnen dasselbe (Ergebnis ~x0 )“; oder äquivalent: die
”
”
Semantik von p und p0 ist gleich (RJpK A = RJp0 K A)“.
Auch bei Induktionsbeweisen für totale/partielle Korrektheit von rekursiven
Prozeduren entstehen nach Anwendung der Induktionshypothese:
I
eine Programmformel im Antezedent mit nur dem rekursiven Aufruf und
der Nachbedingung (aus der Induktionshypothese)
I
eine Programmformel im Sukzedent (durch Ausführen entstanden). Sie
beginnt mit einem rekursiven Aufruf, für den man die Induktionshypothese
benötigt.
Deshalb benötigt man in dynamischer Logik noch Regeln für zwei Programme.
A. Knapp, G. Schellhorn: Formale Methoden
357
Vollständigkeit der dynamischen Logik (2)
Dynamische Logik kann vollständig axiomatisiert werden modulo der
Unvollständigkeit der natürlichen Zahlen. Die Axiome sind (im wesentlichen) die
bisherigen Regeln und die Axiome
I
I
(ϕ → ψ) → (hpiϕ → hpiψ)
Wenn ϕ ψ impliziert, und ϕ nach p gilt, dann auch ψ“.
”
Sei ~x = lvar(p) und ~x0 neue Variablen:
hpihp0 iϕ ↔ ∃~x0 . hpi~x = ~x0 ∧ hp0 {~x 7→ ~x0 }iϕ{~x 7→ ~x0 }
Damit nach p und p0 ϕ gilt, muß es einen Zwischenzustand ~x0 geben, der
”
nach p erreicht wird; wenn man auf diesem p0 rechnen läßt, ergibt sich
zum Schluß ϕ für ~x0“.
Dabei sind lvar(p) die (potentiell) von p modifizierten Variablen (= linke Seiten
von Zuweisungen + I/O-Parameter von Aufrufen).
A. Knapp, G. Schellhorn: Formale Methoden
358
DL-Kalkül: Einführung von Zwischenzuständen
(Lhspliti)
hpi~x = ~x0 , ϕ{~x 7→ ~x0 }, Γ ⇒ ∆
hpiϕ, Γ ⇒ ∆
wobei ~x = lvar(p), ~x0 neue Variablen
I
Die Regel wird meist angewendet, wenn p ein Prozeduraufruf (geht aber
nie fehl).
I
Führt einen Zustand ~x0 am Ende von p ein; der Zwischenzustand wird
explizit gebraucht, wenn man Lemmas hat (z. B. zwei Aufrufe sequentiell,
Lemma macht Aussage über den zweiten).
A. Knapp, G. Schellhorn: Formale Methoden
359
Semantik von Programmiersprachen
Behandlung verschiedener Konzepte von Programmiersprachen
I
Schleifen und Rekursion, Terminierung
I
Parameterübergabe-Mechanismen: call-by-value, call-by-reference oder
call-by-name
I
Nichtdeterminismus: (un-)beschränkt, dämonisch, erratisch oder angelisch
I
Kopiersemantik vs. Pointersemantik
I
Semantik von Sprüngen: Exceptions, breaks, returns, gotos
I
Higher-Order-Funktionen: lazy vs. strikte Semantik
I
Typsysteme: Polymorphie, Overloading, Casts, dynamische Bindung etc.
I
Parallelität: Interleaving, synchron, asynchron, Fairness
I
Übergang von Semantik zu Kalkül
A. Knapp, G. Schellhorn: Formale Methoden
360
Programmiersprachensemantik in Theorembeweisern (1)
Semantikdefinition in Theorembeweisern wie KIV kann auf zwei Ebenen
erfolgen:
Ebene 1 (die Meta-Ebene“): Semantik für die in KIV eingebauten Programme p
”
I Semantik J−K von Programmen ist außerhalb von KIV spezifiziert.
I
JpK arbeitet auf logischen Variablenbelegungen und spezifizierten
Datenstrukturen (Algebren), genau wie die Semantik von Prädikatenlogik.
I
Semantik wird benutzt, um Sinnhaftigkeit von Hoare-Kalkül und
dynamischer Logik zu zeigen.
I
Verwendet wird zum Schluß nur der Kalkül, um Eigenschaften von
programmierten/spezifizierten Anwendungen nachzuweisen.
I
Der implementierte Kalkül hat das Risiko, Fehler zu enthalten, wenn die
(informellen) mathematischen Beweise fehlerhaft sind. Das Risiko ist
gering für Standard-while-Programme“, größer für Java oder Statecharts.
”
A. Knapp, G. Schellhorn: Formale Methoden
361
Programmiersprachensemantik in Theorembeweisern (2)
Ebene 2 (die Objekt-Ebene“): Semantik für in KIV spezifizierte Programme
”
I p ist Variable eines spezifizierten Datentyps Prog.
I
J . K : Prog → State × State → bool ist in KIV definierte
Funktion.
I
Zweck: präzise Semantikdefinition und Validierung für eine Programmieroder Spezifikationssprache
I
I
I
I
Korrektheitsbeweise, systematische Tests für Compiler
Aufdecken von Fehlern (z. B. im Java-Compiler)
Korrektheitsbeweise für Kalkülregeln
Aber auf dieser Grundlage ist es schwierig, effizient Anwendungen in der
Programmier- und Spezifikationssprache zu verifizieren (z. B.
Substitutionsfunktion programmiert (Ebene 1) vs. spezifiziert (Ebene 2)).
A. Knapp, G. Schellhorn: Formale Methoden
362
Zustände
Semantischer Bereich State = Id → N
I
Abbildungen σ von Programmvariablen Id auf natürliche Zahlen
I
Variablenzugriff σ(x), Variablenmodifikation σ{x 7→ n}
Formalisierung in KIV
I
Sorte Id mit Variablen id
I
Sorte Idxnat der Paare aus Id und nat mit Konstruktor . <- .
I
Sorte State mit Variablen st
I . [ . ] : State × Id → nat für Variablenzugriff
I . [ . ] : State × Idxnat → State für Variablenmodifikation
A. Knapp, G. Schellhorn: Formale Methoden
363
Ausdrücke
Syntaktische Bereiche
I
AExp 3 t für arithmetische Ausdrücke
I
BExp 3 b für boolesche Ausdrücke
Semantische Funktionen
I
I
J−K : AExp → State → N
J−K : BExp → State → B
Formalisierung in KIV
I
Sorten AExp und BExp
I . +_ . : AExp × AExp → AExp etc.
I
Für arithmetische und boolesche Ausdrücke zwei Funktionen
J . K : AExp → State → nat;
J . K : BExp → State → bool;
I
Verwendung bereits spezifizierter Funktionen auf nat und bool
A. Knapp, G. Schellhorn: Formale Methoden
364
Programme
Syntaktischer Bereich
I
Prog 3 p für Programme über AExp und BExp
I
Vereinfachung: keine simultanen Zuweisungen
Semantische Funktion
I
J−K : Prog → ℘(State × State)
I
aus relationaler Semantik
Formalisierung in KIV
I
I
Sorte Prog mit Variable α (statt p)
Für relationale Semantik Funktion höherer Ordnung
J . K : Prog → State × State → bool
I
I
I
Relationsvariable R : State × State → bool
Relationsiteration durch rekursiv definierte Funktion
. ˆ . : (State × State → bool) × nat →
(State × State → bool)
JαK ˆ n ist Semantik von αn
A. Knapp, G. Schellhorn: Formale Methoden
365
Natürliche Semantik (1)
Definition
Natürliche Semantik (engl. natural semantics) definiert eine
“big-step”-Semantik eines Programms p ∈ Prog durch die Ableitbarkeit von
hp, σi → σ 0 für σ, σ 0 ∈ State im folgenden Regelsystem Rns .
(skipns )
(assignns )
(seqns )
hskip, σi → σ
hx := t, σi → σ{x 7→ JtK σ}
hp1 , σi → σ1
hp2 , σ1 i → σ2
hp1 ; p2 , σi → σ2
A. Knapp, G. Schellhorn: Formale Methoden
366
Natürliche Semantik (2)
(ifttns )
(ifffns )
(whilettns )
(whileffns )
hp1 , σi → σ1
hif b then p1 else p2 , σi → σ1
hp2 , σi → σ2
hif b then p1 else p2 , σi → σ2
,
falls JbK σ = tt
,
falls JbK σ = ff
hp, σi → σ 0 hwhile b do p, σ 0 i → σ 00
hwhile b do p, σi → σ 00
hwhile b do p, σi → σ
,
,
falls JbK σ = tt
falls JbK σ = ff
I
Keine Regel für abort
I
Bedeutung des Regelsystems analog zur Definition von
Ableitungsbäumen für Prädikatenlogik
A. Knapp, G. Schellhorn: Formale Methoden
367
Formalisierung natürlicher Semantik
I
Gibt es immer eine wohldefinierte Menge ableitbarer Konklusionen?
Welche Prämissen sind in Ordnung?
I
Alternative 1: Explizite Bäume tree mit Tripeln aus (p, σ, σ 0 ) als Inhalt der
Knoten und Prädikat ok(tree), das feststellt, ob die Regeln korrekt
angewendet wurden: aufwendig, interessant ist nur die Menge möglicher
Tripel in der Konklusion.
I
Alternative 2: Die ableitbaren Tripel sind die kleinste unter
Regelanwendung abgeschlossene Menge: Definiere zu einer Menge T
von schon abgeleiteten Tripeln die mit einer Regelanwendung daraus
ableitbaren Tripel R̂ns (T). Dann sollte gelten: hp, σi → σ 0 ist mit Rns
T
ableitbar genau dann, wenn (p, σ, σ 0 ) ∈ {T | R̂ns (T) ⊆ T}.
I
Alternative 3: Definiere die Menge der mit einem Baum der Höhe n
herleitbaren Tripel: Das ist gerade R̂nns (∅). Semantik ist also: hp, σi → σ 0
ist mit Rns ableitbar genau dann, wenn es ein n ∈ N mit (p, σ, σ 0 ) ∈ R̂nns (∅)
gibt.
A. Knapp, G. Schellhorn: Formale Methoden
368
Ableitungsoperator R̂ns
Informell: (p, σ, σ 0 ) ∈ R̂ns (T) gdw. (p, σ, σ 0 ) ist Konklusion einer Regel mit
”
Prämissen aus T“
Damit: (p, σ, σ 0 ) ∈ R̂ns (T) genau dann, wenn
p = skip und σ = σ 0
oder ex. x, t mit p = x := t, σ 0 = σ{x 7→ JtK σ}
oder ex. p1 , p2 , σ 00 mit p = p1 ; p2 , (p1 , σ, σ 00 ) ∈ T und (p2 , σ 00 , σ 0 ) ∈ T
oder ex. b, p1 , p2 mit p = if b then p1 else p2 , JbK σ = tt und (p1 , σ, σ 0 ) ∈ T
oder ex. b, p1 , p2 mit p = if b then p1 else p2 , JbK σ = ff und (p2 , σ, σ 0 ) ∈ T
oder ex. b, p0 , σ 00 mit p = while b do p0 , JbK σ = tt und
(p0 , σ, σ 00 ) ∈ T und (while b do p0 , σ 00 , σ 0 ) ∈ T
0
oder ex. b, p mit p = while b do p0 , JbK σ = ff und σ = σ 0
Formalisierung in KIV:
I
Datentypspezifikation Prog für Programme
I
Funktion REC : (Prog × State × State → bool) →
Prog × State × State → bool
A. Knapp, G. Schellhorn: Formale Methoden
369
Regelsysteme
Nur positive Prämissen
I
Ableitungsbäume lassen sich mit Regeln der Form
hp0 , σ1 i 6→ σ2
hp, σi → σ 0
nicht
immer fortsetzen.
Nur endlich viele Prämissen
I
Für Regeln der Form
(hpn , σn i → σn0 )n∈N
hp, σi → σ 0
gibt es nicht notwendig ein
k ∈ N, sodaß der Ableitungsbaum aus Unterbäumen der Höhe k − 1
gebildet werden kann (Prämisse l benötige l Ableitungsschritte).
I
Damit werden Alternative 1 und Alternative 3 zur Interpretation
ausgeschlossen.
A. Knapp, G. Schellhorn: Formale Methoden
370
Fixpunkte monotoner Funktionen (1)
Menge U , Funktion f : ℘(U) → ℘(U)
I
f monoton, wenn für alle M1 , M2 ⊆ U : ist M1 ⊆ M2 , dann f (M1 ) ⊆ f (M2 )
I
M ⊆ U Fixpunkt von f , wenn f (M) = M
I
M ⊆ U kleinster Fixpunkt von f , wenn M Fixpunkt von f und für jeden
Fixpunkt M 0 von f : M ⊆ M 0
Satz
Sei U eine Menge und f : ℘(U) → ℘(U) eine monotone Funktion.
T
Dann ist die durch f induktiv definierte Menge µ(f ) = {M ⊆ U | f (M) ⊆ M}
der kleinste Fixpunkt von f .
I
Fixpunktsatz von Knaster und Tarski für Mengen
I
Anwendung: Setze U zu Menge der Tripel (p, σ, σ 0 ) und f = R̂ns .
µ(R̂ns ) ist die Menge der ableitbaren Konklusionen.
I
Monotonie entspricht positiven (nicht notwendigerweise endlich vielen)
Prämissen.
A. Knapp, G. Schellhorn: Formale Methoden
371
Fixpunkte monotoner Funktionen (2)
Beweisskizze
Sei F = {M ⊆ U | f (M) ⊆ M}, also µ(f ) =
T
F.
f (µ(f )) ⊆ µ(f ). Sei dazu M ∈ F :
f (M) ⊆ M nach Definition von F
T
µ(f ) ⊆ M , da jedes Element von F Obermenge des Durchschnitts F
Wegen der Monotonie von f gilt f (µ(f )) ⊆ f (M)
Also f (µ(f )) ⊆ M .
Da das für jedes M ∈ F gilt, ist f (µ(f )) ⊆ µ(f ).
I Es gilt
I
I
I
I
I
I Es gilt
I
I
µ(f ) ⊆ f (µ(f )):
Wegen f (µ(f )) ⊆ µ(f ) und der Monotonie von f gilt f (f (µ(f ))) ⊆ f (µ(f )),
also f (µ(f )) ∈ F .
Also µ(f ) ⊆ f (µ(f )), da jedes Element Obermenge des Durchschnitts
f (µ(f )) ⊆ µ(f ) und µ(f ) ⊆ f (µ(f )) ist µ(f ) Fixpunkt.
M von f ist wegen f (M) = M in F und damit µ(f ) ⊆ M
nach Definition von µ(f ).
I Wegen
I Jeder andere Fixpunkt
A. Knapp, G. Schellhorn: Formale Methoden
372
Fixpunkte monotoner Funktionen (3)
Formalisierung in KIV:
I
Allgemeine Fixpunkttheorie mit Sorte elem für die Elemente von U
I
Teilmengen von U : boolesche Funktionen S : elem → bool
I
Mengen von Teilmengen von U : SS : (elem → bool) → bool
I
Statt x ∈ S und S ∈ SS also S(x) und SS(S)
I
S ⊆ S0 definiert als ∀ x . S(x) → S0(x)
T
Die Elemente x ∈ SS sind die x mit ∀ S . SS(S) → S(x)
I
I
Zur Anwendung des generischen Theorems wird eine Instanz der Theorie
mit Prog × State × State für elem und REC für f zu bilden
(instantiated specification).
A. Knapp, G. Schellhorn: Formale Methoden
373
Fixpunkte für R̂ns
I
Der Operator R̂ns ist monoton.
I
Hinreichendes Kriterium für Monotonie: Alle Vorkommen von T in der
Definition von R̂ns unter einer geraden Zahl von Negationen (wobei
Implikation eine Negation für die Vorbedingung addiert, und Äquivalenz
verboten ist).
Formalisierung in KIV (für REC):
I
Argument im wesentlichen, daß alles, was in der REC-Definition an
Operatoren vorkommt: Konjunktion, Disjunktion (keine Negation) sowie
Quantoren, monotone Operatoren sind.
A. Knapp, G. Schellhorn: Formale Methoden
374
Eigenschaften der Definition der natürlichen Semantik
I
Nach dem Fixpunktsatz von Knaster-Tarski ist die kleinste Menge der
unter Regelanwendung abgeschlossenen Tripel (p, σ, σ 0 ) wohldefiniert
T
und gleich µ(R̂ns ) = {T | R̂ns (T) ⊆ T}.
I
Die Definition (σ, σ 0 ) ∈ JpK ⇔ (p, σ, σ 0 ) ∈ µ(R̂ns ) gibt also eine formale
Definition der natürlichen Semantik.
I
I
Formalisierung in KIV
J . K : Prog → State × State → bool
Es gilt R̂ns (µ(R̂ns )) = µ(R̂ns ), was informell bedeutet: Nochmaliges
”
Anwenden einer Regel auf die mit den Regeln gewinnbaren Konklusionen
(= µ(R̂ns )) gibt nichts Neues mehr“.
A. Knapp, G. Schellhorn: Formale Methoden
375
Bedeutung von R̂ns (µ(R̂ns )) = µ(R̂ns ) (1)
Intuitiv: Die Konklusion ist genau dann ableitbar, wenn es alle Prämissen sind“.
”
Ausgeschrieben: (σ, σ 0 ) ∈ JpK genau dann, wenn
p = skip und σ = σ 0
oder ex. x, t mit p = x := t, σ 0 = σ{x 7→ JtK σ}
oder ex. p1 , p2 , σ 00 mit p = p1 ; p2 , (σ, σ 00 ) ∈ Jp1 K und (σ 00 , σ 0 ) ∈ Jp2 K
oder ex. b, p1 , p2 mit p = if b then p1 else p2 , JbK σ = tt und (σ, σ 0 ) ∈ Jp1 K
oder ex. b, p1 , p2 mit p = if b then p1 else p2 , JbK σ = ff und (σ, σ 0 ) ∈ Jp2 K
oder ex. b, p0 , σ 00 mit p = while b do p0 , JbK σ = tt und
(σ, σ 00 ) ∈ Jp0 K und (σ 00 , σ 0 ) ∈ Jwhile b do p0 K
0
oder ex. b, p mit p = while b do p0 , JbK σ = ff und σ = σ 0
A. Knapp, G. Schellhorn: Formale Methoden
376
Bedeutung von R̂ns (µ(R̂ns )) = µ(R̂ns ) (2)
Durch Einsetzen einer Regelkonklusion bekommt man Äquivalenzen zwischen
Konklusion und der Konjunktion der Prämissen für jede Regel (falls
Seitenbedingung gilt):
I
I
Einsetzen von p1 ; p2 für p: (σ, σ 0 ) ∈ Jp1 ; p2 K ⇔
es gibt σ 00 mit (σ, σ 00 ) ∈ Jp1 K und (σ 00 , σ 0 ) ∈ Jp2 K
Einsetzen von while b do p0 für p ergibt Abwickeln und Verlassen einer
Schleife:
Wenn JbK σ = tt, dann: (σ, σ 0 ) ∈ Jwhile b do p0 K ⇔
es gibt σ 00 mit (σ, σ 00 ) ∈ Jp0 K und (σ 00 , σ 0 ) ∈ Jwhile b do p0 K
Wenn JbK σ = ff , dann: (σ, σ 0 ) ∈ Jwhile b do p0 K ⇔
σ = σ0
I
Zusammenfassung zu einem Theorem möglich
A. Knapp, G. Schellhorn: Formale Methoden
377
Stetige mengenwertige Funktionen
Menge U
I
I
ω -Kette in U : M0 ⊆ M1 ⊆ . . . mit Mi ⊆ U für i ∈ N
Kette (engl. chain) für Indexmenge I : (Mi )i∈I mit Mi ⊆ U und für alle
i, j ∈ I : Mi ⊆ Mj oder Mj ⊆ Mi
I
In KIV: Ketten für N statt ω -Ketten
Definition
Sei U eine Menge. Eine Funktion f : ℘(U) → ℘(U) ist stetig,
wenn für alle ω -Ketten M0 ⊆ M1 ⊆ . . . gilt:
S
S
f ( n∈N Mn ) = n∈N f (Mn )
I
Wenn f monoton, gilt ⊇.
A. Knapp, G. Schellhorn: Formale Methoden
378
Stetigkeit für natürliche Semantik
I
Sei f wieder R̂ns und M0 = ∅, Mi+1 = R̂ns (Mi )
I
Mn enthält genau die mit einem Baum der Höhe n erhaltbaren
Konklusionen.
I
Wegen der Monotonie von R̂ns wachsen die Mengen, bilden also eine
ω -Kette.
S
S
S
Stetigkeit fordert: R̂ns ( n∈N Mn ) ⊆ n∈N R̂ns (Mn ) = n∈N Mn
I Stetigkeit sagt also: Wenn man alle mit irgendeiner endlichen Zahl
S
erhaltbaren Konklusionen nimmt (= n∈N Mn ) und auf diese noch einmal
eine Regel anwendet, kommt nichts Neues dazu.
I
I
Stetigkeit gilt nicht für unendlich viele Prämissen; dort gibt es legale
Bäume unbeschränkter Höhe; sie gilt immer, wenn man endlich viele
Prämissen hat: dann gibt es keine Bäume unbeschränkter Höhe.
A. Knapp, G. Schellhorn: Formale Methoden
379
Stetigkeit und Monotonie
Satz
Jede stetige Funktion f : ℘(U) → ℘(U) ist monoton.
Beweisskizze
Sei M0 ⊆ M1 .
ω -Kette durch M2 = M3 = · · · = M1 .
S
S
I Dann
n∈N Mn = M1 , also f ( n∈N Mn ) = f (M1 )
S
I Andererseits
n∈N f (Mn ) = f (M0 ) ∪ f (M1 ).
I Bilde
I Wegen Stetigkeit
I Also
f (M1 ) = f (M0 ) ∪ f (M1 ).
f (M0 ) ⊆ f (M1 ).
A. Knapp, G. Schellhorn: Formale Methoden
380
Stetigkeit von R̂ns
R̂ns ist stetig.
Satz
Sei M0 ⊆ M1 ⊆ . . . eine ω -Kette.
S
(p, σ, σ 0 ) ∈ R̂ns ( n∈N Mn ).
Beweisskizze
I Sei
(p, σ, σ 0 ) mit einer Regel und m Prämissen (pk , σk , σk0 ) entstanden.
S
I Alle Prämissen sind in
n∈N Mn .
I Dann ist
I Also gibt es für jedes
I Sei n0
k ∈ {1, . . . , m} ein nk , sodaß (pk , σk , σk0 ) ∈ Mnk .
= max({n1 , . . . , nm }).
I Dann sind alle Prämissen der Regeln in
I Somit ist die Konklusion in
I
M n0 .
R̂ns (Mn0 ) und also auch in
S
n∈N
R̂ns (Mn ).
Allgemein gilt: Regelsysteme mit nur endlich vielen, sämtlich positiven
Prämissen ergeben stetige Operatoren.
A. Knapp, G. Schellhorn: Formale Methoden
381
Fixpunkte stetiger Funktionen (1)
Satz
Sei U eine Menge und f : ℘(U) → ℘(U) eine monotone Funktion.
Dann gilt:
1. Die Mengen f n (∅) bilden eine ω -Kette in U .
2. Für alle n ist f n (∅) ⊆ µ(f ).
3. Falls f stetig ist, gilt der Fixpunktsatz von Kleene (für mengenwertige
Funktionen):
µ(f ) =
S
n∈N f
n (∅)
Beweisskizze
I Offenbar
∅ ⊆ f (∅). Wegen Monotonie gilt f (∅) ⊆ f 2 (∅), f 2 (∅) ⊆ f 3 (∅), . . . ; also
induktiv Behauptung (1).
∅ ⊆ µ(f ). Wegen Monotonie gilt f (∅) ⊆ f (µ(f )) = µ(f ),
f 2 (∅) ⊆ f (µ(f )) = µ(f ), . . . ; also induktiv Behauptung (2).
I Offenbar
A. Knapp, G. Schellhorn: Formale Methoden
382
Fixpunkte stetiger Funktionen (2)
Beweisskizze
I Sei
F=
S
n∈N
I Wegen (2) gilt
f n (∅); zu zeigen ist F = µ(f ).
F ⊆ µ(f ); also bleibt zu zeigen µ(f ) ⊆ F .
f (F) = F zu zeigen, da µ(f ) der kleinste Fixpunkt ist.
S
S
f (F) = f ( n∈N
f n (∅)) = n∈NSf n+1 (∅), wegen Stetigkeit; und
S
S
n+1
(∅) = ∅ ∪ 1≤n∈N f n (∅) = n∈N f n (∅) = F .
n∈N f
I Es genügt
I Es gilt:
I
Für stetige Funktion muß man nur endlich oft iterieren, um die Menge der
ableitbaren Konklusionen zu bekommen.
I
Für nur monotone Funktionen kann man weiteriterieren und bleibt immer
unterhalb des Fixpunkts. Sobald irgendeine Iteration nicht mehr größer
wird, hat man den Fixpunkt. Mit Theorie der Ordinalzahlen: Wenn man
genügend unendlich oft“ iteriert, erreicht man µ(f ).
”
A. Knapp, G. Schellhorn: Formale Methoden
383
Äquivalenz der natürlichen zur relationalen Semantik
Satz
Wenn eine Ableitung für hp, σi → σ 0 in der natürlichen Semantik
existiert, dann ist (σ, σ 0 ) ∈ JpK in der relationalen Semantik, und umgekehrt.
Formalisierung in KIV:
I
⇒“ durch Induktion über n in REC ˆ n (Zahl der angewandten Regeln)
”
⇐“ durch strukturelle Induktion über den Aufbau des Programms
”
I Beides hat dieselbe Struktur, einzige Ausnahme ist die Schleife
I
I
Benötigt wird als Lemma, daß in der natürlichen Semantik
(while b do p, σ, σ 0 ) genau dann ableitbar ist, wenn es ein n gibt, sodaß
((if b then p else abort)n , σ, σ 0 ) ableitbar ist und JbK σ 0 = ff .
I Beweis ⇒“ wieder durch Induktion über Zahl der angewandten Regeln.
”
I Beweis ⇐“ durch Induktion über n.
”
A. Knapp, G. Schellhorn: Formale Methoden
384
Prozeduren: Natürliche Semantik
Natürliche Semantik für Prozeduraufrufe
(callns )
hp, σ{~x,~y 7→ J~tK σ, σ(~z)}i → σ 00
hq(~t; ~z), σi → σ 00 {~x,~y 7→ σ(~x), σ(~y)}{~z 7→ σ 00 (~y)}
wobei q(~x; ~y) p ∈ Decl
,
I
Die formalen Parameter ~x, ~y an die ausgewertete Argumente ~t, ~z binden;
I
p ausführen, ergibt σ 00 ;
I
für die formalen Parameter wieder die Ausgangswerte nehmen;
I
die Output-Parameter ~z mit den Ergebniswerten σ 00 (~y) überschreiben;
I nicht umgekehrt, wenn ~
z und ~y gemeinsame Variablen haben
I
falls keine globalen Variablen vorhanden sind, kann man als Endzustand
einfacher σ{~z 7→ σ 00 (~y)} nehmen.
A. Knapp, G. Schellhorn: Formale Methoden
385
Prozeduren: Formalisierung in KIV
I
Sorte Proc für Prozedurnamen mit Variable q
I
Für Deklarationen Vereinfachung: nur ein Eingabe-, und ein I/O-Parameter
I
allgemeiner: Listen und Test auf Duplikatfreiheit
I
Spezifikation Decl mit drei Funktionen (einfacher zu spezifizieren als eine
Funktion, die ein Tripel liefert):
I inparam : Proc → Id
I ioparam : Proc → Id
I body : Proc → Prog
I
Jedes q hat dadurch die Deklaration
q(inparam(q); ioparam(q)). body(q)
A. Knapp, G. Schellhorn: Formale Methoden
386
Speicher: Kopiersemantik
Funktionale Programmiersprachen haben ebenso wie Prädikatenlogik und die
abstrakte KIV-Programmiersprache Kopiersemantik.
I
Bei Kopiersemantik ändert eine Zuweisung an eine Variable einfach die
Belegung (den Wert) der Variable.
I
Die Zuweisung hat keinen Effekt auf den Inhalt anderer Variablen
(referentielle Transparenz).
I
Einfachere Semantik, damit leichter verständlich und einfacher zu
verifizieren.
A. Knapp, G. Schellhorn: Formale Methoden
387
Speicher: Pointersemantik
Imperative (und objektorientierte) Programmiersprachen haben aus
Effizienzgründen meistens Pointersemantik.
I
Die Belegung σ(x) einer Variable x ist immer
I eine Referenz vom Typ ref (Compilerbau: “boxed objects”) oder
I von einem primitiven Typ wie bool oder int (“unboxed objects”).
I
Es gibt immer einen globalen Speicher (engl. heap) h : ref * data.
I Schlüssel sind vom Typ ref mit einer Konstante null.
I Werte sind vom Typ data mit ref ⊆ data
I
Eine Zuweisung an x ändert (wenn boxed) den Speicher, nicht die
Referenz in der Belegung.
A. Knapp, G. Schellhorn: Formale Methoden
388
Speicher: Formalisierung in KIV (1)
Einfache Sprache mit Speicher
I
Nur eine Sorte Objekte: NatxRef mit zwei Feldern vom Typ nat und
Ref
I
Zugriff per o.val und o.next
I
Speichermodifikationen nur auf Programm-, nicht auf Ausdrucksebene
(Semantik von Ausdrücken kann Funktion mit Wert bleiben).
I
Variablen für Objektreferenzen oid : OId
I
Zustände st speichern jetzt:
I
I
I
natürliche Zahlen für Identifikatoren: st[id] : nat
Referenzen für Objekte: st[oid] : Ref
Speicher Instanz des nicht-freien Datentyps Store(loc, data)
I Schlüssel (loc) vom Typ Ref
I Werte (data) vom Typ NatxRef (mit Selektoren .nat und .ref)
I Heapzugriff hp[r] : NatxRef
I Heapmodifikation hp[r, n0 × r0]
A. Knapp, G. Schellhorn: Formale Methoden
389
Speicher: Formalisierung in KIV (2)
Neue Ausdrücke o : OExp für Objekte (genauer: Referenzen auf Objekte)
bestehend aus:
I
v(oid) (Variable für Objekt)
I
o.next (Zugriff auf next-Feld)
I
null
Neue arithmetische und boolesche Ausdrücke:
I
neuer arithmetischer Ausdruck: o.val (val-Feld)
I
neuer boolescher Ausdruck: o = o’ (Referenzvergleich)
A. Knapp, G. Schellhorn: Formale Methoden
390
Speicher: Formalisierung in KIV (3)
Auf Programmebene gibt es jetzt vier verschiedene Zuweisungsarten:
1 id _:= e wie bisher (Zuweisung an lokale Variable)
2a oid .val _:= e Zuweisung an val-Feld
2b oid .next _:= o Zuweisung an next-Feld
3 oid _:=new neues Objekt erzeugen (mit 0 × null als Inhalt)
I
Zuweisung (1) und (2a–b) sind auch in Java unterschiedlich.
I
Zuweisung (3) ist Ersatz dafür, daß keine Seiteneffekte (hier: Allokation)
auf Termebene vorhanden sind.
I
Vereinfachung: eigentlich OExp’s auf der linken Seite, hier nur OId’s
A. Knapp, G. Schellhorn: Formale Methoden
391
Seiteneffekte
Ausdrücke mit Seiteneffekten auf den Zustand
Formalisierung in KIV:
I
Neue Expression id ++ (Postinkrement)
I
Ergebnis ist aktueller Wert von id, id wird als Seiteneffekt erhöht
I
Auswirkungen auf Semantik: JeK(st) muß jetzt Paar aus Wert und
neuem Zustand zurückgeben
I
J . K : AExp → State → pair(State, nat)
I
Zustand muß propagiert werden, z. B.
Je +_ e0K(st) = (st’ × n) ↔ ∃ st0, n0, n1.
JeK(st) = (st0 × n0) ∧
Je0K(st0) = (st’ × n1) ∧ n = n0 + n1
I
st: Anfangszustand; st0: Zustand nach Auswertung von e;
st’: Endzustand
A. Knapp, G. Schellhorn: Formale Methoden
392
Nichtterminierung
Nichtterminierende Ausdrücke
Formalisierung in KIV:
I
neuer Ausdruck nonterm
I
Ausdruckssemantik muß Relation statt Funktion werden (Alternative:
Funktion mit ⊥-Ergebnis)
J . K : AExp → State
|{z} → bool
| {z } × nat
| {z } × State
Startzustand
|
Endzustand
Ergebnis
{z
}
Prädikat kann auf (st, st’, n) zutreffen oder nicht
I
I
I
Axiom: ¬ JnontermK(st, st’, n)
Axiom für Addition lautet jetzt:
Je +_ e0K(st, st’, n) ↔ ∃ st0, n0, n1.
JeK(st, st0, n0) ∧
Je0K(st0, st’, n1) ∧ n = n0 + n1
muß jetzt auch bei booleschen Ausdrücken beachtet werden:
J . K : BExp → State × State × bool → bool
A. Knapp, G. Schellhorn: Formale Methoden
393
Ausnahmen (1)
Ein Ausdruck kann eine Ausnahme auslösen.
Formalisierung in KIV:
I
Minus auf natürlichen Zahlen: underflowexception (Konstante einer
Datenstruktur)
I
Berechnung erhält ein neues Ergebnis, den Ausführungsmodus mo :
Mode mit Mode = ok | underflowexception
I mo = ok bedeutet normale Beendigung
I mo = underflowexception bedeutet Sprung bis zum nächsten Catch
für diese Exception
I
Java Manual spricht informell von “normal completion” vs. “abrupt
completion” (mit einer “reason”, i. e. der Exception); für Java damit, da
auch break’s und return’s Sprünge sind:
Mode = ok | Exception(. . .) | Return | Break | Continue
A. Knapp, G. Schellhorn: Formale Methoden
394
Ausnahmen (2)
I
J . K : AExp →
State
| {z } × State
| {z } ×
Startzustand
I
Endzustand
Mode
| {z }
Ergebnismodus
×
nat
|{z}
→ bool
Ergebnis, falls
Modus ok
Analog für BExp und Prog:
J . K : BExp → State × State × Mode × bool → bool
J . K : Prog → State × State × Mode → bool
I
Neues Programmkonstrukt: try(p : Prog; mo : Mode; p’ : Prog)
I Führt p aus
I mo ist die Ausnahme die abgefangen wird
I
I
eigentlich nur vom Typ Exception, einfachheitshalber ein Modus
Wenn Ergebnismode von p gleich mo, dann wird p’ ausgeführt
A. Knapp, G. Schellhorn: Formale Methoden
395
Erweiterungen für Java
I
Einige Datentypen (byte, short, . . . ) mit vielen Funktionen
I
Algebraische Spezifikation der Klassenhierarchie c1 ≤ c2 (inkl. Interfaces)
I
body : Type → Prog für dynamischen Methodenlookup
I
Semantik eines Methodenaufrufs mit dynamischem Lookup
I
Statische Typisierungsfunktion: class : Id → Class
I
Damit: Wohlgetypte Programme (rekursiv definiertes Prädikat)
I
Speicher mit Paaren aus Referenz und Feldname oder Array-Index als
Schlüssel; Werte nur primitive Datentypen oder Referenzen
I
Wohlgetypte Speicher h mit class(h(i.f )) ≤ class(i.f )
I
Beweis, dass während des Ablaufs eines wohlgetypten Programms ein
wohlgetypter Speicher wohlgetypt bleibt
I
Für Verifikation (z. B. in KIV) : Parser, Kalkül
A. Knapp, G. Schellhorn: Formale Methoden
396
Zusammenfassung
I
Semantik von Programmen
I
Relationale und natürliche Semantik
I
I
I
I
Fixpunktsätze von Knaster-Tarski und Kleene
Äquivalenz der Semantiken
Lokale Variablen, Prozeduren, Speicher, Ausnahmen
Programmkorrektheit
I
I
I
partielle und totale Korrektheit
Hoare-Kalkül
Dynamische Logik
A. Knapp, G. Schellhorn: Formale Methoden
397
Interpreter aus natürlicher Semantik (1)
REC#(p; st) begin
if p = mkskip
else if p = mkabort
else if assignp(p)
else if compp(p)
else if ifp(p)
else if whilep(p)
then
then
then
then
then
skip
abort
st := st[p.id <- Jp.eK(st)]
REC#(p.p1; st); REC#(p.p2; st)
if Jp.bK(st)
then REC#(p.p1; st)
else REC#(p.p2; st)
then if Jp.bK(st)
then REC#(p.p; st); REC#(p; st)
else skip
end
I
I/O-Parameter st entspricht globaler Variable.
I
Selektoren .p1, .p2 für sequentielle Komposition, etc.
I
Es gilt: hREC#(p; st)ist = st’ ↔ JpK(st, st’)
A. Knapp, G. Schellhorn: Formale Methoden
398
Monotonie von Programmen
Kontexte C(X)
I
Programme mit Löchern“ X , z. B.
”
C(X) = if x = 3 then X; let y = 5 in X; y = x + 3
I
Einsetzen von Programm p in Kontext C(X): Ersetzung aller Vorkommen
von X durch p.
Sei C(X) ein Kontext. Wenn RJp1 K A ⊆ RJp2 K A, dann
RJC(p1 )K A ⊆ RJC(p2 )K A.
Satz
Beweisskizze
Strukturelle Induktion über C(X).
Ein rekursiv definierter Interpreter ergibt also automatisch eine monotone
Funktion (man kann eine Prozedur gar nicht rekursiv nicht aufrufen“).
”
I Deshalb werden in KIV rekursive Programme gegenüber induktiven
Definitionen bevorzugt (kein Monotonie-Beweis erforderlich).
I
I
Andere Systeme (Isabelle, HOL, Coq etc.) haben Unterstützung für die
Automatisierung des Monotoniebeweises (direkte Eingabe der Regeln).
A. Knapp, G. Schellhorn: Formale Methoden
399
Interpreter aus natürlicher Semantik (2)
I
Die KIV-Programmiersprache kann sich selbst interpretieren (aber:
Zirkelschluss, wenn nicht einmal direkt eine Semantik definiert ist).
I
Die KIV-Programmiersprache kann auch für beliebige andere
Programmiersprachen die Semantik liefern (etwa Java, Prolog).
I
Wenn mehrere Regeln auf dasselbe Programmkonstrukt anwendbar sind,
wird das Programm indeterministisch.
I
Der rekursive Interpreter ist für den Compilerbau ungeeignet, da man
Rekursion beim Compilieren loswerden will.
A. Knapp, G. Schellhorn: Formale Methoden
400
Iterative Programmauswertung
Small-Step-Semantik
I
hp, σi ⇒ hp0 , σ 0 i bedeutet: p geht vom Zustand σ in einem Schitt nach σ 0
”
und das dann übrigbleibende Restprogramm ist p0“
I
Die Granularität der Schritte ist frei wählbar.
I
gut geeignet für Interleaving-Parallelität
Abläufe entstehen durch Aneinanderhängen von Einzelschritten:
hp0 , σ0 i ⇒ hp1 , σ1 i ⇒ hp2 , σ2 i ⇒ . . .
I
Leeres Programm ε für Endzustände mit ε ; p = p ; ε = p
I
Ablauf terminiert, wenn Ablauf endlich lang und Ablauf endet mit dem
leeren Programm ε
A. Knapp, G. Schellhorn: Formale Methoden
401
Strukturell-operationelle Semantik (1)
Definition
Strukturell-operationelle Semantik (engl. structural operational
semantics, SOS) definiert eine “small-step”-Semantik eines Programms
p ∈ Prog durch die Ableitbarkeit von hp, σi ⇒ hp0 , σ 0 i für σ, σ 0 ∈ State im
folgenden Regelsystem Rsos .
(skipsos ) hskip, σi ⇒ hε, σi
(skipsos ) habort, σi ⇒ habort, σi
(assignsos ) h~x := ~a, σi ⇒ hε, σ{~x 7→ T J~aK σ}i
(seqsos )
hp1 , σi ⇒ hp01 , σ 0 i
hp1 ; p2 , σi ⇒ hp01 ; p2 , σ 0 i
A. Knapp, G. Schellhorn: Formale Methoden
402
Strukturell-operationelle Semantik (2)
(ifttsos ) hif b then p1 else p2 , σi ⇒ hp1 , σi,
falls JbK σ = tt
(ifffsos ) hif b then p1 else p2 , σi ⇒ hp2 , σi,
falls JbK σ = ff
(whilettsos ) hwhile b do p, σi ⇒ hp ; while b do p, σi,
(whileffsos ) hwhile b do p, σi ⇒ hε, σi,
falls JbK σ = tt
falls JbK σ = ff
Satz
Die strukturell-operationelle Semantik und die relationale Semantik
sind äquivalent:
I
hp, σi ⇒ · · · ⇒ hε, σ 0 i gdw. (σ, σ 0 ) ∈ RJpK.
I
hp, σi ⇒ hp1 , σ1 i ⇒ hp2 , σ2 i ⇒ . . .
A. Knapp, G. Schellhorn: Formale Methoden
gdw.
¬∃σ 0 . (σ, σ 0 ) ∈ RJpK.
403
Strukturell-operationelle Semantik: Lokale Variablen
Lokale Variablen komplexer als in natürlicher Semantik
I
Zusätzlich zum Zustand Stack, der lokalen Variablen Werte zuordnet und
die globalen Werte überlagert.
I
Der Stack kann in den Zustand integriert werden:
I push(λ, σ) legt die Variablenzuordnung λ = {~
x 7→ ~n} auf den Stack
I Pseudoprogramm pop(σ) deallokiert Variablenzuordnung
I Variablenzugriff push({~
x 7→ ~n}, σ)(x) = (σ{~x 7→ ~n})(x)
I
Damit Regel
(letsos )
I
hlet ~x = ~a in p, σi ⇒ hp ; pop(σ), push({~x 7→ T J~aK σ}, σ)i
Die Prozeduraufrufsregel wird nach demselben Prinzip definiert.
A. Knapp, G. Schellhorn: Formale Methoden
404
Strukturell-operationelle Semantik: Interleaving
Interleaving-Parallelität mit Konvention (ε k p) = (p k ε) = p:
(par1sos )
(par2
sos )
hp1 , σi ⇒ hp01 , σ 0 i
hp1 k p2 , σi ⇒ hp01 k p2 , σ 0 i
hp2 , σi ⇒ hp02 , σ 0 i
hp1 k p2 , σi ⇒ hp1 k p02 , σ 0 i
A. Knapp, G. Schellhorn: Formale Methoden
405
Strukturell-operationelle Semantik: Sequentielle Komposition
Das zur Small-Step-Semantik gehörige Programm ist fast tail-rekursiv (i. e. fast
eine Schleife). Einzige Ausnahme ist die sequentielle Komposition.
Dieses Problem läßt sich beseitigen, indem statt eines Programms ein Stack
von Programmen ps abgearbeitet wird:
Statt hp, σi ⇒ hp0 , σ 0 i also hp + ps, σi ⇒ hp0 + ps, σ 0 i
Das leere Programm kann entfallen (stattdessen leere Liste) und die seq-Regel
lautet einfach:
(seqsos )
hp ; p0 + ps, σi ⇒ hp + p0 + ps, σi
A. Knapp, G. Schellhorn: Formale Methoden
406
Interpreter aus strukturell-operationeller Semantik (1)
while ps 6= [] do
do let p = ps.first
in begin
ps := ps.rest;
ASTEP#(p; ps, st)
end
ASTEP#(p;
if
else if
else if
else if
else if
ps, st) begin
p = mkskip then
p = mkabort then
assignp(p) then
compp(p)
then
ifp(p)
then
else if whilep(p)
skip
ps := p + ps
st := st[p.id <- Jp.eK(st)]
ps := p.p1 + p.p2 + ps
if Jp.bK(st)
then ps := p.p1 + ps
else ps := p.p2 + ps
then if Jp.bK(st)
then ps := p.p + p + ps
else skip
end
A. Knapp, G. Schellhorn: Formale Methoden
407
Interpreter aus strukturell-operationeller Semantik (2)
Die while-Schleife ist ein Interpreter mit einem abstrakten Schritt
ASTEP#(ainstr) pro abstrakter Instruktion ainstr (sequentielle
Komposition, if, while etc.), der die Instruktion ausführt.
Verwaltet wird ein globaler Zustand aus Restprogramm (die Liste ps) und
momentaner Belegung.
Äquivalente Sichtweise: Automat mit abstrakter Zustandsmenge Q (hier:
Prog∗ × State) und einer Regelmenge für die Zustandsübergänge.
Die operationale Definition derartiger programmhafter“ Automaten ist eine
”
Grundidee von Abstract State Machines.
A. Knapp, G. Schellhorn: Formale Methoden
408
Compilation
I
Jede Instruktion ainstr wird compiliert: cinstrs = compile(ainstr).
I
Resultat ist eine Sequenz cinstrs von konkreten Maschineninstruktionen
(Bytecode/Assemblercode).
I
Benötigt wird dann ein konkreter Interpreter für diesen Code, ähnlich zum
Interpreter für abstrakte Anweisungen, mit einem CStep.
Es sollte (in etwa) für cinstrs = compile(ainstr) gelten:
I
Wenn AStep(ainstr) von einem Zustand as zum nächsten Zustand as0
führt,
I
dann führt auch CStep(cinstrs) von as zu as0 .
Probleme:
I
Meist mehrere konkrete Schritte für eine Instruktion.
I
Der Zustand cs des Maschinencode-Interpreters ist meist anders als eine
Liste von Programmen.
A. Knapp, G. Schellhorn: Formale Methoden
409
Indeterminismus
Indeterminismus (engl. non-determinism) ist oft nützlich und elegant für
Spezifikationen:
I
Ein Scheduler wählt einen Prozeß für den nächsten Schritt aus. Man will
aber davon abstrahieren, wie er genau implementiert ist.
I
Security: Irgendeine Smartcard soll einen nächsten Protokollschritt
machen.
I
Safety (Elbtunnel-Fallstudie): Das Fahrzeug fährt auf der rechten oder
linken Spur.
I
Der Benutzer macht irgendeine Eingabe.
I
Eine Zufallszahl wird gewählt.
I
Graph azyklisch gdw. ein Programm, das (indeterministisch) immer eine
der Kanten entlanggeht, terminiert immer.
I
Komplexitätstheorie: Eine Belegung von Variablen soll gefunden werden,
die einen booleschen Ausdruck wahrmacht: Man rate eine. (vgl. P vs. NP)
Beispiele subsumiert durch: Wähle irgendein Element aus einer Menge.
A. Knapp, G. Schellhorn: Formale Methoden
410
Indeterministische Auswahl: Syntax
Neues Programmkonstrukt choose ~x with b in p ifnone p0 für
indeterministische Auswahl
I
Wenn eine Belegung ~k für ~x existiert, die b im momentanen Zustand erfüllt,
dann binde die lokalen Variablen ~x an solche ~k und führe p aus.
I
Wenn b im momentanen Zustand für alle Belegungen von ~x falsch ist,
führe stattdessen p0 aus.
I
Konvention: ifnone wird weggelassen, wenn irrelevant (= abort
gesetzt).
I
Konstruktive Implementierung nur, wenn endlich viele ~x in Frage kommen.
A. Knapp, G. Schellhorn: Formale Methoden
411
Indeterministische Auswahl: Semantik
Natürliche Semantik
(choosettns )
(chooseffns )
hp, σ{~x 7→ ~k}i → σ 0
hchoose x with b in p ifnone p0 , σi → σ 0 {~x 7→ σ(~x)}
falls JbK σ{~x 7→ ~k} = tt
hp0 , σi → σ 0
hchoose x with b in p ifnone p0 , σi → σ 0
falls ∀~k . JbK σ{~x 7→ ~k} = ff
,
,
Relationale Semantik
RJchoose x with b in p ifnone p0 K A = {(v, v0 ) |
((∀~k . T JbK A v{~x 7→ ~k} = ff ) ∧ (v, v0 ) ∈ RJp0 K A)
∨ (∃~k . T JbK A v{~x 7→ ~k} = tt ∧ (v, v00 ) ∈ RJpK A v{~x 7→ ~k} ∧
v0 = v00 {~x 7→ v(~x)})}
A. Knapp, G. Schellhorn: Formale Methoden
412
Indeterministische Auswahl: Spezialfälle
Zwei typische Spezialfälle lassen sich als Abkürzungen definieren:
I
Indeterministische Auswahl zwischen zwei Programmen (mit b neu)
p1 or p2 für
choose b with true in if b then p1 else p2
I
Zufallszuweisung (mit x0 neu)
x := ? für choose x0 with true in x := x0
Die Semantik von p1 or p2 ergibt sich zu
(or1ns )
hp1 , σi → σ 0
hp1 or p2 , σi → σ 0
(or2ns )
hp2 , σi → σ 0
hp1 or p2 , σi → σ 0
bzw.
RJp1 or p2 K A = RJp1 K A ∪ RJp2 K A
A. Knapp, G. Schellhorn: Formale Methoden
413
Beschränkter Indeterminismus
Satz
Wenn man in Programmen zwar or, aber kein choose erlaubt, erhält
man beschränkten Indeterminismus: jedes solche Programm kann nur endlich
viele Endzustände erreichen.
Beweisskizze Zuerst Nachweis für p ↓ n durch Induktion über n; damit hat man eine
Induktionsvoraussetzung für Aufrufe. Dann Induktion über die Struktur von
Programmen.
I
Mit Hilfe von n := 0 or n := 1 or . . . or n := k Auswahl aus k
Elementen.
I
Beschränkter Indeterminismus ist gutartiger“ als unbeschränkter.
”
A. Knapp, G. Schellhorn: Formale Methoden
414
Indeterminismus: Terminierungsproblem (1)
Beobachtung: RJskip or abortK A = RJskipK A ∪ ∅ = RJskipK A.
I
angelische Semantik (engl. angelic semantics)
Unter welchen Umständen ist es sinnvoll, daß skip und skip or abort
gleichwertig sind?
I
Für partielle Korrektheit ist die angelische Semantik ausreichend: Es gilt
{ϕ} skip or abort {ψ} gdw. {ϕ} skip {ψ} gdw. ϕ → ψ .
I
Für Komplexitätstheorie auch ausreichend: das Richtige kann geraten
werden.
I
Für garantierte Terminierung (und totale Korrektheit) nicht das Richtige.
Für totale Korrektheit sind mögliche und sichere Nichtterminierung gleich.
Damit dämonische Semantik (engl. demonic semantics), in der
RJskip or abortKdem A = RJabortKdem A.
A. Knapp, G. Schellhorn: Formale Methoden
415
Indeterminismus: Terminierungsproblem (2)
I
Dämonische Semantik sehr verbreitet in der Literatur; auch auch für
parallele Syteme verwendet (CSP).
I
Volle Freiheit gibt erratische Semantik (engl. erratic semantics).
I
Genügt allerdings für parallele Programme oft auch nicht: evtl. wird
Fairness (jede Wahl kommt mindestens irgendwann dran) relevant.
I
Grundlage sowohl der dämonischen als auch der erratischen Semantik:
Die Menge der Zustände für die ein Programm garantiert terminiert.
Das Terminierungsproblem ist nur relevant für indeterministische Programme.
Wenn man nur deterministische Programme hat, ist Nichterminierung
äquivalent dazu, daß es keinen erreichbaren Endzustand gibt.
A. Knapp, G. Schellhorn: Formale Methoden
416
Garantierte Terminierung (1)
Definition
Der (garantierte) Terminierungsbereich eines Programms p ist die
durch die folgenden Regeln beschriebene Menge RJpK↓ A:
v ∈ RJskipK↓ A
v ∈ RJp1 K↓ A (v0 ∈ RJp2 K↓ A)(v,v0 )∈RJp1 K A
v ∈ RJp1 K↓ A
v ∈ RJif b then p1 else p2 K↓ A
v ∈ RJp1 ; p2 K↓ A
,
T JbK A v = tt
v ∈ RJpK↓ A (v0 ∈ RJwhile b do pK↓ A)(v,v0 )∈RJpK A
v ∈ RJwhile b do pK↓ A
v{~x,~y 7→ T J~tK A v, v(~z)} ∈ RJpK↓ A
v ∈ RJq(~t; ~z)K↓ A
,
,
T JbK A v = tt
q(~x; ~y) p ∈ Decl
(und analoge Regeln für if und while, wenn b falsch)
A. Knapp, G. Schellhorn: Formale Methoden
417
Garantierte Terminierung (2)
(v{~x 7→ ~k} ∈ RJpK↓ A)~k∈K
,
v ∈ RJchoose ~x with b in p ifnone p0 K↓ A
wobei K = {~k | T JbK A v{~x 7→ ~k} = tt}, falls K 6= ∅
v ∈ RJp0 K↓ A
v ∈ RJchoose ~x with b in p ifnone p0 K↓ A
falls {~k | T JbK A v{~x 7→ ~k} = tt} = ∅
,
I
Die Regeln für sequentielle Komposition und while haben soviele
Prämissen, wie p1 bzw. p Ergebniszustände liefert. Die Regel für choose
hat soviele Prämissen, wie es Auswahlmöglichkeiten für ~k gibt; bei
unbeschränktem Indeterminismus gibt es also evtl. unendlich viele.
I
Abgeleitete Regel:
v ∈ RJp1 K↓ A v ∈ RJp2 K↓ A
A. Knapp, G. Schellhorn: Formale Methoden
v ∈ RJp1 or p2 K↓ A
418
Monotonie und Stetigkeit des Terminierungsbereichs
Satz
Die induktive Definition des Terminierungsbereichs definiert einen
monotonen Operator. Wenn jedes choose nur eine endliche Auswahl trifft, so
ist der Operator stetig.
Beweisskizze Nur positive Aufrufe in den Prämissen. Wenn choose nur eine
endliche Auswahl trifft, hat jedes Programm nur endlich viele Endzustände, also hat
jede Regel nur endlich viele Prämissen.
I
Damit ist der Terminierungsbereich nach dem Satz von Knaster-Tarski
wohldefiniert.
I
Die Nicht-Stetigkeit macht den Satz von Kleene nicht anwendbar.
Insbesondere ist der Terminierungsbereich nicht einfach (per Iteration über
Schleifenzahl oder Rekursionstiefe) axiomatisierbar.
A. Knapp, G. Schellhorn: Formale Methoden
419
Unbeschränkter Indeterminismus: Beispiel
while m 6= 1
do if m = 0
then choose m’ with m’ > 0
in m := m’
else m := m -1
I
Wenn mit m > 0 gestartet, zählt die Schleife bis 1 herunter.
I
Für m = 0 setzt der erste Durchlauf m auf einen beliebigen Wert > 0.
I
Also: Die Schleife terminiert immer: RJwhile . . . K↓ A = SA (alle
Zustände).
I
Aber: Es gibt kein n, sodaß die Schleife nach höchstens n Schritten
terminiert.
I
Das erste Abwickeln für m = 0 ergibt unendlich viele Prämissen (eine mit m
= 1, eine mit m = 2 usw.). Die erste Prämisse braucht 0
Regelanwendungen, die nächste 1 usw. zum Beweis, daß Terminierung
gilt.
A. Knapp, G. Schellhorn: Formale Methoden
420
Erratische Semantik (1)
Definition
Die erratische Semantik RJpK⊥ A eines Programms p ist eine
Relation auf (SA ∪ {⊥}) × (SA ∪ {⊥}), wobei ⊥ für Nichtterminierung steht.
Sie ist gegeben durch
RJpK⊥ A = RJpK A ∪ (((SA ∪ {⊥}) \ RJpK↓ A) ×{⊥}) .
|
{z
}
Nichtterminierung möglich
I
Das Paar (⊥, ⊥) ist immer in der Semantik: Wenn schon vorher nicht
”
terminiert, dann kommt das Programm nicht dran, und es bleibt bei
Nichtterminierung“.
A. Knapp, G. Schellhorn: Formale Methoden
421
Erratische Semantik (2)
I
Für die meisten Programmkonstrukte gelten die alten Gesetze, es kommt
immer nur (⊥, ⊥) hinzu. Beispiele:
I RJp ; p K A = RJp K A ; RJp K A
1
2 ⊥
1 ⊥
2 ⊥
I Für v 6= ⊥ gilt: (v, v0 ) ∈ RJif b then p else p K A gdw.
1
2 ⊥
Wenn T JbK A v = tt, dann (v, v0 ) ∈ RJp1 K⊥ A, sonst (v, v0 ) ∈ RJp2 K⊥ A.
I
Deshalb sind die Kalkülregeln fast dieselben wie für Diamonds.
I
Nur für Schleifen und Rekursion gibt es keine einfache Definition: man
braucht separate Definitionen.
A. Knapp, G. Schellhorn: Formale Methoden
422
Dämonische Semantik
Das Element ⊥ drückt Unkenntnis über das Ergebnis des Programmlaufs aus
(i.e. Unspezifiziertheit des Endzustands, kann Nichtterminierung, aber auch
etwas anderes sein).
Definition
Die dämonische Semantik RJpKdem A eines Programms p ist
eine Relation auf (SA ∪ {⊥}) × (SA ∪ {⊥}), gegeben durch
RJpKdem A = RJpK A ∪ ((SA ∪ {⊥}) \ RJpK↓ A) × (SA ∪ {⊥}) .
{z
} |
{z
}
|
Nichtterminierung möglich
jedes Ergebnis
I
Recht unintuitiv ist, daß in RJpKdem A immer alle Paare (⊥, v0 ) enthalten
sind.
I
Für beschränkten Indeterminismus direkt als induktive Relation definierbar.
I
Es gilt RJabortKdem A = (SA ∪ {⊥}) × (SA ∪ {⊥}) und damit wie
gewünscht: RJskip or abortKdem A =
RJskipKdem A ∪ RJabortKdem A = RJabortKdem A.
A. Knapp, G. Schellhorn: Formale Methoden
423
wp-Kalkül
Wir addieren einen neuen Operator h|p|iϕ zur Logik mit der Bedeutung: p
terminiert immer und es gilt anschließend ϕ:
A, v |= h|p|iϕ ⇔ v ∈ RJpK↓ A ∧ ∀(v, v0 ) ∈ RJpK A . A, v0 |= ϕ
I
Damit befinden wir uns nicht mehr in der dynamischen Logik, sondern im
wp-Kalkül (Edsger W. Dijkstra).
I
Den Operator findet man häufig als wp(p, ϕ) geschrieben, da er die
schwächste Vorbedingung (engl. weakest precondition) beschreibt, sodaß
nach p ϕ gilt.
I
[p]ϕ findet man auch als die schwächste liberale Vorbedingung (engl.
weakest liberal precondition) wlp(p, ϕ).
A. Knapp, G. Schellhorn: Formale Methoden
424
Kalkülregeln für totale Korrektheit
I
Für deterministische Konstrukte (Zuweisung, sequentielle Komposition,
if, let) gelten dieselben Kalkülregeln für wp wie für Diamonds.
I
Für Schleifen und Aufrufe weiterhin noethersche Induktion, insbesondere
ist die Invariantenregel für totale Korrektheit immer noch korrekt (die
Größe der Variable x muß jetzt für jeden Durchlauf durch den
Schleifenrumpf abnehmen).
Korrektheitsnachweis: Es gelten im wesentlichen dieselben Semantikregeln für
RJpK⊥ A wie für RJpK A.
A. Knapp, G. Schellhorn: Formale Methoden
425
Kalkülregel für Schleifen
I
Für unbeschränkt indeterministische Programme gelten nur noch die
Implikationen
∃n . h|loop if b then p times n|i(¬b ∧ ϕ) → h|while b do p|iϕ
∃n . h|q(~x; ~y) : n|iϕ → h|q(~x; ~y)|iϕ
und nicht mehr die Äquivalenzen.
I
Die Regel (Lh()i2 ) wäre für wp inkorrekt.
I
Nur relevant, wenn man als Voraussetzung in einer Aussage die
Terminierung eines unbeschränkt indeterministischen Programms hat
(sollte man vermeiden, praktisch fast nicht relevant).
I
Nicht mehr vollständig: ein für den Zustand σ terminierendes Programm p
definiert eine (beliebige) noethersche Ordnung (über die man induzieren
müßte) durch die Small-Step-Semantik:
σ 00 ≺ σ 0 ⇔ hp, σi ⇒ · · · ⇒ hp0 , σ 0 i ⇒ · · · ⇒ hp00 , σ 00 i ⇒ . . .
A. Knapp, G. Schellhorn: Formale Methoden
426
Kalkülregeln für or
(R[or])
(Rhori)
(Rh|or|i)
Γ ⇒ [p1 ]ϕ, ∆ Γ ⇒ [p2 ]ϕ, ∆
Γ ⇒ [p1 or p2 ]ϕ, ∆
Γ ⇒ hp1 iϕ, hp2 iϕ, ∆
Γ ⇒ hp1 or p2 iϕ, ∆
Γ ⇒ h|p1 |iϕ, ∆ Γ ⇒ h|p2 |iϕ, ∆
Γ ⇒ h|p1 or p2 |iϕ, ∆
Definitionen von (L . . . or . . . ) analog
A. Knapp, G. Schellhorn: Formale Methoden
427
Kalkülregeln für choose
(R[choose])
(Rhchoosei)
(Rh|choose|i)
b{~x 7→ ~y}, Γ ⇒ [p{~x 7→ ~y}]ϕ, ∆ ∀~x . ¬b, Γ ⇒ [p0 ]ϕ, ∆
Γ ⇒ [choose ~x with b in p ifnone p0 ]ϕ, ∆
Γ ⇒ ∃~y . b{~x 7→ ~y} ∧ hp{~x 7→ ~y}iϕ, (∀~x . ¬b) ∧ hp0 iϕ, ∆
Γ ⇒ hchoose ~x with b in p ifnone p0 iϕ, ∆
b{~x 7→ ~y}, Γ ⇒ h|p{~x 7→ ~y}|iϕ, ∆ ∀~x . ¬b, Γ ⇒ h|p0 |iϕ, ∆
Γ ⇒ h|choose ~x with b in p ifnone p0 |iϕ, ∆
Die Variablen ~y sind neu; Definitionen von (L. . . choose . . . ) analog
A. Knapp, G. Schellhorn: Formale Methoden
428
Induktive Semantik und Programmsemantik
Auch indeterministische Interpreter sind sinnvolle Definitionen:
Satz
Sei C(X) ein Kontext. Dann gilt:
I
Wenn RJp1 K A ⊆ RJp2 K A, dann RJC(p1 )K A ⊆ RJC(p2 )K A.
I Wenn alle Ergebnisse (i. e. Endzustände) von p auch Ergebnisse von p
1
2
sind, so sind alle Ergebnisse von C(p1 ) auch Ergebnisse von C(p2 ).
I
Wenn RJp1 K↓ A ⊆ RJp2 K↓ A, dann RJC(p1 )K↓ A ⊆ RJC(p2 )K↓ A.
I Wenn p häufiger terminiert als p , so terminiert auch C(p ) häufiger als
2
1
2
”
C(p1 )“.
Korollar
Die durch die induktiven Relationen definierte Programmsemantik
stimmt mit der des rekursiven Interpreters REC# (erweitert um choose)
überein. Es gilt:
hREC#(p; st)ist = st’ ↔ JpK(st, st’)
h|REC#(p; st)|itrue ↔ JpK ↓(st)
A. Knapp, G. Schellhorn: Formale Methoden
429
Zusammenfassung
I
Semantik von Programmen
I
Relationale, natürliche und strukturell-operationelle Semantik
I
I
I
I
Lokale Variablen, Prozeduren, Speicher, Ausnahmen
Programmkorrektheit
I
I
I
I
Fixpunktsätze von Knaster-Tarski und Kleene
Äquivalenz der Semantiken
partielle und totale Korrektheit
Hoare-Kalkül
Dynamische Logik
Indeterminismus
I
I
angelische, dämonische, erratische Semantik
wp-Kalkül
A. Knapp, G. Schellhorn: Formale Methoden
430
Motivation: Datentypen mit Zuständen
Bisher: Datenstrukturen werden als algebraische Datentypen spezifiziert. Diese
sind zustandslos (bzw. haben einen Zustand als Argument/Resultat, der damit
immer auch sichtbar ist).
Andere Sichtweise: Ein abstrakter Datentyp bietet Funktionalität (z. B. durch
Methoden) nach außen an, hat aber einen impliziten internen Zustand, der nur
über die Funktionen zugänglich ist (information hiding). Die Funktionen sind
durch Kontrakte spezifiziert.
Die algebraische Sichtweise entspricht stärker der Sicht funktionaler
Programmiersprachen, die zweite Sichtweise eher der objektorientierten Sicht
(aber auch dort gibt es zustandslose Interfaces). Auch für die zweite Sicht
werden zur Definition des Zustands algebraische Datentypen benötigt.
A. Knapp, G. Schellhorn: Formale Methoden
431
Spezifikation von Kontrakten
Es gibt drei Möglichkeiten einen Kontrakt zu definieren:
I
per Vorbedingung ϕ und Nachbedingung ψ ;
I
in einer gemeinsamen relationalen Spezifikation Op;
I
als Programm mit einem choose.
Beispiel (Revertieren einer Liste):
I
Eingabevariable: x
I
Ausgabevariable: x
I
Vorbedingung: x = x0
I
Nachbedingung: x = reverse(x0 )
A. Knapp, G. Schellhorn: Formale Methoden
432
Kontrakt als Relation: Beispiel
Spezifikation als Relation: Op(x, x0 ) = ∃x0 . x = x0 ∧ x0 = reverse(x0 )
I Benötigt wird Konvention für Start- und Endwert einer Variable:
I Hier wie in Z: x bezeichnet den Startwert, x0 den Endwert
I VDM: pre(x) für den alten, x für den neuen
I JML: \old(x) und x für den neuen
I
Die Relation ist die Konjunktion von Vor- und Nachbedingung, wobei in der
Nachbedingung x0 statt x genommen wird.
I
In der Relation stehen nur die Programmvariablen.
I
Hilfsvariable x0 wird existenzquantifiziert, fällt weg. Im Beispiel kann zu
x0 = reverse(x) vereinfacht werden.
I
Relationale Spezifikation ist etwas eleganter als getrennte Vor- und
Nachbedingung (Programmvariablen klar, keine Hilfsvariablen).
A. Knapp, G. Schellhorn: Formale Methoden
433
Kontrakte als Relationen
I
Allgemeine Definition einer Relation für Vorbedingung ϕ und
Nachbedingung ψ also:
Op(~x,~x0 ) = ∃~x0 . ϕ ∧ ψ{~x 7→ ~x0 }
wobei ~x0 alle Nicht-Programmvariablen sind.
I
Die (implizite) Vorbedingung ist jetzt
pre(Op) = ∃~x0 . Op(~x,~x0 )
Schreibweise in der Spezifikationssprache Z:
Op
∆~x
ϕ
ψ{~x 7→ ~x0 }
A. Knapp, G. Schellhorn: Formale Methoden
434
Kontrakt mit choose
Beobachtung: Mit folgendem indeterministischen Programm kann man den
Kontrakt trivial erfüllen:
Op(x; x0 ) choose x0 with x0 = reverse(x)
in x := x0 ifnone chaos(x)
Dabei ist chaos(~x) ein Programm, das irgendetwas tut, wenn die
Vorbedingung nicht erfüllt ist:
chaos(~x) = choose ~x0 , boolvar with true
in if boolvar then abort else ~x := ~x0
Das choose-Program ist also so etwas wie die allgemeinste
”
Implementierung“.
Im Beispiel wird chaos(x) nie aufgerufen, da jede Liste revertiert werden kann;
das Programm kann vereinfacht werden zu
Op(; x) x := reverse(x)
A. Knapp, G. Schellhorn: Formale Methoden
435
Operationale Definition von Kontrakten
Ein Kontrakt, der gegeben ist durch
I
eine Relation Op oder
I
Vor- und Nachbedingungen ϕ, ψ mit Variablen ~x
kann auch operational spezifiziert werden als
Op(~x; ~x0 ) choose ~x0 with Op(~x,~x0 )
in ~x := ~x0 ifnone chaos(~x)
bzw. als
Op(~x; ~x0 ) choose ~x0 with ∃~x0 . ϕ ∧ ψ{~x 7→ ~x0 }
in ~x := ~x0 ifnone chaos(~x)
A. Knapp, G. Schellhorn: Formale Methoden
436
Operationale und relationale Spezifikationen (1)
Operationale Spezifikationen
I
Vorteil: Ein abstraktes Programm muß bei falscher Vorbedingung nicht mit
chaos reagieren. Alternativen z. B. abort oder “contract exception”.
Spezifikation mit Programmen ist etwas mächtiger als mit Kontrakten.
I
Vorteil: Spezifikation kann Kontrollstruktur haben (sequentielle
Komposition, Fallunterscheidung etc.)
I
Vorteil (?): x := reverse(x) ist für Informatiker natürlicher“ als
”
0
x = reverse(x)
I
Nachteil: Die allgemeine Übersetzung eines Kontrakts in ein
choose-Programm ist recht konkret: Relationen abstrakter
A. Knapp, G. Schellhorn: Formale Methoden
437
Operationale und relationale Spezifikationen (2)
Relationale Spezifikationen
I
Vorteil: Reine Prädikatenlogik (keine Big-Step-Semantik etc.)
I
Nachteil: Frameproblem:
Der Zustand sei x1 , x2 , . . . , xn , Operation Op1 verdoppele x1 :
I
operational
x1 := 2 ∗ x1
I
relational
Op1 (x1 , . . . , xn , x01 , . . . , x0n ) ↔ x01 = 2 ∗ x1 ∧ x02 = x2 ∧ . . . ∧ x0n = xn
A. Knapp, G. Schellhorn: Formale Methoden
438
Abstrakte Datentypen
Definition
I
Ein abstrakter Datentyp (St, Init, (Opi )i∈I ) besteht aus
einer Zustandsmenge St;
I
Typischerweise besteht St aus der Belegung eines Vektors von Variablen mit
algebraisch spezifizierten Datentypen.
I
einer Menge von Initialzuständen Init ⊆ St;
I
Einer Familie (für i ∈ I ) von Operationen Opi ⊆ Ini × St × St × Outi .
I
I
Operationen entsprechen (relational definierten) Kontrakten.
Jede Operation
I
I
I
hat Eingaben aus Ini (kann für einzelne Operationen wegfallen);
modifiziert den Zustand aus St;
und hat eine Ausgabe aus Outi (kann für einzelne Operationen wegfallen).
A. Knapp, G. Schellhorn: Formale Methoden
439
Abstrakte Datentypen: Beispiele (1)
Ein Java-Objekt kann als abstrakter Datentyp aufgefaßt werden:
I
St ist die Menge der möglichen Belegungen der Felder.
I
Init sind die Ergebnisse der Konstruktoren.
I
Opi sind Kontrakte für die Methoden des Objekts.
I
Die Felder des Objekts sind privat (nur über die Methoden zugänglich).
Ein Java-Klasse kann als abstrakter Datentyp aufgefasst werden:
I
St ist die Menge der möglichen Objektmengen einer Klasse.
I
Init (einelementig) ist das Ergebnis der statischen Initialisierung.
I
Opi sind Kontrakte für die Methoden der Klasse.
A. Knapp, G. Schellhorn: Formale Methoden
440
Abstrakte Datentypen: Beispiele (2)
Ein ganzes Softwaresystem kann als abstrakter Datentyp aufgefaßt werden.
I
St ist die Menge der Systemzustände (z. B. die Menge der möglichen
Instanzen eines Konzeptmodells).
I
Init sind die Initialzustände.
I
Opi sind Kontrakte für die Systemoperationen.
Ein Programmierspracheninterpreter kann als abstrakter Datentyp aufgefaßt
werden.
I
St besteht aus Variablenbelegung und dem abzuarbeitendem
Restprogramm.
I
Init legt das Gesamtprogramm fest, das zu bearbeiten ist (ein
Initalzustand pro Programm).
I
Opi verarbeitet eine Instruktion.
A. Knapp, G. Schellhorn: Formale Methoden
441
Algebraischer Datentyp queue
Gegeben seien algebraisch spezifizierte Queues von Integers (hier als Instanz
von Listen, es geht auch direkt) mit Operationen:
I
Sorte intqueue
I
Konstante emq (die leere Queue)
I
Funktion enq : queue × int → queue (hinten an die Queue anfügen)
I
Funktion deq : queue × queue (vorne wegnehmen)
I
Funktion hd : queue × int (vorderstes Element)
A. Knapp, G. Schellhorn: Formale Methoden
442
Abstrakter Datentyp queue
I
Zustand = eine Variable q vom Typ queue
I
Initialzustand: q = emq
I
int⊥ = mki⊥( . .i : int) | ⊥
I
(freier Datentyp für das Resultat von DEQ)
Zwei Operationen:
I ENQ ⊆ int × queue × queue mit Kontrakt:
ENQ(i, q, q’) ↔ q’ = enq(i, q)
I
DEQ ⊆ queue × queue × int⊥ mit Kontrakt:
DEQ(q, q’, i⊥) ↔ (q 6= [] ⊃
q’ = deq(q) ∧ i⊥ = mki⊥(hd(q));
q’ = q ∧ i⊥ = ⊥)
I
⊥ könnte in einer Implementierung eine Exception werden, aber auch ein
Spezialwert bleiben.
Wenn der Zustand einfach eine Variable eines Datentyps ist, ergibt sich fast
eine Duplikation des algebraischen Datentyps.
A. Knapp, G. Schellhorn: Formale Methoden
443
Abstrakte Datentypen: Verwendung
I
Ein abstrakter Datentyp wird immer innerhalb einer Umgebung verwendet.
I
Die Umgebung kann sehr verschieden sein:
I
I
I
I
I
ein Programm, wenn ein Objekt oder eine Klasse definiert wird;
eine einfache Kontrollschleife für einen Interpreter;
Benutzer, die die Operationen per Knopfdruck aufrufen;
für ein System: eine beliebige Systemumgebung aus anderen Rechnern
(Clients, die auf einen Server zugreifen, etc.)
Zwei Grundannahmen:
I
I
Operationen sind atomar ( Transaktionscharakter“);
”
beobachtet werden nur Eingabe und Ausgabe, der Zustand ist unsichtbar.
A. Knapp, G. Schellhorn: Formale Methoden
444
Ablauf eines abstrakten Datentyps
Definition
Ein (endlicher) Ablauf eines abstrakten Datentyps
(St, Init, (Opi )i∈I ) ist eine Folge
k ,in ,out
kn−1 ,inn−1 ,outn−1
k ,in ,out
1
1
1
0
0
0
−−
−−→
σ2 −→ . . . −→ σn−1 −−−−−−−−−−→ σn
−−
−−→
σ1 −−
σ0 −−
mit
I
σ0 ∈ Init
I
(ini , σi , σi+1 , outi ) ∈ Opki für 0 ≤ i < n.
I
Der letzte Schritt kann auch σn−1 −−−−−−→ ⊥ sein, falls die Vorbedingung
verletzt wurde, i. e. falls
kn−1 ,inn−1
¬∃outn−1 , σn . (inn−1 , σn−1 , σn , outn−1 ) ∈ OPkn−1
gilt.
A. Knapp, G. Schellhorn: Formale Methoden
445
Abstract State Machines (1)
Definition
Eine Abstract State Machine (ASM) (Σ, Init, (Rulei )i∈I , Fin)
besteht aus
I
einer (endlichen) prädikatenlogischen Signatur Σ;
I Daraus ergibt sich die Zustandsmenge als alle Σ-Algebren St = Alg(Σ).
I
einer Menge von Anfangszuständen Init ⊆ St;
I
einer Menge von Regeln Rulei , die den Zustand modifizieren;
I Regeln sind Programme mit choose und Funktionsmodifikation
f (t) := t0 .
I
einer Menge Fin ⊆ St von Endzuständen.
I
Beobachtung des Endzustands
A. Knapp, G. Schellhorn: Formale Methoden
446
Abstract State Machines (2)
Entwickelt von Yuri Gurevich (1984)
I
ASMs sind eine Instanz der operationalen Idee für Kontrakte.
I
Algebren als Zustände sind so allgemein wie möglich
I
Theoretische Untersuchungen zur Frage: Was ist ein Algorithmus?
I
Ein-/Ausgabe muß in den Zustand integriert werden.
I
Eine Σ-Algebra belegt jetzt modifizierbare Funktionen (endlich viele).
I
Eine modifizierbare Konstante ist dasselbe wie eine Programmvariable.
I
Eine modifizierbare Funktion entspricht einer (second-order) Variable für
Funktionen.
I
Funktionsmodifikation f (t) := t0 entspricht
f := (λ x . x = t ⊃ t0 ; f (x)).
I f (t) := t 0 kann man auch so in KIV eintippen.
I
Es gibt Erweiterungen von ASMs für Parallelität: forall x with b do p
A. Knapp, G. Schellhorn: Formale Methoden
447
Verfeinerung
Die Grundfrage, auf die Verfeinerung (engl. refinement) eine Antwort gibt, ist:
Gegeben eine abstrakte Beschreibung eines Systems. Wie kommt man
systematisch und schrittweise zu einer korrekten Implementierung?
Verfeinerung gibt es in einer großen Zahl von Varianten:
I
für algebraische (zustandslose) Systeme
(algebraisches Refinement, Moduln)
I
für parallele (ereignisbasierte) Systeme
(CSP-Refinement/(Bi-)Simulation)
I
für zustandsbasierte Datentypen:
I
I
I
relational: Data Refinement
operational: ASM Refinement
für Automaten: IO-Automata Refinement
A. Knapp, G. Schellhorn: Formale Methoden
448
Data Refinement (1)
Grundidee:
I
Gegeben sei der ADT (ASt, AInit, (AOpi )i∈I ).
I
Der Zustand in ASt ist nach außen hin unsichtbar. Er kann deshalb durch
einen konkreten Zustand ersetzt werden, wenn sich die Funktionalität nach
außen hin nicht ändert.
Sei also ein konkreterer Datentyp“ (CSt, CInit, (COpi )i∈I ) gegeben.
”
I Der konkrete Datentyp ist eine korrekte Verfeinerung des abstrakten, wenn
jede Umgebung, die annimmt, den abstrakten Datentyp zu verwenden, es
nicht bemerken kann, daß sie in Wirklichkeit den konkreten verwendet.
I
I
Es gilt also das Substitutionsprinzip, daß alle abstrakten durch konkrete
Operationen ersetzt werden können.
I
Das Verfahren kann iteriert werden und damit ein schrittweiser Übergang
von abstrakter Spezifikation zu konkreter Implementierung erreicht
werden.
A. Knapp, G. Schellhorn: Formale Methoden
449
Data Refinement (2)
Definition
Gegeben seien zwei abstrakte Datentypen
ADT = (ASt, AInit, (AOpi )i∈I ) und CDT = (CSt, CInit, (COpi )i∈I ). Dann heißt
CDT eine korrekte Verfeinerung von ADT , wenn für jeden Ablauf von CDT ein
passender abstrakter Ablauf existiert: Wenn
k ,in ,out
k ,in ,out
kn−1 ,inn−1 ,outn−1
1
1
1
0
0
0
−−
−−→
cσ2 −→ . . . −→ cσn−1 −−−−−−−−−−→ cσn
−−
−−→
cσ1 −−
cσ0 −−
ein Ablauf von CDT ist, dann gibt es Zustände aσ0 , . . . , aσn ∈ ASt, sodaß
k ,in ,out
k ,in ,out
kn−1 ,inn−1 ,outn−1
0
0
0
1
1
1
aσ0 −−
−−
−−→
cσ1 −−
−−
−−→
aσ2 −→ . . . −→ aσn−1 −−−−−−−−−−→ aσn
(mit denselben Ein- und Ausgaben) ein Ablauf von ADT ist.
I
Der konkrete Datentyp kann durchaus weniger Abläufe haben: Er ist dann
weniger indeterministisch.
A. Knapp, G. Schellhorn: Formale Methoden
450
Data Refinement (3)
I
Bei Data Refinement müssen beide Datentypen dieselbe Granularität der
Operationen und dieselben Ein-/Ausgaben haben.
I
Erweiterungen betreffen also:
I
I
I
Verkleinerung (oder allgemeiner: Wechsel) der Granularität
Wechsel der Datenrepräsentation für Ein-/Ausgaben.
Andere Fragestellungen sind:
I
I
Was ist mit unendlichen Abläufen? (relevant?)
Will man auch Deadlocks modellieren?
A. Knapp, G. Schellhorn: Formale Methoden
451
Data Refinement: Beispiel
queue wird durch einen Speicher st und einen Zeiger r, der auf den Anfang
der Liste zeigt, repräsentiert. Der konkrete Datentyp wird gleich durch ein
Programm implementiert, nicht zuerst spezifiziert.
I
Der Speicher hat als Schlüssel References (Typ ref) mit null : ref.
I
Der Speicher enthält als Daten (freier Datentyp):
conscell = . × . (. .1 : int; . .2 : ref)
I
Die null-Referenz entspricht einer leeren Queue.
I
enq# relativ einfach
I
deq# muß die Verkettung bis zum Ende ablaufen, dann hinten anhängen.
A. Knapp, G. Schellhorn: Formale Methoden
452
Data Refinement: Repräsentationsrelation
Benötigt wird eine Repräsentationsrelation (oder auch eine Simulation,
Kopplungsinvariante, Abstraktionsrelation engl. simulation, representation
relation, coupling invariant) R ⊆ ASt × CSt zwischen den beiden Zuständen.
R(aσ, cσ) besagt: Der Zustand cσ repräsentiert den abstrakten Zustand aσ . Die
Relation ist meist eine partielle Funktion (deshalb auch Abstraktionsfunktion):
ein konkretes Datum repräsentiert höchstens ein abstraktes.
A. Knapp, G. Schellhorn: Formale Methoden
453
Repräsentationsrelation: Beispiel (1)
Im Speicher st steht unter r eine lineare, nichtzyklische Kette von Zellen,
deren Inhalte die Inhalte der Queue q sind.
abs(r, st, q) besagt Speicherinhalt unter r in st repräsentiert die Queue
”
q“. Formale Definition:
abs(r, st, q) ↔
(r = null ⊃
q = emq;
( r ∈ st (: r ist allokiert :)
∧ ¬ cyclic(r, st) (: kein zyklischer Pfad von r aus :)
∧ q 6= emq
∧ hd(q) = st[r].1 (: erstes Datum paßt :)
∧ abs(st[r].2, st, deq(q)))); (: Rest paßt :)
A. Knapp, G. Schellhorn: Formale Methoden
454
Repräsentationsrelation: Beispiel (2)
cyclic(r, st) bedeutet, daß es einen Pfad im Speicher gibt mit erstes
Element = r, in dem sich ein Element wiederholt.
Für die formale Definition werden Listen von Referenzen x benötigt. Damit
rekursive Definition von path(x, st) ( x ist ein Pfad im Speicher st“):
”
path-empty: ¬ path([], st);
path-one: path(r ’, st) ↔ r ∈ st ∧ r 6= null;
path-cons: path(r + r0 + x, st) ↔
r ∈ st ∧ r 6= null ∧
st[r].2 = r0 ∧ path(r0 + x, st);
Damit
cyclic-def: cyclic(r, st) ↔
∃ x. r = x.first ∧ path(x, st) ∧ dups(x);
Dabei bedeutet dups(x), daß x Duplikate hat:
dups: dups(x) ↔ ∃ a, x0, y, z. x = x0 + a + y + a + z;
A. Knapp, G. Schellhorn: Formale Methoden
455
Data Refinement: Korrektheitsnachweis (1)
Hinreichendes Kriterium: Die Repräsentationsrelation ist eine
Vorwärtssimulation (engl. forward/downward simulation). Informell muß gelten:
I
Zu jedem konkreten Initialzustand cσ gibt es einen passenden
Initialzustand aσ mit R(aσ, cσ).
I
Wenn die Vorbedingung von AOpi wahr ist, und R(aσ, cσ) gilt, dann ist
auch die Vorbedingung von COpi wahr.
I
Wenn R(aσ, cσ) gilt, beide Vorbedingungen wahr sind, COpi bei Eingabe
in und Startzustand cσ Endzustand cσ 0 mit Ausgabe out hat, dann gibt es
einen passenden Endzustand aσ 0 von AOpi für dieselbe Ein- und
Ausgabe, der wieder R(aσ 0 , cσ 0 ) erfüllt.
in, aσ
AOpi
R
in, cσ
aσ 0 , out
R
COpi
A. Knapp, G. Schellhorn: Formale Methoden
cσ 0 , out
in, aσ
AOpi
⊥
R
in, cσ
COpi
⊥
456
Data Refinement: Korrektheitsnachweis (2)
Satz
Die Verfeinerung ist korrekt, wenn eine Vorwärtssimulation R gefunden
werden kann, für die gilt:
I
Initialisierung:
Init(cσ) → ∃aσ . R(aσ, cσ)
I
Anwendbarkeit:
R(aσ, cσ) ∧ pre(AOpi )(in, aσ) → pre(COpi )(in, cσ)
I
Korrektheit:
R(aσ, cσ) ∧ pre(AOpi )(in, aσ) ∧ COpi (in, cσ, cσ 0 , out) →
∃aσ 0 . AOpi (in, aσ, aσ 0 , out) ∧ R(aσ 0 , cσ 0 )
wobei pre(Opi )(in, σ) ↔ ∃σ 0 , out . Opi (in, σ, σ 0 , out).
Für das Queue-Beispiel sind alle Teile mit pre irrelevant, da alle
Vorbedingungen wahr sind.
A. Knapp, G. Schellhorn: Formale Methoden
457
Korrektheitsnachweis: Beispiel
Im Queue-Beispiel sind die Vorbedingungen (pre) immer wahr. Damit ist die
Verfeinerung von Queues zur Implementierung korrekt, wenn folgende
Sequenzen bewiesen werden können:
I
Initialisierung:
` h|emq#(; r, st)|iabs(r, st, emq)
I
Korrektheit für enq#:
abs(r,st,q) ` h|enq#(i; r, st)|iabs(r, st, enq(q,i))
I
Korrekhteit für deq# (Fall: nichtleeres q):
abs(r, st, q), q 6= emq `
h|deq#(; r, st, i⊥)|i(abs(r, st, deq(q)) ∧
i⊥ = mki⊥(hd(q)))
I
Korrekheit für deq# (Fall: leeres q):
abs(r, st, emq) `
h|deq#(; r, st, i⊥)|i(abs(r, st, emq) ∧ i⊥ = ⊥)
A. Knapp, G. Schellhorn: Formale Methoden
458
Zusammenfassung
I
Relationale und operationale Kontrakte
I
Abstrakte Datentypen
I
I
Abstract State Machines
Data Refinement
I
I
Repräsentationsrelation
Vorwärtssimulation
A. Knapp, G. Schellhorn: Formale Methoden
459
Herunterladen