„Hoare-Kalkül“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Primärquelle hinzugefügt (siehe Englische Version des Artikels) und Beschreibung für totale Korrektheit erweitert.
K Unterschied zum Floydschen System hinzugefügt, mit entsprechender Quelle
Zeile 1: Zeile 1:
Der '''Hoare-Kalkül''' (auch '''Hoare-Logik''') ist ein [[Formales System]], entwickelt von dem [[Vereinigtes Königreich|britischen]] [[Informatiker]] [[Tony Hoare|C. A. R. Hoare]] und später verfeinert von Hoare und anderen Wissenschaftlern. Er wurde 1969 in einem Artikel mit dem Titel ''An axiomatic basis for computer programming'' veröffentlicht<ref name="Primärquelle">[[Charles Antony Richard Hoare]]: ''[http://www.spatial.maine.edu/~worboys/processes/hoare%20axiomatic.pdf An Axiomatic Basis for Computer Programming].'' In: ''[[Communications of the ACM]].'' Bd. 12, Nr. 10, 1969, S. 576–585, {{doi|10.1145/363235.363259}}.</ref>. Der Zweck des Systems ist es, eine Menge von logischen Regeln zu liefern, die es erlauben, Aussagen über die [[Korrektheit (Informatik)|Korrektheit]] von [[Imperative Programmierung|imperativen Computer-Programmen]] zu treffen und sich dabei der mathematischen Logik zu bedienen. Hoare knüpft an frühere Beiträge von [[Robert Floyd]] an, der ein ähnliches System für Flussdiagramme veröffentlichte<ref name="Floyd">{{Literatur | Autor=[[Robert Floyd|Robert W. Floyd]] | Titel=[http://www.cs.virginia.edu/~weimer/2007-615/reading/FloydMeaning.pdf Assigning meanings to programs] | Sammelwerk=Proceedings of the American Mathematical Society Symposia on Applied Mathematics | Band= | Nummer=19 | Jahr=1967 | Seiten=19–31 | DOI=}}</ref>.
Der '''Hoare-Kalkül''' (auch '''Hoare-Logik''') ist ein [[Formales System]], entwickelt von dem [[Vereinigtes Königreich|britischen]] [[Informatiker]] [[Tony Hoare|C. A. R. Hoare]] und später verfeinert von Hoare und anderen Wissenschaftlern. Er wurde 1969 in einem Artikel mit dem Titel ''An axiomatic basis for computer programming'' veröffentlicht<ref name="Primärquelle">[[Charles Antony Richard Hoare]]: ''[http://www.spatial.maine.edu/~worboys/processes/hoare%20axiomatic.pdf An Axiomatic Basis for Computer Programming].'' In: ''[[Communications of the ACM]].'' Bd. 12, Nr. 10, 1969, S. 576–585, {{doi|10.1145/363235.363259}}.</ref>. Der Zweck des Systems ist es, eine Menge von logischen Regeln zu liefern, die es erlauben, Aussagen über die [[Korrektheit (Informatik)|Korrektheit]] von [[Imperative Programmierung|imperativen Computer-Programmen]] zu treffen und sich dabei der mathematischen Logik zu bedienen. Hoare knüpft an frühere Beiträge von [[Robert Floyd]] an, der ein ähnliches System für Flussdiagramme veröffentlichte<ref name="Floyd">{{Literatur | Autor=[[Robert Floyd|Robert W. Floyd]] | Titel=[http://www.cs.virginia.edu/~weimer/2007-615/reading/FloydMeaning.pdf Assigning meanings to programs] | Sammelwerk=Proceedings of the American Mathematical Society Symposia on Applied Mathematics | Band= | Nummer=19 | Jahr=1967 | Seiten=19–31 | DOI=}}</ref>. Im Gegensatz zum Floyd'schen Verfahren, bei dem Ausführungspfade interpretiert werden, arbeitet der Hoare-Kalkül mit dem Sourcecode<ref>{{Literatur | Autor=[[Peter Liggesmeyer]] | Titel=Software-Qualität | Auflage=2 | Verlag=Spektrum Akademischer Verlag | Ort=Heidelberg | Jahr=2009 | ISBN=978-3-8274-2056-5 | Seiten=321-360}}</ref>.


Alternativ kann auch der [[wp-Kalkül]] benutzt werden, bei dem im Gegensatz zum Hoare-Kalkül eine Rückwärtsanalyse stattfindet.
Alternativ kann auch der [[wp-Kalkül]] benutzt werden, bei dem im Gegensatz zum Hoare-Kalkül eine Rückwärtsanalyse stattfindet.

Version vom 9. August 2013, 10:46 Uhr

Der Hoare-Kalkül (auch Hoare-Logik) ist ein Formales System, entwickelt von dem britischen Informatiker C. A. R. Hoare und später verfeinert von Hoare und anderen Wissenschaftlern. Er wurde 1969 in einem Artikel mit dem Titel An axiomatic basis for computer programming veröffentlicht[1]. Der Zweck des Systems ist es, eine Menge von logischen Regeln zu liefern, die es erlauben, Aussagen über die Korrektheit von imperativen Computer-Programmen zu treffen und sich dabei der mathematischen Logik zu bedienen. Hoare knüpft an frühere Beiträge von Robert Floyd an, der ein ähnliches System für Flussdiagramme veröffentlichte[2]. Im Gegensatz zum Floyd'schen Verfahren, bei dem Ausführungspfade interpretiert werden, arbeitet der Hoare-Kalkül mit dem Sourcecode[3].

Alternativ kann auch der wp-Kalkül benutzt werden, bei dem im Gegensatz zum Hoare-Kalkül eine Rückwärtsanalyse stattfindet.

Hoare-Tripel

Das zentrale Element des Hoare-Kalküls ist das Hoare-Tripel, das beschreibt, wie ein Programmteil den Zustand einer Berechnung verändert:

Dabei sind man und Zusicherungen (englisch assertions), ist ein Programmsegment. ist die Vorbedingung (englisch precondition) und die Nachbedingung (englisch postcondition). Wenn die Vorbedingung zutrifft, gilt nach der Ausführung des Programmsegements die Nachbedingung. Zusicherungen sind Formeln der Prädikatenlogik[1].

Ein Tripel kann auf folgende Weise verstanden werden: Falls für den Programmzustand vor der Ausführung von gilt, dann gilt danach. Falls nicht terminiert, dann gibt es kein danach, also kann in diesem Fall jede beliebige Aussage sein. Tatsächlich kann man für die Aussage false wählen, um auszudrücken, dass nicht terminiert. Man spricht hier von partieller Korrektheit. Falls immer terminiert und danach wahr ist, spricht man von totaler Korrektheit. Die Terminierung muss unabhängig bewiesen werden.

Partielle Korrektheit

Der Hoare-Kalkül besteht aus Axiomen und Ableitungsregeln für alle Konstrukte einer einfachen imperativen Programmiersprache:

Zuweisungsaxiom

Das Zuweisungsaxiom besagt, dass nach einer Zuweisung jede Aussage für die Variable gilt, welche vorher für die rechte Seite der Zuweisung galt:

ist die Aussage, die dadurch entsteht, dass man in jedes freie Vorkommen von durch ersetzt.

Genau genommen ist das Zuweisungsaxiom kein einzelnes Axiom, sondern ein Schema für eine unendliche Menge von Axiomen, denn , und können jede mögliche Form annehmen, und kann daraus konstruiert werden.

Ein Beispiel für ein durch das Zuweisungsaxiom beschriebenes Tripel ist:

Kompositions- oder Sequenzregel

Diese Regel kann auf folgende Weise angewendet werden: Wenn die über dem Strich stehenden Aussagen bewiesen worden sind, kann die unter dem Strich stehende Aussage auch als bewiesen angesehen werden.

Betrachtet man zum Beispiel die folgenden beiden Aussagen, die aus dem Zuweisungsaxiom folgen

und

kann man die folgende Aussage daraus folgern:

Auswahlregel (if-then-else-Regel)

Die Regel beweist also sowohl den if-Zweig, als auch den else-Zweig.

Iterationsregel (while-Regel)

Hierbei wird als die Schleifeninvariante bezeichnet.

Konsequenzregel

Die Konsequenzregel erlaubt es, die Vorbedingung zu verstärken und die Nachbedingung abzuschwächen und so die Anwendung anderer Beweisregeln zu ermöglichen. Insbesondere kann man auch die Vor- oder Nachbedingung durch eine äquivalente logische Formel ersetzen. Beispiel:

ist partiell korrekt, denn

Totale Korrektheit

Wie oben erläutert eignet sich das beschriebene Kalkül nur für den Beweis der partiellen Korrektheit. Zum Beweis der totalen Korrektheit muss while-Regel durch eine Schleifenvariante erweitert werden. Dabei handelt es sich um eine Funktion oder eine Variable , die eine Zahl mit einem Anfangswert darstellt. Es muss nun nachgewiesen werden, dass in jedem Schleifendurchlauf verringert wird, und dass die Schleife ab einem bestimmten, verringerten Wert terminiert[2].

Iterationsregel für totale Korrektheit

Hierbei ist ein Term, die Schleifeninvariante – also das, was in jedem Schleifendurchlauf gilt – und eine Variable, die in , , und nicht (frei) vorkommt. Sie dient dazu, den Wert des Terms vor der Schleife mit dem nach der Schleife zu vergleichen. Die Bedingung stellt sicher, dass nicht negativ wird. Die Idee hinter der Regel ist, dass, wenn mit jedem Schleifendurchlauf abnimmt, aber nie kleiner als Null wird, die Schleife irgendwann enden muss. muss dabei aus einer fundierten Menge sein.

Literatur

Einzelnachweise

  1. a b Charles Antony Richard Hoare: An Axiomatic Basis for Computer Programming. In: Communications of the ACM. Bd. 12, Nr. 10, 1969, S. 576–585, doi:10.1145/363235.363259.
  2. a b Robert W. Floyd: Assigning meanings to programs. In: Proceedings of the American Mathematical Society Symposia on Applied Mathematics. Nr. 19, 1967, S. 19–31.
  3. Peter Liggesmeyer: Software-Qualität. 2. Auflage. Spektrum Akademischer Verlag, Heidelberg 2009, ISBN 978-3-8274-2056-5, S. 321–360.

Weblinks

  • Das Project Bali hat Regeln nach Art des Hoare-Kalküls für ein Subset von Java aufgestellt, zur Benutzung mit dem Theorembeweiser Isabelle
  • Hoare Tutorial Ein Tutorial, das den Umgang mit dem Hoare-Kalkül zur Programmverifikation erklärt (PDF-Datei; 493 kB)
  • j-Algo-Modul Hoare Kalkül Ein Visualisierung des Hoare-Kalküls im Rahmen des Algorithmenvisualisierungsprogramms j-Algo