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 , ' =
*