• Keine Ergebnisse gefunden

2.3 Semantik

2.3.5 Eindeutigkeit der Semantik

Definition und Vor¨uberlegung

Definition 2: Eindeutigkeit einer Semantik.

Eine Semantik heißt eindeutig, wenn f¨ur jeden ZustandZ und jedes ProgrammP gilt:

(Z, P) =⇒ (ZA, PA) und (Z, P) =⇒ (ZB, PB) dann gilt (ZA, PA) = (ZB, PB)

Anders ausgedr¨uckt bedeutet dies, dass f¨ur jedes (Z, P) maximal ein m¨ogliches Ergebnis der Auswertung existiert.

Dies ist f¨ur die Semantik von lazy Imp nicht gegeben, denn manche Regeln sind nicht deter-ministisch. Die Bedingung ”ρ(r) ist nicht definiert” in den RegelnVarDekl, LokalVarDekl, GlobalVarDekl und FErzeugung schreibt n¨amlich nicht vor, wie das r ∈ R zu w¨ahlen ist.

Entsprechend k¨onnen zwei Auswertungen des Programms verschiedenerw¨ahlen, sodass die Funk-tionenν undρnicht eindeutig festgelegt sind.

Dies ist nicht weiter schlimm, bedenkt man, dass R effektiv die Menge der Speicheradressen repr¨asentiert. Es ist nicht wichtig, wo im Speicher ein Wert gespeichert wird, es ist nur wichtig, welche Variablen vonν zur gleichen Adresse aufgel¨ost werden und dassν◦τ sich unabh¨angig von der Wahl der Speicheradresse, gleich verh¨alt.

Da der Speicherort eines Wertes nicht wichtig ist, kann man den Begriff der Eindeutigkeit f¨ur lazy Imp ein wenig verallgemeinern. Wir wollen die Auswertung eindeutig nennen, wenn sich Zust¨ande und resultierendes Programm nur durch die Referenzwerte unterscheiden. Des Weiteren soll man diesen Unterschied durch eine Neuordnung der Referenzwerte (Neuordnung des Speichers) aufgehoben werden. Dazu definieren wir zun¨achst folgende Notation:

Definition 3: Seiβ:R→Reine Funktion undP ein Programm. Dann istβ[P] das Programm, bei dem alle ReferenzwerterinP durchβ(r) ersetzt wurden. Formal istβ[·] also definiert als:

β[e1=e2] =β[e1]=β[e2] β[e1:=e2] =β[e1]:=β[e2] β[e(e1, ..., e2)] =β[e](β[e1], ..., β[e2]) β[(e1 e2...en)] = (β[e1] β[e2]...β[en])

β[e1;...;en; ] =β[e1];...;β[en];

β[^v] =^v β[v] =v β[r] =β(r) β[local v] =local v

β[do e1 -> e2 end] =do e1 -> β[e2] end Seif eine Funktion, dann istβ[f](x) :=β[f(x)], das heißtβ[f] =β[·]◦f. Darauf basierend l¨asst sich folgende ¨Aquivalentsrelation definieren:

Definition 4: semantisch ¨aquivalent,≡⊂ {(ν, ρ, P)}2A, ρA, PA)≡(νB, ρB, PB) :⇔

Es existiert eine Bijektionβ :R→Rmit

1. β◦νiAiB f¨ur allei(also f¨ur alle Namensr¨aume), 2. β[ρA] =ρB◦β und

Satz 2: ≡ist eine ¨Aquivalenzrelation.

1. Reflexiv:

F¨urβ =idgilt

β◦νii f¨ur alle partielle Funktionenνi:V →R, β[P] =P f¨ur alleP und somit auch

β[ρ] =ρ=ρ◦β f¨ur alleρ.

⇒F¨ur alle (ν, ρ, P) gilt also (ν, ρ, P)≡(ν, ρ, P).

2. Symmetrisch:

Sei (νA, ρA, PA)≡(νB, ρB, PB) undβ die entsprechende Bijektion, dann gilt f¨ur α=β−1: νiA=α◦β◦νiA=α◦νiB,

α[β[P]] =P f¨ur alleP, dennα[β[r]] =α(β(r)) =rf¨ur aller∈R. Somit gilt auch α[ρB](r) =α[β[ρA]](r) =α[β[ρA(r)]] =ρA(r)

⇒Es gilt (νB, ρB, PB)≡(νA, ρA, PA) 3. Transitiv:

Sei (νA, ρA, PA)≡(νB, ρB, PB) mitβ und (νB, ρB, PB)≡(νC, ρC, PC) mit γ, dann gilt f¨urα=β◦γ:

α◦νiA =β◦γ◦νiA=β◦νiBiC, α[ρA] =β[γ[ρA]] =β[ρB] =ρC, α[PA] =β[γ[PA]] =β[PB] =PC

⇒(νA, ρA, PA)≡(νC, ρC, PC)

Definition 5: zul¨assiger auszuwertender Ausdruck

Ein Tupel (ν, ρ, ω) nennen wir einen zul¨assigen auszuwertenden Ausdruck, wenn gilt:

1. Bild(ν)⊂Def(ρ)

2. Alle Referenzwerter, die in Worten aus Bild(ρ) auftauchen, liegen inDef(ρ).

3. Alle Referenzwerter, die inω auftauchen, liegen inDef(ρ).

Mit anderen Worten: (ν, ρ, ω) enth¨alt keine Referenzwerte, die nicht aufgel¨ost werden k¨onnen.

Definition 6: erweiterte Eindeutigkeit

Die Semantik vonlazy Imp heißt erweitert eindeutig, wenn gilt:

F¨ur alle zul¨assigen auszuwertenden Ausdrucke (ν, ρ, ω) und zwei endliche Auswertungen (ν, ρ, P) =⇒ (νA, ρA, PA) und

(ν, ρ, P) =⇒ (νB, ρB, PB)

=⇒(νA, ρA, PA)≡(νB, ρB, PB)

Die erweiterte Eindeutigkeit ist also die klassische Eindeutigkeit bez¨uglich der semantischen ¨ Aqui-valenz (≡) f¨ur endliche Auswertungen.

Die Einschr¨ankung auf endliche Auswertungen ist wichtig, f¨ur unendliche Auswertungen ist lazy Imp tats¨achlich nicht eindeutig. Man betrachte z.B. ein Programm, dass unendliche lange l¨auft und einfach nur Speicher allokiert (man betrachte R = N). Einerseits kann der Speicher

”nach” der Ausf¨uhrung als voll betrachtet werden, wenn bei der i-ten Allokation ρ(i) definiert wird. Es gilt also f¨ur alle r∈Rdassr∈Def(ρ). Andererseits k¨onnte bei der Ausf¨uhrung auch f¨ur diei-te Allokationρ(2i) definiert werden, sodass nochr∈R existieren mitr /∈Def(ρ).

Eindeutigkeit von lazy Imp

Um die Eindeutigkeit der Semantik zu beweisen, wird zuerst folgende ¨Uberlegung gemacht:

Wir erlauben Referenzwerte als Teil der Syntax, das heißt man f¨ugt folgende Produktionsregeln der Grammatik hinzu:

RVALUE → REF EREN CE REF EREN CE → ein Element ausR

Dann lassen sich die Auswertungsregeln der Semantik immer nur auf bestimmte Worte der Gram-matik anwenden.

Auswertungsregeln Nichtterminal

Referenz REF EREN CE

KZuweisung COP Y

RZuweisung,RZLokal,RZGlobal ASSIGN

Return, Yield RET U RN

VarDekl, LokalVarDekl, VAR Var,LokalVar,

GlobalVar,GlobalVarDekl,

FErzeugung F U N

FVerz¨ogert SP ACE

FAusf¨uhrung CALL

FAufImplizitA,FAufImplizitB, LIN ES FAufImplizitC,FAufImplizitD,

MultiLine

Umgekehrt lassen sich die Worte, die von obigen Nichtterminalen herleiten lassen, nur von den entsprechenden Regeln auswerten.

Es gibt aber auch kein Wort, das durch mehr als eines dieser Nichtterminale hergeleitet werden kann - ansonsten w¨are die Grammatik n¨amlich nicht eindeutig.

Seiω ein Wort, dass sich von mindestens zwei der obigen Nichtterminale (ausgenommenLIN ES) herleiten l¨asst, dann g¨abe es f¨urω mehr als eine m¨ogliche Herleitung ausgehend von LIN E.

Mindestens zwei der folgenden Herleitungsanf¨ange m¨ussten dannω erzeugen k¨onnen:

LIN E→COP Y; LIN E→RVALUE;→F U N;

LIN E→RET U RN; LIN E→RVALUE;→VAR;

LIN E→ASSIGN; LIN E→RVALUE;→SP ACE;

LIN E→RVALUE;→CALL;

LIN E→RVALUE;→REF EREN CE;

Das ist ein Widerspruch zum Beweis der Eindeutigkeit der Grammatik. Dort wurde gezeigt, dass f¨ur ein beliebiges festes Startnichtterminal die Herleitung eindeutig ist.

Worteω, die sich ausLIN ESherleiten lassen, k¨onnen nicht aus anderen Nichtterminalen hergeleitet werden, da nurLIN ESdie ; Terminale erzeugt.

Offensichtlich gilt weiterhin, dass aus den Gruppen von Regeln, die f¨ur ein Nichtterminal anwend-bar sind, f¨ur jedes Wort immer maximal eine dieser Regeln anwendbar ist.

Insgesamt bedeutet dies, das f¨ur jedes auszuwertende Wort, die erste anzuwendende Regel ein-deutig vorgegeben ist.

Es liegt nahe, daraus direkt die (erweiterte) Eindeutigkeit der Semantik zu folgern, schließlich ist die zu verwendende Regel fest vorgegeben. Es ist aber nicht gezeigt, dass das auszuwertende Wort eindeutig ist. In den Bedingungen werden z.B. Teilworte ausgewertet, die Wahl dieser Teilworte muss auch eindeutig bestimmt sein.

Es bleibt also noch mehr zu beweisen.

Satz 3: Verwendet man bei VarDekl, LokalDekl, GlobalVarDekl und FErzeugung statt ”ρ(r) nicht definiert” die Bedingung ”kleinstesrmitρ(r) nicht definiert”, so ist die Seman-tik eindeutig bez¨uglich einer Wohlordnung<aufR.

R ist eine abz¨ahlbare Menge und somit wohl geordnet. Es existiert oBdA eine totale Ordnung, bei der jede nicht-leere Menge ein kleinstes Element existiert. Als eine abz¨ahlbare Menge existiert eine Bijektionf von Rauf eine Teilmenge von Nund somit l¨asst sich eine solche Ordnung durch r1< r2:⇐⇒f(r1)< f(r2) induzieren.

Beweis zu Satz 3: Der Beweis erfolgt per Induktion nach der Tiefe des Semantikbaumes. Es wird f¨ur Auswertungen, deren Semantikbaum Tiefenbesitzt, gezeigt, dass sie die einzige m¨ogliche Auswertung f¨ur ihren Startzustand und ihr Startwort sind.

Induktionsanfang: n= 0

Sei (ν, ρ, ω) =⇒ (ν0, ρ0, ω0) eine Auswertung dessen Semantikbaum die Tiefe 0 besitzt. Dann war die Auswertung eine der folgenden Regeln:

1. Reference

Da nichts ge¨andert wird, ist das Auswertungsergebnis offensichtlich eindeutig.

2. Var

Diese Regel l¨asst sich nicht gleichzeitig mit VarDekl anwenden, denn f¨urVar mussν(r) definiert sein, f¨urVarDekl hingegen nicht.

Da ν und v = ω vorgegeben sind, ist r = ν(v) eindeutig bestimmt. Somit ist (ν, ρ, r) eindeutig bestimmt.

3. VarDekl

Als wohlgeordnete Menge, besitzt jede nichtleere Teilmenge vonRein eindeutig bestimmtes kleinstes Element. Somit existiert ein eindeutig bestimmtes r unter allen r ∈ R mit ρ(r) nicht definiert. (ν, ρ, v) ist gegeben und somit (ν[vr], ρ[nilr ], r) eindeutig bestimmt.

4. LokalVar

Diese Regel l¨asst sich nicht gleichzeitig mitLokalVarDeklanwenden, denn f¨urLokalVar mussν(r) definiert sein, f¨urLokalVarDeklhingegen nicht.

ν und somitνn sind gegeben. v ist ebenfalls gegeben, da es sich einfach nur um das Suffix des auszuwertenden Wortes handelt. Somit muss auch r=νn(v) eindeutig bestimmt sein, weshalb es nur ein m¨ogliches Ergebnis (ν, ρ, r) der Auswertung gibt.

5. LokalVarDekl

r ist wie in VarDekl eindeutig festgelegt. Der Stack ν und somit die Funktionen νi sind gegeben, sodass ν0 eindeutig ist. Entsprechend ist (ν0, ρ[nilr ], r) eindeutig bestimmt.

6. GlobalVar

Analog zuLokalVarnur mit Index 0 anstelle vonn.

7. GlobalVarDekl

Analog zuLokalVarDeklnur mit Index 0 anstelle vonn.

8. FErzeugung

In der Anmerkung zuFErzeugungsteht, dasse1 nur die Argumentdeklaration beinhalten soll, e1 unde2 sind damit eindeutig festgelegt. Das Herleitung von ω beginnt n¨amlich mit F U N → do ARGDEKL -> LIN ES end, e1 und e2 m¨ussen also die Teilworte erzeugt von ARGDEKL und LIN ES sein und sind wegen Eindeutigkeit der Grammatik also f¨ur gegebenes ω eindeutig.

Daν ebenfalls gegeben ist, ist auche0=ζ(ν, e2) eindeutig festgelegt. Der Referenzwertrist wie inVarDekl gew¨ahlt und eindeutig.

Das Resultat der Auswertung (ν, ρ[do [catch]re

1->e0end], r) ist also auch eindeutig bestimmt.

Induktionsschritt:

Induktionsannahme: Sein∈Nderart, dass alle Auswertungen, deren Tiefe des Semantikbaumes maximalnist, die einzige Auswertung f¨ur ihren Startzustand und Startwort sind.

Induktionsbehauptung: Dann gilt auch f¨ur alle Auswertungen, deren Semantikbaum Tiefen+ 1 hat, dass sie die einzige Auswertung f¨ur ihren Startzustand und Startwort sind.

Induktionsbeweis: Sei eine Auswertung von (ν, ρ, ω) mit Tiefen+1 des Semantikbaumes gegeben.

Dann ist die Wurzel des Baumes, also die zuerst verwendete semantische Regel, wegen der Ein-deutigkeit der Grammatik eindeutig festgelegt.

Der Ausgangsausdruck wird von manchen Regeln in Teilausdr¨ucke zerlegt. Dies geschieht aber immer entsprechend der Grammatik: Die Metavariableedarf immer nur W¨orter beschreiben, die aus einem Nichtterminal hergeleitet sind. Die Metavariablevbeschreibt immer W¨orter hergeleitet ausVARPART undrW¨orter ausREF EREN CE.

Wegen der Eindeutigkeit der Grammatik, muss die Belegung dieser Metavariablen eindeutig sein, denn das Aufteilen des Ausgangsausdrucks in Teilworte geschieht immer entsprechend der Pro-duktionsregeln. Die Teilworte stehen immer an den Stellen, wo in den Produktionsregen ein Nichtterminal steht. Lautet der Ausgangsausdruck beispielsweise ”e1 =e2”, so ist das Wort aus COP Y hergeleitet und dieei m¨ussen vonRVALUE hergeleitet worden sein.

F¨ur die Belegung der ei gibt es nach Beweis von Satz 1 nur eine M¨oglichkeit, denn dort wurde gezeigt, dass die Herleitung f¨ur ein gegebenes Startterminal eindeutig ist.

Mit den Belegungen der Metavariablen, sind dann auch die resultierenden Worte zusammengeset-zter Terme wie ”localv =r” eindeutig bestimmt.

Ist der aktuelle Zustand ebenfalls eindeutig, sind somit auch W¨orter, die durch dieρoderζ Funk-tion entstehen eindeutig bestimmt.

Wird ein solches eindeutig bestimmtes Teilwort/zusammengesetzter Term ω0 in der Bedingung einer semantischen Regel mit einem eindeutig bestimmten Zustand (ν0, ρ0) ausgewertet, muss auch das Ergebnis davon eindeutig bestimmt sein. Die Teilauswertung kann n¨amlich maximal Tiefe n haben, sodass die I.V. auf diese Teilauswertung angewendet werden kann.

Zu Beginn sind das auszuwertende (ν, ρ, ω) gegeben, der aktuelle Zustand also eindeutig. Entsprech-end sind auch alle weiteren Zust¨ande, die in der Bedingung auftauchen, eindeutig bestimmt, da sie entweder das Ergebnis einer eindeutigen Auswertung sind, oder durch einen deterministischen Ausdruck wie z.B. ”ν0= (ν0, ..., νn,{}) entstehen.

Zusammengefasst bedeutet dies, dass jede einzelne Metavariable in den Bedingungen der Regeln f¨ur einen gegebenen Startzustand und Startwort eine eindeutige Belegung hat. Da auch die zu verwende semantische Regel eindeutig ist, muss also das Ergebnis dieser Regel eindeutig sein.

Sollte bei der Auswertung eines Teilausdrucks jy oder jr zu true werden, ist das Ergebnis

Das eben beschriebene Beweisschema wird einmal detailiert f¨ur KZuweisung angewendet, alle weiteren Regeln werden weniger genau bewiesen, um den Beweis zu k¨urzen.

Sei eine Auswertung von (ν, ρ, ω) mit maximaler Tiefe von n+ 1 des Semantikbaumes gegeben, dann ist die zuerst verwendete Semantische Regel (die Wurzel des Semantikbaumes) eindeutig gegeben. Sei diese Regel eine der folgenden:

1. KZuweisung (ν, ρ, e2) =⇒ (ν0, ρ0, r2),(ν0, ρ0, e1) =⇒ (ν00, ρ00, r1), ρ00(r2) =w (ν, ρ, e1=e2) =⇒ (ν00, ρ00[rw1], r1)

Das Startprogrammωl¨asst sich als das Worte1=e2auffassen. Dieei sind eindeutig gegeben, dennω l¨asst sich von dem NichtterminalCOP Y herleiten und dieei sind die beiden Teil-worte erzeugt von RVALUE. Nach dem Beweis von Satz 1 sind diese beiden Teilworte f¨ur gegebenes ω eindeutig bestimmt.

Daνundρgegeben sind, ist die Belegung des Tupels (ν, ρ, e2) eindeutig, sodass die Auswer-tung (ν, ρ, e2) =⇒ (ν0, ρ0, r2) nach I.V. eindeutig ist, die Tiefe dieser Auswertung ist n¨amlich maximaln.

Mit der eindeutigen Belegung von (ν0, ρ0) folgt die eindeutige Belegung von (ν0, ρ0, e1) und Nach I.V. muss also auch dessen Auswertungsergebnis (ν00, ρ00, r1) eindeutig sein, da die Tiefe maximalnsein kann.

Somit sindw=ρ00(r2) und auch das Endergebnis (ν00, ρ00[rw1], r2) eindeutig festgelegt, da die Ver¨anderung vonρ00 durch [rw1] deterministisch ist.

2. RZuweisung (ν, ρ, e) =⇒ (ν0, ρ0, r) (ν, ρ, v:=e) =⇒ (ν0[vr], ρ0, r)

v und e sind die Teilworte von ASSIGN, die durch VAR und RVALUE hergeleitet wer-den und somit eindeutig. Die Teilauswertung von (ν, ρ, e) hat eine maximale Tiefe von n und weil das auszuwertende (ν, ρ, e) eindeutig festgelegt ist, ist nach I.V. auch das Ergebnis (ν0, ρ0, r) eindeutig bestimmt. Somit ist (ν0[vr], ρ0, r) das einzig m¨ogliche Resultat.

Diese Regel erfolgt analog zu RZuweisung. Das auszuwertende Wort hat die eindeutige HerleitungASSIGN →VAR→LOCAL:=RVALUE→ local VARPART:=RVALUE, sodass die Teilworte v und e also eindeutig bestimmt sind. Also ist nach I.V. (ν0, ρ0, r) und somit auch die νi0 und ν00 eindeutig bestimmt. Insgesamt ist also (ν00, ρ0, r) eindeutig

e,νundρsind gegeben und die Teilauswertung von (ν, ρ, e) hat maximal Tiefen. Nach I.V.

ist das Resultat (ν0, ρ0, r) eindeutig und somit auch das Gesamtresultat (ν0[ jvr ], ρ0, true, true, r).

6. YieldDer Beweis erfolgt genau wie bei Return.

7. FVerz¨ogert

Die e0 bis ek sind die einzelnen RVALUE, zu denen SP ACE aufgel¨ost wird und somit sind die Teilw¨orter, mit denen dieei belegt werden nach Eindeutigkeit der Grammatik ein-deutig bestimmt. Die Ausf¨uhrung von (ν, ρ, e) zu (ν0ρ0, r) ist nach I.V. eindeutig, ebenso wie jede einzelne Auswertung der anderenei.

Das Wort do vk+1:,...,vn: -> yield r(r1, ..., rk, vk+1, ..., vn); end ist eindeutig bestimmt, denn die ri wurde zuvor von den eindeutigen Teilausf¨uhrungen berechnet und die vi sind durchρ0(r) gegeben. Die Auswertung dieses Wortes mit dem Zustand (νk, ρk) ist nach I.V.

ebenfalls eindeutig, sodass (ν00, ρ00, r00) nur eine m¨ogliche Belegung hat.

8. FAusf¨uhrung RVALUE aus ARGS. Die Belegung der ei ist wegen der Eindeutigkeit der Grammatik ebenfalls eindeutig.

Nach I.A. muss deshalb die Auswertung von (ν, ρ, e0) zu (ν0, ρ0, r) eindeutig sein. Somit ist (ν0, ρ0, e1) eindeutig festgelegt und nach I.V. (ν1, ρ1, r1) eindeutig bestimmt. Mit der gleichen Begr¨undung ist auch die Auswertung der anderen Argumente sowie deren Zuordnung zu den lokalen Variablen eindeutig bestimmt, da immer die Startzust¨ande und Startprogramme ein-deutig festgelegt sind und einfach die I.V. angewendet wird.

Der Funktionsrumpfeist eindeutig bestimmt, daρ0undreindeutig bestimmt sind undνpop ist eindeutig, da nur ein Namensraum auf den Stack des eindeutigenνn gelegt wurde. Nach I.V. muss also auch die Auswertung des Rumpfes eindeutig sein. Die weitere Manipulation der Zustandsfunktion ist deterministisch. Da also jede Bedingung der Regel f¨ur gegebenes (ν, ρ, eo(e1, ..., en)) eindeutig ist, ist auch das Endergebnis eindeutig.

9. FAufImplizitA-D

Dieeisind die Teilw¨orter erzeugt vonLIN ENichtterminalen und somit sind diese Variablen eindeutig belegt. Die Auswertung von (σ, e1) kann nur ein m¨ogliches Ergebnis haben, da auch σeindeutig vorgegeben ist und die Auswertung maximal Tiefenhaben kann. Nach I.V. ist also die Auswertung von (σ, e1) zu (σ0, r1) und dessen Auswertung zu (σ00, r2) eindeutig. Da nun alsoσ00 eindeutig vorgegeben ist, ist nach I.V. auch die Auswertung von (σ00, e2;...en; ) zu (σ000, r2) eindeutig. Der Ausdruck σ000[rjv

3] ver¨andert dieν Funktion des Zustandes auf deterministische Weise.

F¨ur jedes Programm haben die RegelnFAufImplizitA-Dalso nur ein m¨ogliches Ergebnis und sind somit eindeutig.

10. MuliLine

Analog zuFAufImplizitA-D, nur die Auswertung der ersten Funktion entf¨allt.

Satz 4: Die Semantik vonlazy Imp ist erweitert eindeutig.

Dies l¨asst sich durch einen Induktionsbeweis beweisen, indem man ein Programm parallel zweimal ausf¨uhrt und w¨ahrenddessen dieβFunktion f¨ur die≡Relation konstruiert. Um aber nicht erneut einen mehrseitigen Induktionsbeweis aufzuf¨uhren, erfolgt der Beweis stattdessen ¨uber Wohlord-nungen.

Die 0 ist in folgendem Beweis nicht inNenthalten.

Beweis: Seien ein zul¨assiger auszuwertender Ausdruck (ν, ρ, ω) sowie zwei endliche Auswertungen (ν, ρ, ω) =⇒ (νA, ρA, rA) und (ν, ρ, ω) =⇒ (νB, ρB, rB)

gegeben. Erstere wird im folgendenAVariante und letztere B Variante genannt.

Man nummeriere die Referenzwerte inDef(ρ) durch, d.h. Def(ρ) ={a1, a2, ...}.

DefiniereαA:R→Nmit

1. αA(ai) = 2i−1, wobeiai die Referenzwerte ausDef(ρ).

2. αA(ri) = 2i, wobei ri der i-te Referenzwert ist, der der ρFunktion im Laufe der Auswer-tung hinzugef¨ugt wird. Da die Auswertung endlich ist, existieren nur kA ∈Nviele solcher Referenzwerte.

3. Die FunktionαA bilde alle weiteren Referenzwerte injektiv auf{i+ 2kA|i∈N} ab.

DaαA injektiv ist, induziert die Funktion eine Wohlordnung<A aufR mit r1<Ar2⇐⇒αA(r1)< αA(r2) f¨ur aller1, r2∈R.

Insbesondere ist dieAVariante genau die Auswertung, die man erh¨alt, wenn man die Bedingung

”kleinstesrmitρ(r) undefiniert” bez¨uglich der Wohlordnung<Averwendet.

Analog gilt das gleiche f¨ur eine injektive FunktionαB und einer Wohlordnung<B f¨ur dieB Vari-ante der Ausf¨uhrung.

Die wohlgeordnete Menge (R, <A) ist isomorph zu einer Teilmenge (TA, <),Bild(αA) =TA⊂N. Isomorph heißt hier: es existiert eine Bijektion (ein Isomorphismus)β mit

r1<Ar2⇔β(r1)< β(r2) f¨ur aller1, r2∈R. Im aktuellen Fall istαA diese Bijektionβ.

Es gilt aber auch, dass (TA, <) isomorph zu (N, <) ist, dazu betrachte die Abbildungβ, die das kleinste Element vonTA auf 1 abbildet, das n¨achst kleinste Element auf 2 abbildet und so weiter.

Die Funktionβ ist offensichtliche injektiv und erh¨alt die Ordnungseigenschaften. Surjektiv istβ, daTA eine unendliche Menge ist und N eine induktive Menge, es wird also jede nat¨urliche Zahl irgendwann einemr∈Rzugeordnet.

Das gleiche gilt analog f¨ur (TB, <), also ist (R, <A)∼= (TA, <)∼= (N, <)∼= (TB, <)∼= (R, <B). Es existiert also eine Bijektionβ:R→R mitr1<Ar2⇐⇒β(r1)< β(r2).

F¨ur β gilt außerdem β(r) = r f¨ur alle r ∈ Def(ρ), denn a1 ist sowohl in (R, <A), als auch in (R, <B) das kleinste Element in R und jedes weitere ai ist einfach der zweite Nachfolger des vorherigenai−1bez¨uglich der Ordnungen.

Daraus folgt nun, dass Variante A und B der Auswertung bez¨uglich β semantisch ¨aquivalent sind, denn:

Man ersetze in der Auswertung derAVariante alle Referenzwerterdurchβ(r). Damit sind nicht nur die Metavariablenrin den semantischen Regeln gemeint, sondern jeder einzelne Referenzwert, der irgendwo auftaucht. Auch in den Funktionen und Worten. Das heißtν Funktionen{vi7→ri} werden zu {vi 7→ β(ri)}, ρ Funktionen{ri 7→ Pi} werden zu {β(ri)7→ β[Pi]} und Programme/

Worteω werden zuβ[ω].

Durch diese Umbenennung eines jeden r ∈ R zu β(r) bleibt die Auswertung g¨ultig, denn wie die Referenzwerte dargestellt werden ist f¨ur die Semantik unwichtig. Dies erkennt man bereits daran, dass die Semantik keine Menge als R vorgibt. Es handelt sich aber auch um eine g¨ultige

Auswertung mit der Bedingung ”kleinesrmitρ(r) undefiniert” bez¨uglich der Ordnung<B, denn β ist ein Isomorphimus zwischen (R, <A) und (R, <B).

Bei der Umbenennung bleibt das auszuwertende (ν, ρ, ω) zudem unver¨andert, da es sich um einen zul¨assigen auszuwertenden Ausdruck handelt, also nur Referenzwerte aus Def(ρ) enth¨alt undβ sich aufDef(ρ) wie die Identit¨at verh¨alt.

Nach Satz 3 gibt es aber nur eine einzige Auswertung von (ν, ρ, ω) bez¨uglich<B und der Bedin-gung ”kleinstesrmit ρ(r) undefiniert”, die umbenannte AuswertungsvarianteA und VarianteB sind also identisch. AuswertungsvarianteA ist also bis auf eine Umbenennung der Referenzwerte nachβ v¨ollig identisch zu VarianteB.

F¨ur die resultierenden Zust¨ande (νA, ρA, rA) und (νB, ρB, rB) heißt das:

1. β◦νiAiB, denn die Verkn¨upfung mitβ benennt die Referenzen um.

2. β[·]◦ρA◦β−1B, denn die Verkn¨upfungen mitβ[·] benennt die Referenzen der Bilder um und die Verkn¨upfung mitβ−1 benennt die Referenzwerte der Urbilder um.

⇒β[ρA] =β[·]◦ρAB◦β 3. β[rA] =β(rA) =β(rB) =β[rB]

Somit gilt (νA, ρA, rA) ≡ (νB, ρB, rB) und die Semantik von lazy Imp ist erweitert eindeutig.

3 Objekte und Kontrollstrukturen

In diesem Kapitel werden Objekte (Tabellen) der Kernsprache hinzugef¨ugt. Dazu wird zun¨achst die Syntax erweitert, indem der Grammatik einige Produktionsregeln hinzugef¨ugt werden. Im Anschluss wird die Semantik erweitert. Ein Beweis f¨ur die Eindeutigkeit entf¨allt in dieser Bache-lorarbeit aufgrund der Komplexit¨at.

3.1 Syntax

Die Grammatik der Syntax wird um folgende Regeln erweitert:

LIN ES|F U N DEF

VAR → DOT

RVALUE → COLON

DOT → RVALUE.VARPART

COLON → RVALUE:VARPART

F U N → do LIN ES else LIN ES end

diese Regeln w¨aren schon ausreichend, aber wir f¨ugen noch weitere ein, umlazy Imp sch¨oner zu gestalten:

F U N DEF → def

(

VAR|COLON

)

(

[

ARGDEKL

]

)LIN ES end

F U N CALL → while(RVALUE,RVALUE) SP ACE → (whileRVALUE RVALUE)

Beachte, dass eine Definition von if in der Grammatik und operationalen Semantik nicht n¨otig ist, da es direkt inlazy Imp definiert werden kann:

def i f( bed , b l o c k ) b l o c k ( bed ) end

ebenso musswhilenicht speziell definiert werden, es w¨urde auch folgendes reichen:

def while( bed , b l o c k ) i f bed ( ) do

b l o c k ( )

while( bed , b l o c k ) end

end

Allerdings w¨are die Syntax des Aufrufes nicht mehr so sch¨on, denn man m¨usste schreiben while ( i :> 0 ) do

i -end

anstelle von

while ( i > 0 ) do i -end

damit die Bedingung bei jedem Schleifendurchlauf neu berechnet wird.

3.2 Operationale Semantik

Objekte sind essentiell nur eine Sammlung von Variablen. Sie werden in der operationalen Se-mantik also durch eine FunktionV →R dargestellt.

Funktionen sind ebenfalls Objekte, sie werden nun also durch das Tupel (do ... end,{v7→r}) dargestellt. Einfache Tabellen, die keine Funktion sind, sind Tupel der Form (,{v7→r}).

ρ(r)2(v) beschreibt also das Attributvder Tabelle hinter dem Referenzwertr.

Zur besseren Lesbarkeit, werden folgende Schreibweisen definiert:

1. Wenn ρ(r) =do ... endgeschrieben wird, wird implizit ρ(r)1 =do ... endgemeint.

Die Anwendungsregeln der Kernsprache m¨ussen also nicht umdefiniert werden.

2. ρ[rr1,v

2 ] ist die vorherigeρFunktion, aber mitρ(r1)2:=ρ(r1)2[rv

2].

Das heißt das Attributv des Objektes hinterr1 zeigt nun auf die Referenzr2

Des Weiteren muss der Startzustand des Programms zwei Tabellen/Objekte besitzen. Ein nil Objekt und einf alseObjekt. Jede uninitialisierte Variable bekommt automatisch eine Kopie des nil Objekts zugewiesen. Das f alseObjekt wird f¨ur die Kontrollstrukturen ben¨otigt, da nur nil undf alseObjekte den else-Zweig ausf¨uhren lassen sollen.

Neben der klassischen Bedeutung vonnilals undefinierter Wert, l¨asst sichnilinlazy Imp als die leere Standardtabelle betrachten. Da jede Variable mit nil initialisiert wird, bedeutet das, dass jede Tabelle automatisch die Attribute vonnilerh¨alt. nilsollte in Anwendung also alle wichtigen Standardattribute besitzen, wie zum Beispiel die Methode==zum Vergleichen.

3.2.1 Variablen

Kopiezuweisung

Bei der Kopiezuweisung sind keine ¨Anderungen n¨otig, denn die Zuweisung ist unabh¨angig von der

Bei der Kopiezuweisung sind keine ¨Anderungen n¨otig, denn die Zuweisung ist unabh¨angig von der