Springer- 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