Table Of ContentSpringer- Lehrbuch
Krzysztof R. Apt Ernst-Rtidiger Olderog
Programrn
verifikation
Sequentielle, parallele und verteilte
Programme
Springer-Verlag Berlin Heidelberg GmbH
Prof. Dr. Krzysztof R. Apt
Centrum voor Wiskunde en Informatica (CWI)
Stichting Mathematisch Centrum
Kruislaan 413
NL-I098 SI Amsterdam
Prof. Dr. Emst-Rtidiger Olderog
Fachbereich Informatik
Universităt Oldenburg
Postfach 2503
D-2611101denburg
Computing-Reviews-Klassifikation (1991):
D.1.3-4, D.2.4, D.3.1, D.4.1, F.3.1-3
ISBN 978-3-540-57479-8 ISBN 978-3-642-57947-9 (eBook)
DOI 10.1007/978-3-642-57947-9
CIP·Eintrag beantragt
Dieses Werk ist urheberrechtlich geschiitzt. Die dadurch begriindeten Rechte, insbesondere die der
Ubersetzung, des Nachdrucks. des Vortrags, der Entnahme von Abbildungen und Tabellen, der
Funksendung, der Mikroverfilmung oder der Vervielfaltigung auf anderen Wegen und der Spei
cherung in Datenverarbeitungsanlagen, bleiben, auch bei nur auszugsweiser Verwertung, vorbe
halten. Eine Vervielfăltigung dieses Werkes oder von Teilen dieses Werkes ist auch im Einzelfall
nur in den Grenzen der gesetzlichen Bestimmungen des Urheberrechtsgesetzes der Bundesrepu
blik Deutschland vom 9. September 1965 in der jeweils geltenden Fassung zulăssig. Sie ist
grundsătzlich vergiitungspflichtig. Zuwiderhandlungen unterliegen den Strafbestimmungen des
Urheberrechtsgesetzes.
© Springer-Verlag Berlin Heidelberg 1994
Urspriinglich erschienen bei Physica-Verlag Heidelberg New York 1994
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem
Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, daB solche Namen
im Sinne der Warenzeichen-und Markenschutz-Gesetzgebung als frei zu betrachten wăren und
daher von jedermann benutzt werden diirften.
Satz: Reproduktionsfertige Vorlage der Autoren
SPIN: 10084161 45/3140 - 5432 1 0-Gedruckt auf săurefreiem Papier
Vorwort
In letzter Zeit ist die Problematik der Korrektheit von Computerprogrammen
starker in das BewuBtsein von Fachleuten und Offentlichkeit geriickt. Dies liegt
daran, daB Computerprogramme heute in vielfaltiger Weise zur Steuerung von
Ablaufen eingesetzt werden, die unser tagliches Leben betreffen. Als Beispiele
seien hier das Buchen von Reisen, der Betrieb von Geldautomaten sowie die
Steuerung von Eisenbahnen und Flugzeugen genannt.
Fiir die Kunden von Reisebiiros und Banken sowie die Passagiere von Bah
nen und Flugzeugen ist der Sicherheitsaspekt der Systeme von zentraler Be
deutung. Zum Beispiel sollen Bargeldauszahlungen das richtige Konto belasten
und Flugzeuge auf dem gewiinschten Kurs bleiben. Deshalb ist es wichtig, daB
die steuernden Computerprogramme korrekt arbeiten, d.h. vorher festgelegte
Anforderungen fehlerfrei erfiillen. Ein Teil der Informatik befaBt sich daher mit
der Aufgabe, Methoden zur systematischen Erstellung korrekter Programme zu
entwickeln.
Den oben genannten Anwendungen ist gemeinsam, daB die Computerpro
gramme eine Anzahl von Komponenten koordinieren miissen, die unabhangig
voneinander oder "parallel" arbeiten konnen, z.B. die Buchungsstationen in den
einzelnen Reisebiiros oder die Sensoren und Stellwerke bei der Bahnsteuerung.
Deshalb ist bei der Erstellung der zugehOrigen Computerprogramme die Be
herrschung der Prinzipien der korrekten parallelen Programmierung wichtig.
Ein erster Schritt zur Erstellung korrekter Programme ist die Methodik der
Programmverifikation, d.h. der systematische Nachweis der Fehlerfreiheit von
Programmen. Das ist das Thema des vorliegenden Buches: die Verifikation von
Program men unterschiedlicher Struktur. Ausgehend von sequentiellen Program
men gehen wir in systematischer Weise zu parallelen und verteilten Programmen
iiber. Dabei verstehen wir unter parallelen Programmen solche, die aus meh
reren sequentiellen Komponenten bestehen, die jeweils auf einen gemeinsamen
Speicherbereich zugreifen. 1m Gegensatz dazu bestehen verteilte Programme
aus Komponenten mit lokalem Speicherbereich, die nur durch das Senden und
Empfangen von Nachrichten miteinander in Verbindung treten konnen.
VI
Das vorliegende Lehrbuch ist die Ubersetzung des Kernteils der englisch
sprachigen Ausgabe "K.R. Apt, E.-R. Olderog, Verification of Sequential and
Concurrent Programs, Springer-Verlag, New York, 1991". Die Autoren glauben,
daB ein Buch in deutscher Sprache das Halten von Vorlesungen iiber Programm
verifikation im deutschsprachigen Raum entscheidend vereinfacht.
Der deutsche Text wurde yom zweiten Autor auf der Grundlage seiner
4stiindigen Vorlesung "Programmverifikation" im Hauptstudium der Informatik
an der Universitat Oldenburg aus der englischen Vorlage iibersetzt und dabei in
haltlich iiberarbeitet. Die Stoffauswahl hat er auch in geraffter Darstellungsweise
in einem Doktorandenkurs an der Universitat Pisa erprobt.
1m Gegensatz zur englischen Originalausgabe wurde auf die Abschnitte iiber
FairneB und verteilte Terminierung ganz verzichtet. Dadurch ist das deutsche
Buch urn etwa 200 Seiten kiirzer geworden. Ferner wurde das Kapitel iiber
nichtdeterministische Programme nach hinten verschoben, so daB die parallelen
Programme friiher an die Reihe kommen. Die jetzige Anordnung der Kapitel
entspricht der Vorlesungsreihenfolge des zweiten Autors.
Konzeption des Buches
Dieses Lehrbuch bietet eine systematische Einfiihrung in die Verifikation se
quentieller, paralleler und verteilter Programme. Es gehOrt damit einerseits in
den Bereich der Programmiersprachen und baut andererseits auf Begriffen der
mathematischen Logik auf. Die Darstellung setzt element are Kenntnisse iiber
Programmiersprachen und Logik voraus, wie sie im Grundstudium der Infor
matik vermittelt werden. Allerdings werden samtliche Notationen im vorberei
tenden Kapitel 2 erkliirt.
Fiir aIle betrachteten Programmklassen werden jeweils das Ein/ Ausgabe
Verhalten im Sinne der partiellen und totalen Korrektheit untersucht. Zur Ve
rifikation dieser Eigenschaften verfolgen wir die sogenannte axiomatische Me
thode, die zuerst 1969 von Hoare fiir deterministische sequentielle Programme
vorgestellt wurde und anschlieBend von vielen Autoren auf zahlreiche andere
Programmklassen erweitert wurde. Fiir jede Programmklasse gehen wir in ein
heitlicher Weise vor: Nach der Definition der Syntax wird zunachst eine opera
tionelle Semantik eingefiihrt, wie sie zuerst 1979 von Hennessy und Plotkin vor
gestellt und 1981 von Plotkin weiter ausgearbeitet wurde. Dann stellen wir fiir
jede Programmklasse Beweissysteme zur Verifikation der partiellen und totalen
Korrektheit von Programmen dieser Klasse vor.
In Kapitel 3 wird der Ansatz von Hoare fiir deterministische sequentielle
Programme vorgestellt. Da parallele Programme im allgemeinen schwierig zu
verstehen sind, werden sie schrittweise in den drei Kapiteln 4, 5 und 6 ein
gefiihrt. 1m Mittelpunkt steht der 1976 vorgestellte Ansatz von Owicki und
Gries, erweitert urn Erganzungen der Autoren zur totalen Korrektheit. Fiir
nichtdeterministische sequentielle Programme wird in Kapitel 7 auf Arbeiten
von Dijkstra und Gries von 1976 und 1981 zuriickgegriffen. Diese Programm-
VII
klasse dient als Vorbereitung fUr die verteilten Programme in Kapitel 8. Die
dort vorgestellte Verifikationsmethode beruht auf einer 1986 yom erst en Autor
entwickelten Programmtransformation verteilter in nichtdeterministische Pro
gramme.
Die Anwendung der vorgestellten Beweissysteme wird jeweils an Hand von
Fallstudien demonstriert. Dabei werden insbesondere einige klassische Verifika
tionsprobleme wie Erzeuger/Verbraucher und wechselweiser AusschluB behan
delt. Jedes Kapitel schlieBt mit bibliographischen Anmerkungen und einer Serie
von Ubungsaufgaben.
Am Beginn einer Vorlesung sollte das einfUhrende Beispiel der Nullstel
lensuche aus Kapitel 1 stehen. Dieses Beispiel demonstriert auf eindringliche
Weise, welche Fehlerquellen beim Entwurf eines parallelen Programms auf
treten konnen. AnschlieBend empfehlen wir, gleich zu Kapitel 3 tiber deter
ministische Programme tiberzugehen und vor den einzelnen Abschnitten tiber
Syntax, Semantik und Verifikation die zugehOrigen vorbereitenden Abschnitte
aus Kapitel 2 einzuschieben.
Danach bietet sich die Behandlung der Kapitel 4, 5 und 6 tiber parallele
Programme an. Zum SchluB sollte dann nach kurzem Verweilen im Kapitel 7
tiber nichtdeterministische Programme das Kapitel 8 tiber verteilte Programme
behandelt werden. Alternativ dazu ist es auch moglich, die Kapitel 4 - 6
auszulassen und gleich zu den Kapiteln 7 und 8 tiberzugehen.
Danksagung
Die Autoren dieses Lehrbuches haben seit 1979 gemeinsam und mit anderen
Kollegen verschiedene Aspekte auf dem Gebiet der Programmverifikation er
forscht. Wiihrend dieser Zeit haben sie insbesondere sehr viel aus den Diskussio
nen mit J.W. de Bakker, F.S. de Boer, L. Bouge, E.M. Clarke, E.W. Dijkstra,
N. Francez, D. Gries, C.A.R. Hoare, S. Katz, L. Lamport, H. Langmaack, J.
Misra, A. Pnueli, G.D. Plotkin, W.P. de Roever, F.B. Schneider, J. Stavi und
J.1. Zucker gelernt. Ihnen allen gebtihrt unser Dank.
Die vorliegende deutsche Version haben freundlicherweise J. Bohn, C. Dietz,
C. Fischer, S. Kleuker, K. Reich, K. Rossig, S. Rossig, M. Schenke, M. Schulte
auf Fehler durchgesehen. Anregungen der Teilnehmerinnen und Teilnehmer der
Vorlesungen in Oldenburg und Pisa haben zu Verbesserungen in der Darstellung
gefUhrt.
Das 1J\TEX-Skript dieses Buches wurde yom zweiten Autor auf der Grund
lage des englischen Originals erstellt, das zum tiberwiegenden Teil von T. Woo
erfaBt wurde. Bei der Uberarbeitung gab S. Rossig wert volle Hinweise zur Ver
besserung der internen 1J\TEX-Struktur.
Besonderen Dank sagen wir H. Wossner yom Springer-Verlag fUr seine
tatkriiftige Untersttitzung dieses Buchprojektes.
Inhaltsverzeichnis
1 Einfiihrung .. 1
1.1 Beispiel eines parallelen Programmes
Lasung 1 . 2
Lasung 2 . 3
Lasung 3 . 4
Lasung 4 . 5
Lasung 5 . 6
Lasung 6 . 7
1.2 Programmkorrektheit . 8
1.3 Struktur dieses Buches 11
2 Vor berei t ungen 15
2.1 Syntax .. 15
2.2 Getypte A usdriicke 16
Typen 16
Variablen 16
Konstanten 17
Ausdriicke . 18
Indizierte Variablen . 19
2.3 Semantik von Ausdriicken 19
Feste Struktur . 19
Zustiinde . 20
Definition der Semantik 21
Modifikation von Zustiinden 23
2.4 Formale Beweissysteme . 24
2.5 Logische Formeln 25
x
Inhaltsverzeichnis
2.6 Semantik von logischen Formeln . 27
2.7 Substitution...... 28
2.8 Substitutions-Lemma...... 31
2.9 Ubungsaufgaben ....... . 32
2.10 Bibliographische Anmerkungen 33
3 Deterministische Programme 35
3.1 Syntax ......... . 35
3.2 Semantik......... 36
Eigenschaften der Semantiken 40
3.3 Verifikation ... . . 42
Partielle Korrektheit . . . . . 43
Totale Korrektheit ..... . 49
Korrektheit der Beweissysteme. 51
3.4 Beweisskizzen.... 57
Partielle Korrektheit . . . 58
Totale Korrektheit .... 62
Programmdokumentation 63
3.5 Vollstandigkeit ..... . 64
3.6 Zusatzliche Axiome und Regeln 70
3.7 Systematische Entwicklung korrekter Programme 72
Summations-Problem . . . . . . . . . . 73
3.8 Fallstudie: Minimale Abschnittssumme 75
3.9 Ubungsaufgaben ....... . 79
3.10 Bibliographische Anmerkungen 83
4 Disjunkte parallele Programme 85
4.1 Syntax ..... 85
4.2 Semantik...... 86
Determinismus .. 88
Sequentialisierung . 91
4.3 Verifikation ... . 92
Parallele Komposition 93
Hilfsvariablen . . . . . 95
Korrektheit der Beweissysteme. 98
4.4 Fallstudie: Finde Positives Element 100
4.5 Ubungsaufgaben ....... . 104
4.6 Bibliographische Anmerkungen .. 105
5 Parallele Programme mit gemeinsamen Variablen 107
5.1 Zugriff auf gemeinsame Variablen 107
5.2 Syntax ... 109
5.3 Semantik.............. 110
Atomaritat ........... . 112
5.4 Verifikation: Partielle Korrektheit 113
Komponenten-Programme . . . . 113
Inhaltsverzeichnis XI
Keine Kompositionalitiit des Ein/ Ausgabe-Verhaltens 115
Parallele Komposition: Interferenz-Freiheit 115
Notwendigkeit von Hilfsvariablen 118
Korrektheit des Beweissystems . 121
5.5 Verifikation: Totale Korrektheit . 123
Komponenten-Programme . . . . 123
Parallele Komposition: Interferenz-Freiheit 126
Korrektheit des Beweissystems. . . . . . . 128
Diskussion . . . . . . . . . . . . . . . . . . 129
5.6 Fallstudie: Finde positives Element schneller 131
5.7 Veriindern von Interferenzpunkten. . . . 134
5.8 Fallstudie: Parallele Nullstellensuche .... 139
Schritt 1. Vereinfachung des Programms .. 139
Schritt 2. Beweis der partiellen Korrektheit . 140
5.9 Ubungsaufgaben ....... . 143
5.10 Bibliographische Anmerkungen ... 145
6 Parallele Programme mit Synchronisation 147
6.1 Syntax ... 148
6.2 Semantik....... 149
6.3 Verifikation . . . . . 150
Partielle Korrektheit 150
Korrektheit des Beweissystems . 152
Schwache totale Korrektheit . . 153
Totale Korrektheit ...... . 154
Korrektheit des Beweissystems . 156
6.4 Fallstudie: Erzeuger /Verbraucher-Problem 158
6.5 Fallstudie: Wechselweiser AusschluB . 163
Formulierung des Problems. 163
Verifikation . . . . 166
Peterson's Losung ..... . 166
Dijkstra's Losung ..... . 170
6.6 Veriindern von Interferenzpunkten . 173
6.7 Fallstudie: Synchronisierte Nullstellensuche . 175
Schritt 1. Vereinfachung des Programms .. 175
Schritt 2. Zerlegung der Verifikationsaufgabe 176
Schritt 3. Beweis der Terminierung . . . . . 177
Schritt 4. Beweis der partiellen Korrektheit . 181
6.8 Ubungsaufgaben ....... . 183
6.9 Bibliographische Anmerkungen 185
7 Nichtdeterministische Programme 187
7.1 Syntax ............ . 187
7.2 Semantik ........... . 188
Eigenschaften der Semantiken 189
7.3 Vorteile nichtdeterministischer Programme 191
XII Inhaltsverzeichnis
Symmetrie .... 191
Laufzeitfehler . . 192
Nichtdeterminismus . 192
Modellierung von Parallelitiit 193
7.4 Verifikation ... . . . . . . . 193
7.5 Fallstudie: Wohlfahrtsbetriiger . 196
7.6 Transformation paralleler Programme. 199
7.7 Ubungsaufgaben ....... . 202
7.8 Bibliographische Anmerkungen 204
8 Verteilte Programme . . . 207
8.1 Syntax ....... . 208
Sequentielle Prozesse 208
Verteilte Programme 210
8.2 Semantik....... 212
8.3 Transformation verteilter Programme 214
Semantische Beziehung zwischen S und T(S) 215
8.4 Verifikation ... . . . . . . . 217
Partielle Korrektheit . . . . . 217
Schwache Totale Korrektheit . 218
Totale Korrektheit ... . . . 219
Beweissysteme. . . . . . . . . 220
8.5 Fallstudie: Ubertragungsproblem 222
Schritt 1. Zerlegung der Verifikationsaufgabe 223
Schritt 2. Partielle Korrektheit. . . . . . . . 223
Schritt 3. Kein Laufzeitfehler und keine Divergenz . 226
Schritt 4. Deadlock-Freiheit .. 227
8.6 Ubungsaufgaben ....... . 228
8.7 Bibliographische Anmerkungen 231
Anhang ....... . 233
A. Semantik .. 233
B. Beweisregeln . 235
C. Beweissysteme. 241
D. Beweisskizzen 243
Li ter aturverzei chnis 245
Autorenverzeichnis . 251
Stichwort verzeichnis 253
Symbolverzeichnis . 257