Der erste dieser beiden Begriffe ist die gehobene Domäne. Zu Beginn eines Programmlaufes sind alle Variablen, die in dem Programm genutzt werden, mit einem zufälligen Wert belegt. Um dieses Verhalten ausdrücken zu können wird der Wert undefiniert eingeführt. In der denotationellen Semantik wird dieser Wert durch das Symbol '_' (1) dargestellt. Der Wert undefiniert ist stets das kleinste Element der Menge, daher gilt für jedes Element e der Menge M 'e > _'. Wird eine semantische Domäne mit {_} vereinigt, so entsteht eine gehobene Domäne. Gehobene Domänen werden durch den Zusatz des Zeichens '_' hinter dem Domänennamen gekennzeichnet.
Integer u {undefiniert} = Integer_
Nun kann der Zustand definiert werden. Ein Zustand ist selbst eine semantische Domäne. Die Elemente dieser Domäne sind Funktionen, die einer Variablen einen Wert zuordnen.
Domäne Env: Environment = Identifier -> Integer_
Entsprechend muß für jede semantische Domäne, deren Werte in Variablen gespeichert werden können ein eigener Zustand definiert werden. Die Menge aller Zustände ergibt den Gesamtzustand des Programmes. Die Gesamtheit der Zustände wird jeder Expression übergeben, da sie für die Auswertung erforderlich ist. Der Wert einer Variablen wird nun zu dem Wert dieser Variablen in dem zugeordneten Zustand. Ist diese Variable nicht in dem Zustand enthalten, so ergibt sich der Wert undefiniert.
E[[I]](Env) = Env(I)
Für die semantische Domäne des Zustands wird der Operator & eingeführt. Dieser Operator fügt eine Variable mit ihrem Wert zu dem Zustand hinzu, oder belegt, wenn sie schon vorhanden ist, sie mit dem neuen Wert.
Domäne Env: Environment = Identifier -> Integer_
Oparationen | |
& : Environment x {I = E[[E]](Env)} -> Environment |
(1) Üblicherweise wird ein Symbol verwandt, das einem umgedrehten T entspricht.