Generierung lokaler Optimierungen - IPD Snelting
Generierung lokaler Optimierungen - IPD Snelting
Generierung lokaler Optimierungen - IPD Snelting
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
2 Grundlagen<br />
Definition 9 (Ergebnis eines Musters). Sei m ein Muster, G der zu m gehörende Graph,<br />
V die Menge der Knoten von G, sowie nvar = |{v ∈ V : type(v) = var}| die Anzahl<br />
der Knoten des Musters mit dem Typ einer Variablen (type(v) = var). Sei weiter<br />
tv ∈ Z nvar ein Eingabevektor, der jedem Knoten v ∈ V , mit type(v) = var einen Wert<br />
(Konstante) val = tv[idx(v)] zuordnet. val bildet selbst wieder eine Vektor (val) 1 , so<br />
dass eval(type(v), (val) 1 ) den Wert des Variablen-Knoten berechnet. Das Ergebnis eines<br />
Musters m(tv) ergibt sich durch eine Postorder-Traversierung 1 von G, bei der für<br />
jeden Knoten v ′ die Abbildung eval bezüglich der Ergebnisse seiner Vorgänger-Knoten<br />
ausgewertet wird.<br />
Abbildung 2.1 zeigt zu Definition 9 ein Beispiel. Der Eingabevektor tv = (1, 2) wird auf<br />
das in der Abbildung gezeigte Muster mit der Semantik (var0 + var1) + 2 angewendet.<br />
Wie in der Definition beschrieben, wird in Postorder-Reihenfolge jeder Knoten durch die<br />
eval Abbildung ausgewertet. Es ergibt sich das Ergebnis m(tv) = 5.<br />
Eingabevektor<br />
var0<br />
(1,2)<br />
var1<br />
add 2<br />
add<br />
−→<br />
1 2<br />
add 2<br />
add<br />
−→<br />
3 2<br />
add<br />
−→ 5<br />
Abbildung 2.1: Beispiel zur Berechnung des Ergebnisses eines Musters bezüglich eines<br />
Eingabevektors.<br />
Für die Aufstellung von Ersetzungsregeln ist es notwendig zu wissen, ob zwei Muster m<br />
und m ′ für alle Eingabevektoren jeweils dasselbe Ergebnis berechnen. Man spricht von<br />
semantischer Äquivalenz. Formal gilt:<br />
Definition 10 (Semantische Äquivalenz). Seien m und m′ zwei Muster, sowie Vm die<br />
Menge der Knoten von m und Vm ′ die Menge der Knoten von m′ . m und m ′ sind genau<br />
dann semantisch äquivalent, wenn für alle Eingabevektoren tv ∈ Z n , mit n = max(|{v ∈<br />
Vm : type(v) = var}|, |{v ∈ Vm ′ : type(v) = var}|) gilt:<br />
m(tv) = m ′ (tv)<br />
Für zwei semantisch äquivalente Muster m und m ′ schreibt man: m ≡ m ′ .<br />
1 zuerst wird der linke Teilbaum, dann der rechte Teilbaum und zum Schluss die Wurzel behandelt<br />
14