Spezifikationsmodule - Software and Systems Engineering - TUM
Spezifikationsmodule - Software and Systems Engineering - TUM
Spezifikationsmodule - Software and Systems Engineering - TUM
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Abhängigkeiten bezüglich dieser beiden Relationen erfüllen. Wir wissen zwar,<br />
dass aufgrund der Konstruktion der beiden Relationen für jedes Konstruktor<br />
bzw. Applikationspaar ein Ein- oder Ausgabepaar existiert, nicht jedoch ob für<br />
alle Ein-/Ausgabepaare die Terme unifiziert werden konnten. Wir müssen also<br />
überprüfen, ob es für alle Ein- und Ausgabeterme entsprechende Konstruktoroder<br />
Applikationsunifikationen gibt. Da Konstruktorenpaare auch durch Applikationspaare<br />
entst<strong>and</strong>en sein können, sind auch letztere in Bezug auf erstere<br />
zu prüfen. Nur dadurch können wir sicherstellen, dass die unifizierten Terme<br />
strukturäquivalent sind.<br />
Ein Beispiel soll Notwendigkeit dieser Zusatzprüfungen verdeutlichen. Abbildung<br />
5.5 zeigt die Termstruktur von drei Eingabeausdrücken. Die erste und<br />
der zweite Term, sowie der erste und der dritte, können nicht unifiziert werden,<br />
weil die obersten Elemente der Baumdarstellung ein Konstruktor und eine<br />
Applikation sind. Hierfür reicht die Überprüfung der Abhängigkeit zwischen<br />
Eingaberelation und Konstruktorrelation.<br />
p?Con1<br />
q?Con2(Con3)<br />
r?Con4(Con5(Con6))<br />
Con1<br />
Appl<br />
Appl<br />
Con2<br />
Con3<br />
Con4<br />
Appl<br />
Head<br />
Args<br />
Con5<br />
Con6<br />
Abbildung 5.5: Nicht-unifizierbare Termstrukturen<br />
Dass der zweite Term und dritte Term nicht unifiziert werden können, kann<br />
allerdings nur durch die Überprüfung der Applikationsrelation bewiesen werden,<br />
denn die Eingaberelation bezieht die Strukturäquivalenz nur auf das oberste<br />
Element des Terms. Bei der Überprüfung der Applikationsrelation tritt dann<br />
der Fehler im ersten Parameter zutage.<br />
Die genannten Abhängigkeiten können mit dem aus Kapitel 4 bekannten<br />
ODL St<strong>and</strong>ardausdrücken überprüft werden, weshalb wir hier auf eine Wiederholung<br />
des ODL Codes verzichten.<br />
Im Hinblick auf das Konstruktionsverfahren fordern wir wieder die Ein-Eindeutigkeit<br />
von den berechneten Relationen.<br />
Berechnung der Datentypvereinigungen<br />
Vorteil der verherigen umfangreichen Berechnung ist, dass wir nun die Datentyprelation<br />
sehr leicht ableiten können. Zwei Datentypdefinitionen sind zu unifizieren,<br />
wenn es ein Paar von vereinigten Schnittstellen oder vereinigten Konstruktoren<br />
gibt. Dies können wir, wie schon bekannt, durch die St<strong>and</strong>ardausdrücke<br />
für Abhängigkeiten bewerkstelligen.<br />
exists typedef_map:lfp FP_TDef set<br />
fp_tdef_it:(one:DataDef, two:DataDef)<br />
with (<br />
52