Wir betrachten jetzt eine idealisierte imperative Programmiersprache IMP mit zuweisbaren

Ähnliche Dokumente
Kapitel 6. Programme mit Schleifen. Wir betrachten jetzt eine einfache imperative Programmiersprache IMP. IMP verfügt

David Harel, Dexter Kozen, Jerzy Tiuryn. Dynamic Logic. The MIT Press, 2000.

Kapitel 5. Mathematische Semantik. 1 Motivation

7.1 Spezifikation mit Vor- und Nachbedingungen

Kapitel 3. Syntax und Semantik von arithmetischen Ausdrücken. 3.1 Syntax

Semantik von Programmiersprachen SS 2017

Die Formeln von A sind Ausdrücke, die aus ganzen Zahlen, Variablen, Addition und Multiplikation gebildet werden. Hier ist ein Beispiel:

Semantik. Semantik von Programmiersprachen. Prof. Tobias Nipkow, Ph. D. Erstellt von Benjamin Gufler. Erstellt mit L A TEX

Korrekte Software: Grundlagen und Methoden Vorlesung 5 vom : Äquivalenz operationale und denotationale Semantik

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen

Kapitel 5. Fixpunktoperatoren

Semantik von Programmiersprachen

Strukturelle Rekursion und Induktion

Leseempfehlungen Neil D. Jones, Computability and Complexity, from a Programming Perspective.

Semantik von Programmiersprachen SS 2017

Einführung in die Theoretische Informatik

Vorlesung Höhere Programmiersprachen, Teil 2: Formale Semantik. Denotationelle Semantik

Abschnitt 11: Korrektheit von imperativen Programmen

Übersicht Formale Semantik. Übersicht Axiomatische Semantik. Inhaltsübersicht HPS WS 2003/04. Vorlesung Höhere Programmiersprachen,

7 Axiomatische Semantik

Einführung in die Theoretische Informatik

Mächtigkeit von LOOP-Programmen. Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen

Theorembeweiser und ihre Anwendungen

6 Denotationale Semantik Semantik von Programmiersprachen

GTI. Hannes Diener. 18. Juni. ENC B-0123,

Einführung in die Logik

4 Ein Compiler für While

7 Axiomatische Semantik

Programmieren für Fortgeschrittene

Kapitel 4. Induktive Definitionen und Beweise

n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays)

Berechenbarkeit und Komplexität Vorlesung 11

Theoretische Informatik SS 03 Übung 3

Turing-Maschinen: Ein abstrakes Maschinenmodell

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

Vorsemesterkurs Informatik

Semantik. Skript zur Vorlesung Semantik von Programmiersprachen im WS 2003/04 an der Universität Paderborn. Überarbeitet im WS 2004/05.

Dank. Theoretische Informatik II. Teil II. Registermaschinen. Vorlesung

Vorsemesterkurs Informatik

1 Funktionale vs. Imperative Programmierung

Berechenbarkeit und Komplexität: Mächtigkeit von Programmiersprachen: WHILE- und LOOP-Programme

Grundlagen der Programmierung 2. Operationale Semantik

Ein Fragment von Pascal

Korrektheit und Hoare-Kalkül für Imperative Programme

Semantik von Programmiersprachen SS 2012

Einführung Grundbegriffe

Algorithmen und Datenstrukturen (für ET/IT)

Informatik I - Programmierung Globalübung Hoare-Kalkül. Thomas Weiler. Fachgruppe Informatik RWTH Aachen. T. Weiler, RWTH Aachen - 1 -

Vorsemesterkurs Informatik

Einführung in die Berechenbarkeitstheorie

Grundbegriffe für dreiwertige Logik

4 Spezifikation und Verifikation

Berechenbarkeit und Komplexität: Mächtigkeit von Programmiersprachen: WHILE- und LOOP Programme

Theoretische Informatik II

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Die Korrektheit von Mergesort

2 Hennessy-Milner-Logik

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

Klausur Programmierung WS 2002/03

Kapitel 6. Fixpunkte und semantische Bereiche

Einführung in die Informatik 1

LOOP-Programme: Syntaktische Komponenten

Wir haben eine Beziehung zwischen entscheidbar und rekursiv aufzählbar hergeleitet.

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

1 Inhalt der Vorlesung B-PS1

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

SWP Funktionale Programme (3. Teil)

Theorembeweiser und ihre Anwendungen

Einführung in die Programmiertechnik

Kapitel 4. Kontrollstrukturen

Kapitel 4. Kontrollstrukturen

Überblick. Ausdrücke. 3. Mathematische Grundlagen 3.1 Mengen und Abbildungen 3.2 Induktion und Rekursion 3.3 Ausdrücke

Technische Universität München Sommer 2016 Prof. J. Esparza / Dr. M. Luttenberger, S. Sickert 2. Mai HA-Lösung. TA-Lösung

Lösungen zu Kapitel 1

Semantik von Programmiersprachen Theorie und Anwendungen (Informatik III, Wintersemester 03/04)

Kapitel 1.1. Aussagenlogik: Syntax. Mathematische Logik (WS 2011/12) Kapitel 1.1: Aussagenlogik: Syntax 1/ 1

Berechenbarkeit. Stefan Zimmer Informatik I Automatisierungstechnik in der Produktion. Grenzen unserer... Programme...

8. Rekursive und primitiv rekursive Funktionen

Semantik von Programmiersprachen

Diskrete Strukturen Kapitel 2: Grundlagen (Beweise)

Funktionale Programmierung ALP I. µ-rekursive Funktionen WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Die Reduktion Hilberts 10. Problem

Korrektheit imperativer Algorithmen

Informatik I. Informatik I Iteration vs. Rekursion. Iteration vs. Rekursion Iteration vs. Rekursion. 20. Iteration vs.

Statt (r s) schreiben wir in Zukunft meistens rs, gelegentlich auch (r; s).

Ein Induktionsbeweis über Schuhgrößen

Theorie der Informatik

Kapitel III. Aufbau des Zahlensystems

Aufgabe 1 Basiswissen zur Vorlesung (8 Punkte)

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Sequentielle Programme, Hoare-Logik und Dynamische Logik

Transaktionen. Michael Löwe 04/15/16. FHDW Hannover, Freundallee 15, Hannover address:

Transkript:

Kapitel 6 Programme mit Schleifen Wir betrachten jetzt eine idealisierte imperative Programmiersprache IMP mit zuweisbaren Variablen und Schleifen. Unser Ziel ist es, die Syntax und Semantik von IMP mit den bisher eingeführten Methoden zu definieren. Nachdem wir geklärt haben, welche Arten von semantischen Objekten den syntaktischen Objekte der Sprache zugeordnet werden sollen, ist die strukturell rekursive Definition der Denotationsfunktion bis auf eine Ausnahme Routine. Die Ausnahme ist durch Schleifen gegeben, deren Denotation mithilfe eines Fixpunktoperators definiert werden muss. Die Standardmethode für die Definition der Semantik von Programmiersprachen ist die operationale Methode. Wir nutzen die Gelegenheit und demonstrieren die operationale Methode am Beispiel von IMP. Wir werden zeigen, dass die mit der operationalen Methode definierte operationale Semantik dieselbe Ein-Ausgabe- Relation liefert wie die zuvor mit der denotationalen Methode definierte denotationale Semantik. Lesematerial Unsere Sprache IMP entspricht im Wesentlichen der Sprache IMP in [Winskel], wir haben lediglich auf einige unwesentliche Sprachkonstrukte verzichtet. Da wir die mathematischen Grundlagen bereits gelegt haben, beginnen wir sofort mit der Definition der denotationalen Semantik. Aus demselben Grund arbeiten wir statt mit partiellen Funktionen sofort mit totalen Funktionen. [Winskel, Kapitel 2 und 5] 1

6 Programme mit Schleifen n Con = Z Konstante X Loc Lokation a Aexp = n X a 1 + a 2 Arithmetischer Ausdruck b Bexp = a 1 a 2 Boolscher Ausdruck c Com = Kommando X := a Zuweisung c 1 ; c 2 Sequentialisierung if b then c 1 else c 2 Konditional while b do c Schleife Abbildung 6.1: Syntax von IMP 6.1 Syntax und denotationale Semantik von IMP IMP ist eine idealisierte imperative Programmiersprache mit zuweisbaren Variablen und Schleifen, die man sich als Teilsprache von C oder Java vorstellen kann. Abbildung 6.1 definiert die Syntax von IMP relativ zu einer gegebenen, nichtleeren Menge Loc. Die Lokationen von IMP bezeichnet man auch als Variablen, und die Kommandos als Anweisungen. Um die folgenden Definitionen und Beweise einfach zu halten, haben wir IMP auf ein Minimum von Konstrukten beschränkt. Damit wir Beispiele lesbarer schreiben können, vereinbaren wir einige notationale Abkürzungen: a 1 a + ( 1) a 1 < a 2 (a 1 + 1) a 2 false 1 0 a 1 a 2 a 2 a 1 true 1 1 a 1 > a 2 a 2 < a 1 skip X 0 := X 0 Bei X 0 handelt es sich um eine einmal festgelegte Lokation. Als Beispiel betrachten wir ein Kommando, das das Produkt der an den Lokationen x und y abgelegten Zahlen berechnet und dieses an der Lokation z vermerkt: z:=0; while x 1 do (x:=x-1; z:=z+y) Mit Schleifen können wir divergierende Programme schreiben: while true do skip 2 28. 5. 2002 c G. Smolka

6.1 Syntax und denotationale Semantik von IMP Für die Semantik von IMP benötigen wir Funktionen σ def = Loc Z Zustand die Lokationen auf Zahlen abbilden und die wir als Zustände bezeichnen. Außerdem wählen wir ein Objekt, das kein Element von ist (zum Beispiel die leere Menge) und definieren: def = { } Um ein Kommando c auszuführen, benötigen wir einen Anfangszustand. Wenn die Ausführung des Kommandos terminiert, bekommen wir einen Endzustand. Der Effekt einer terminierenden Ausführung besteht also darin, einen Anfangszustand in einen Endzustand zu überführen. Wir können also jedem Kommando c eine Funktion φ zuordnen. Dabei bedeutet φσ =, dass die Ausführung von c mit dem Anfangszustand σ divergiert, und φσ = σ, dass die Ausführung von c mit dem Anfangszustand σ mit dem Endzustand σ terminiert. Wir wählen die gerade beschriebene Funktion als Denotation eines Kommandos. Die Denotation eines Kommandos beschreibt sein Ein-Ausgabe-Verhalten. Die Denotation enthält weniger Information als das Kommando, da sie keinen Algorithmus für die Berechnung des Endzustands vorgibt. Abbildung 6.2 definiert die denotationale Semantik von IMP. Für jede der drei Phrasenklassen wird eine eigene Denotationsfunktion mithilfe von struktureller Rekursion definiert. Bis auf die Gleichung für Schleifen sollten Ihnen alle Gleichungen unmittelbar klar sein. Wir erklären jetzt die Gleichung für Schleifen. Zunächst stellen wir fest, dass für alle b und c die Gleichung C(while b do c) = C(if b then c; while b do c else skip) gelten muss. Diese Gleichung legt nahe, dass die Denotation von Schleifen rekursiv definiert werden muss. So wie sie ist, kann die Gleichung nicht für die Definition von C(while b do c) verwendet werden, da die durch sie beschriebene Rekursion nicht strukturell ist. Das Prinzip der strukturellen Rekursion verlangt, dass wir C(while b do c) nur mithilfe von β = B(b) und φ = C(c) beschreiben. Wir versuchen jetzt, C(while b do c) durch die folgende, rekursiv definierte 28. 5. 2002 c G. Smolka 3

6 Programme mit Schleifen A Aexp Z A(n)σ = n A(X)σ = σ (X) A(a 1 + a 2 )σ = A(a 1 )σ + A(a 2 )σ B Bexp B B(a 1 a 2 )σ = if A(a 1 )σ A(a 2 )σ then 1 else 0 C Com C(X := a)σ = σ [A(a)σ/ X] C(c 1 ; c 2 )σ = if C(c 1 )σ = then else C(c 2 )(C(c 1 )σ ) C(if b then c 1 else c 2 )σ = if B(b)σ = 0 then C(c 2 )σ else C(c 1 )σ C(while b do c)σ = fix (Ɣ(B(b), C(c))) σ Ɣ ( B) ( ) [( ) ( )] Ɣ(β, φ) ψ σ = if βσ = 0 then σ else if φσ = then else ψ(φσ ) Abbildung 6.2: Denotationale Semantik von IMP Funktion zu beschreiben: ψ ψσ = if βσ = 0 then σ else if φσ = then else ψ(φσ ) Die für die Definition von ψ verwendete Rekursion ist mathematisch unzulässig, da sie im Allgemeinen nicht terminiert. Dieser Problem können wir umgehen, indem wir auf das der rekursiven Definition entsprechende Funktional ( ) ( ) ψ σ = if βσ = 0 then σ else if φσ = then else ψ(φσ ) ausweichen und ψ mit dem Fixpunktoperator der VPO definieren: ψ def = fix. Die Monotonie von ist offensichtlich. Die Stetigkeit folgt mit Proposition 5.5.4, da ψσ die Funktion ψ nur für das Argument φσ benötigt. Die Definition von C(while b do c) in Abbildung 6.2 realisiert die beschriebene Idee mit einer Hilfsfunktion Ɣ. 4 28. 5. 2002 c G. Smolka

6.1 Syntax und denotationale Semantik von IMP Realisierung in Standard ML Die gerade für IMP definierte Syntax und Semantik lässt sich unmittelbar in Standard ML realisieren. Der für Schleifen benötigte Fixpunktoperator kann durch die Prozedur fix aus Abschnitt 5.2 realisiert werden. Sie sollten diese Übungsaufgabe unbedingt vollständig ausführen. Sie lernen dabei, dass es sich bei unseren Definitionen für die Syntax und Semantik von IMP um funktionale Programme in mathematischer Notation handelt. Die Prozedur für die Denotationsfunktion C liefert einen Interpreter für Kommandos. Damit können wir die Korrektheit unserer Semantik durch Experimente überprüfen. Die Realisierung der denotationalen Semantik in Standard ML unterscheidet sich gegenüber der mathematischen Formulierung dadurch, dass die Prozedur, die die Denotation eines Kommandos berechnet, divergiert, falls das Kommando divergiert. Es stellt sich die Frage, ob man die denotationale Semantik so implementieren kann, dass die für ein Kommando gelieferte Prozedur immer terminiert (indem sie im Falle von Divergenz einen Wert liefert, der entspricht). Diese Frage werden wir später mit nein beantworten (da das Halteproblem von IMP unentscheidbar ist). Zwei Propositionen Die folgende Propositionen formulieren zwei wichtige Eigenschaften der Denotation von Schleifen. Proposition 6.1.1 Seien b Bexp, c Com und σ, σ. Dann: C(while b do c)σ = σ n N: (Ɣ(B(b), C(c))) n (λ σ. ) σ = σ Beweis Folgt sofort aus der Definition von C und den Eigenschaften der VPO. Proposition 6.1.2 Sei b Bexp und c Com. Dann: C(while b do c) = C(if b then c; while b do c else skip) Beweis Sei σ. Dann: C(while b do c)σ = fix (Ɣ(B(b), C(c))) σ = (Ɣ(B(b), C(c))) (fix (Ɣ(B(b), C(c)))) σ = (Ɣ(B(b), C(c))) (C(while b do c)) σ = if B(b)σ = 0 then σ else if C(c)σ = then 28. 5. 2002 c G. Smolka 5

6 Programme mit Schleifen else (C(while b do c))(c(c)σ ) = if B(b)σ = 0 then C(skip)σ else C(c; while b do c)σ = C(if b then (c; while b do c) else skip)σ Die zweite Gleichung folgt aus der Fixpunkteigenschaft von fix, alle anderen Gleichungen folgen direkt aus den Definitionen. Äquivalenz und Kongruenzeigenschaften Wir haben die denotationale Semantik von IMP nach einem Muster definiert, dass wir bereits mehrfach angewendet haben. Dieses Muster gibt uns Definitionen für Äquivalenz und Substitution vor und garantiert die üblichen Kongruenzeigenschaften. Da wir diesmal drei syntaktische Klassen mit getrennten Denotationsfunktionen haben, bekommen wir auch drei Äquivalenzrelationen: a 1 = a 2 A(a 1 ) = A(a 2 ) b 1 = b 2 B(b 1 ) = B(b 2 ) c 1 = c 2 C(c 1 ) = C(c 2 ) Die Kongruenzeigenschaften für arithmetische Ausdrücke lassen sich wie gehabt mithilfe der Substitutionsoperation formulieren. Da die Syntax für IMP jedoch keine Variablen wir Boolesche Ausdrücke und Kommandos vorsieht, lassen sich die Kongruenzeigenschaften dieser syntaktischen Objekte nicht durch Rückgriff auf Variablensubstitution formulieren. Wir halten fest, dass die folgenden Substitutionseigenschaften gelten: A(a[a / X])σ = A(a)(σ [A(a )σ/ X]) B(b[a / X])σ = B(b)(σ [A(a )σ/ X]) 6.2 Operationale Semantik Wir definieren jetzt eine zweite Semantik für IMP, die als operationale Sematik bezeichnet wird. Dazu definieren wir mithilfe von Inferenzregeln eine Relation OCom Com so dass σ, c, σ OCom genau dann gilt, wenn die Ausführung des Kommandos c für den Anfangszustand σ mit dem Endzustand σ terminiert. Statt 6 28. 5. 2002 c G. Smolka

6.2 Operationale Semantik A(a)σ = n σ = σ [n/ X] σ X := a σ σ c 1 σ σ c 2 σ σ c 1 ; c 2 σ B(b)σ = 0 σ c 2 σ σ if b then c 1 else c 2 σ B(b)σ = 1 σ c 1 σ σ if b then c 1 else c 2 σ B(b)σ = 0 σ while b do c σ B(b)σ = 1 σ c σ σ while b do c σ σ while b do c σ Abbildung 6.3: Operationale Semantik von Kommandos σ, c, σ OCom werden wir σ c σ schreiben. Die operationale Sematik von IMP wird durch die Inferenzregeln in Abbildung 6.3 definiert. Dabei verwenden wir die bereits definierten Denotationsfunktionen für arithmetische und Boolesche Ausdrücke. Selbstverständlich kann man die Semantik dieser Ausdrücke ebenfalls operational definieren (siehe [Winskel]). Man bekäme dann zwei Relationen OAexp Aexp Z OBexp Bexp B Im nächsten Abschnitt werden wir beweisen, dass die denotationale und die operationale Semantik von Kommandos übereinstimmen. Übereinstimmung bedeutet dabei, dass für alle c Com und alle σ, σ gilt: σ c σ C(c)σ = σ 28. 5. 2002 c G. Smolka 7

6 Programme mit Schleifen Denotationale versus operationale Semantik Wir gehen jetzt auf die Unterschiede zwischen den beiden Sematiken ein: 1. Die denotationale Semantik arbeitet mit funktionaler Notation, die operationale Semantik mit relationaler Notation. 2. Die denotationale Semantik verwendet zwei getrennte Rekursionen: Strukturelle Rekursion für die Interpretation der Syntax, und Fixpunktrekursion für die Berechnung von Schleifen. Die operationale Semantik behandelt beide Aspekte mit nur einer Rekursion. 3. Die denotationale Semantik ist der bessere Ausgangspunkt für den Beweis von Spracheigenschaften (wegen der unter (1) und (2) angeführten Punkte). 4. Da die Definition der operationalen Semantik ohne die Verwendung eines Fixpunktoperators auskommt, ist sie für den mathematisch unerfahrenen Leser leichter zu verstehen als die denotationale Semantik. Die operationale Methode ist die Standardmethode für die Beschreibung der Semantik von Programmiersprachen. Die Definition der Semantik von Standard ML ist ein gutes Beispiel für die Anwendung der operationalen Methode auf eine komplexe Sprache. 1 Die operationale Methode hat den Vorteil, dass sie im Gegensatz zur denotationalen Methoden auf alle Sprachtypen anwendbar ist. Die denotationale Methode versagt insbesondere bei nebenläufigen Sprachen. 6.3 Übereinstimmung der Semantiken Wir führen den Übereinstimmungsbeweis in zwei Teilen. Proposition 6.3.1 σ c Com σ : σ c σ C(c)σ = σ. Beweis Durch Regelinduktion über die Definition der operationalen Semantik. Von besonderem Interesse sind die Regeln für Schleifen, die Beweisteile für die anderen Regeln sind einfach. Wir beschränken uns auf die Beweisteile für die Regeln für Sequentialisierungen und Schleifen. 1. Regel für Sequentialisierung. Wir nehmen an: C(c 1 )σ = σ C(c 2 )σ = σ 1 Robin Milner, Mads Tofte, Robert Harper, and David MacQueen, The Definition of Standard ML (Revised), MIT Press, Cambridge, Massachusetts, 1997. 8 28. 5. 2002 c G. Smolka

6.3 Übereinstimmung der Semantiken Wir müssen zeigen: C(c 1 ; c 2 )σ = σ Das folgt mit der Definition von C und den Annahmen: C(c 1 ; c 2 )σ = if C(c 1 )σ = then else C(c 2 )(C(c 1 )σ ) = C(c 2 )(C(c 1 )σ ) = σ 2. Erste Regel für Schleifen. Wir nehmen an: B(b)σ = 0 Wir müssen zeigen: C(while b do c)σ = σ Das tun wir unter Benutzung der Fixpunkteigenschaft wie folgt: C(while b do c)σ = fix (Ɣ(B(b), C(c))) σ = (Ɣ(B(b), C(c))) (fix (Ɣ(B(b), C(c)))) σ = if B(b)σ = 0 then σ else = σ 3. Zweite Regel für Schleifen. Wir nehmen an: B(b)σ = 1 C(c)σ = σ C(while b do c)σ = σ Wir müssen zeigen: C(while b do c)σ = σ Das tun wir unter Benutzung der Fixpunkteigenschaft wie folgt: C(while b do c)σ = fix (Ɣ(B(b), C(c))) σ = (Ɣ(B(b), C(c))) (fix (Ɣ(B(b), C(c)))) σ = if B(b)σ = 0 then σ else if C(c)σ = then else (fix (Ɣ(B(b), C(c)))) (C(c)σ ) = fix (Ɣ(B(b), C(c))) σ = C(while b do c)σ = σ 28. 5. 2002 c G. Smolka 9

6 Programme mit Schleifen Proposition 6.3.2 σ c Com σ : C(c)σ = σ σ c σ. Beweis Durch strukturelle Induktion über Com. Wer benötigen also einen Beweisteil für jede Gleichung der denotationalen Semantik. Interessant ist der Beweisteil für Schleifen, die restlichen Beweisteile sind einfach. Wir zeigen die Beweisteile für Sequentialsierung und Schleifen. 1. Sei C(c 1 ; c 2 )σ = σ. Es genügt zu zeigen, dass ein σ existiert mit σ c 1 σ σ c 2 σ Mit der Annahme und der Definition von C folgt: σ = C(c 1 ; c 2 )σ = if C(c 1 )σ = then else C(c 2 )(C(c 1 )σ ) = C(c 2 )(C(c 1 )σ ) Also existiert ein σ mit C(c 1 )σ = σ C(c 2 )σ = σ Jetzt liefert die Induktionsannahme σ c 1 σ σ c 2 σ 2. Sei C(while b do c)σ = σ. Wir müssen zeigen, dass σ while b do c σ gilt. Wegen Proposition 6.1.1 genügt es, die folgende Aussage zu zeigen: n N σ σ : σ = (Ɣ(B(b), C(c))) n (λ σ. )) σ σ while b do c σ Diese Behauptung zeigen wir durch Induktion über n N. Sei n = 0. Dann ist die Implikation trivialerweise erfüllt, da σ =. Sei n > 0. Weiter sei σ = (Ɣ(B(b), C(c))) n (λ σ. ) σ. Dann σ = (Ɣ(B(b), C(c))) ((Ɣ(B(b), C(c))) n 1 (λ σ. )) σ Wir unterscheiden jetzt zwei Fälle: a) Sei B(b)σ = 0. Dann σ = σ nach Definition von Ɣ. Also folgt σ while b do c σ mit der ersten Regel für Schleifen. 10 28. 5. 2002 c G. Smolka

6.3 Übereinstimmung der Semantiken b) Sei B(b)σ = 1. Dann folgt aus der Definition von Ɣ, dass ein σ existiert mit und σ = C(c)σ σ = (Ɣ(B(b), C(c))) n 1 (λ σ. ) σ Mit der äußeren Induktionsannahme folgt σ c σ Mit der inneren Induktionsannahme folgt σ while b do c σ Also haben wir σ while b do c σ mit der zweiten Regel für Schleifen. Satz 6.3.3 (Übereinstimmung) Für alle c Com und alle σ, σ gilt: σ c σ C(c)σ = σ Beweis Proposition 6.3.1 und Proposition 6.3.2. Aus der Übereinstimmung der Semantiken bekommen wir sofort eine wichtige Eigenschaft der operationalen Semantik. Korollar 6.3.4 Für jedes Kommando c Com und jeden Zustand σ gibt es höchstes einen Zustand σ mit σ c σ. 28. 5. 2002 c G. Smolka 11