WHILE AExp a ::=n∣X∣a0 − ∗ a1 BExp b::=true∣false∣a0

Werbung
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 0a1 , n , wobei n die Summe von n0 und n1 ist.
analog für Differenz und Produkt
Beispiel:
Zeige, dass 23X  ,  15 , wobei   X =10 .
Herleitungsbaum:
3 , 3
2 , 2
 X ,10
3 X , 13
23 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 ,  ' =
*
Herunterladen