WHILE AExp a ::=n∣X ∣a 0 − a 1 ∗ BExp = b : :=true∣false∣a0 = a 1∣¬b∣b0∧b 1∣b 0∨b1 ⋮ Cmd c : :=skip∣X :=a∣C 0 ; C 1∣if b then c 0 else c1∣while b do c 2. Operationelle Semanik von While 2.1 Gesamtschrittsemantik (Big Step Semantics) Formalisierung von Auswertungen Bezug: abstrakte Maschine hier: einfacher Zustandsraum :={∣ : Loc Num} (Var) Die Gesamtschrittsemantik von While besteht aus 3 Auswertungsrelationen . .⊆ AExp××Num . .⊆ BExp× ×T . .⊆Cmd × × Die Auswertungsrelation für arithmetische Ausdrücke beschreibt, zu welchem Wert n ein Ausdruck a im Zustand σ ausgewertet wird: a , n Die Festlegung der Auswertungsrelation erfolgt syntax-gerichtet, d.h. induktiv über den syntaktischen Aufbau der Ausdrücke. Zahlen n , n Variablen X , X a 0 , n0 a 1 , n 1 Zusammengesetzte Ausdrücke a 0a1 , n , wobei n die Summe von n0 und n1 ist. analog für Differenz und Produkt Beispiel: Zeige, dass 23X , 15 , wobei X =10 . Herleitungsbaum: 3 , 3 2 , 2 X ,10 3 X , 13 23 X , 15 Die Semantik indiziert die folgende Äquivalenzrelation auf arithmetischen Ausdrücken: a 0~a1 : ⇔∀ ∈ , ∀ n∈Num : a0 , n ⇔a 1 , n Festlegung der Auswertungsrelation für Boolesche Ausdrücke: true , true ;false , false a 0 , n0 a 1 , n1 a 0=a1 , true, falls n0 und n 1 gleich sind a 0 , n0 a 1 , n1 a 0=a1 , false, falls n0 und n 1 verschieden sind analog für weitere Vergleichsoperationen b , false b , true ¬b , true ¬b , false b0 , t 0 b1 , t 1 { b0 ∧b1 , t , wobei t = true falls t 0=t 1=true false sonst Auswertungsrelation für Anweisungen ⊆Cmd× × c , ' Startzstd. Endzstd. Beispiel: X :=Y , [ X Y ] , wobei X jetzt auf Y abgebildet wird Notation (Substitution): : Loc Num , X ∈Loc , m∈Num Dann gilt: [ X m]Y := { m falls X ≡Y für alle Y ∈Loc Y sonst Definition der Auswertungsrelation für Anweisungen: skip , a , n atomare Anweisungen: X :=a , [ X n] Hintereinanderausführung: c 0 , 0 c 1 , 0 1 c 0 ; c 1 , 1 b , true c 0 , 0 if b then c0 else c1 , 0 Verzweigung: b , false c 1 , 1 if b then c0 else c1 , 1 b , false while b do c , Schleife: b , true c , ' while b do c , ' ' ' while b do c , ' ' Äquivalenzrelation für Anweisungen: c 1~c 2 :⇔ ∀ , ' ∈ : c1 , ' ⇔c 2 , ' Beispiel: Sei c ∈Cmd gegeben durch: y :=1 ; while ¬ X =1 do y := y∗x ; x :=x−1 c c b 1 2 c0 Bezeichnung i , j= [ x i , y j ] Wir zeigen: c , 2 ,0 1 ,2 X , 2 , 1 2 1 , 2 ,1 1 X =1 , 2 , 1 false 1 , 2 ,0 1 b , 2 , 1 true Y :=1 , 2 ,0 2 ,1 Y , 2 ,1 1 X , 2 , 1 2 X , 2 , 2 2 1 , 2 ,2 1 Y∗X , 2 ,1 2 X – 1 , 2 , 2 1 c 1 , 2 , 1 2 , 2 c 1 , 2 , 2 1 , 2 c 0 , 2 ,1 1 , 2 while b do c 0 , 2 ,1 1 , 2 c , 2 , 0 1 , 2 *) X =1 , 1 , 2 true b , 1 , 2 false while b do c 0 , 1 ,2 1 ,2 Lemma 2.1: (Abwickeln von Schleifen) while b do c ~if b then c ; while b do c else skip für beliebige b∈ BExp , c∈Cmd := w Beweis: Zu zeigen ist für beliebige Zustände , ' ∈ , dass w , ' ⇔if b then c ; w else skip , ' ⇒ : es existiert eine Herleitung für w , ' Wir unterscheiden zwei Fälle, je nachdem, ob die letzte Regel der Herleitung die Gestalt 1) b , false oder w , c , ' ' w , ' ' ' hat. 2) b , true w , ' Zu 1): Es gilt = ' und es gilt b , false. Dann folgt b , false skip , if b then c ; w else skip , ' = *