03.02.2014 Aufrufe

Spezifikationsmodule - Software and Systems Engineering - TUM

Spezifikationsmodule - Software and Systems Engineering - TUM

Spezifikationsmodule - Software and Systems Engineering - TUM

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

tm_fp3.one = fp3_it.one.TransitionSegment <strong>and</strong><br />

tm_fp3.two = fp3_it.two.TransitionSegment<br />

) <strong>and</strong><br />

exists pm_fp3:port_map . (<br />

fp3_it.one.Port.Model = pm_fp3.one <strong>and</strong><br />

fp3_it.two.Port.Model = pm_fp3.two<br />

)) .<br />

Die so berechneten Vereinigungen werden wir sogleich einsetzen um die notwendigen<br />

Vereinigungen von Konstruktoren zu berechnen.<br />

5.4.5 Unifikation der Datendefinitionen<br />

Als letzten Teil setzen wir die Unifikation der Datendefinitionen in ODL um. Wir<br />

werden dazu die Ein-/Ausgaberelationen verwenden. Für deren Terme führen<br />

wir eine Strukturunifikation, ähnlich der prädikatenlogischen Unifikation, wie<br />

wir sie in Kapitel 3 gesehen haben, durch. Wie in Abschnitt 2.5 festgelegt bestehen<br />

Terme nur aus Konstruktoren, die aus Datendefinitionen stammen. Wir<br />

beginnen daher die Termunifikation mit ihnen.<br />

Berechnung der Konstruktorenvereinigungen<br />

Für die Vereinigung der Konstruktoren sammeln wir zunächst alle Paare von<br />

Termelementen (Appl), die Funktionsapplikationen von Konstruktoren darstellen<br />

auf. Diese Paare erhalten wir entweder direkt aus den Termen der unifizierten<br />

Ein- bzw. Ausgabeausdrücke (Input/Output) oder rekursiv als Parameter<br />

aus bereits gefundenen Paaren. Deshalb verwenden wir einen Fixpunktausdruck<br />

um diese rekursive Suche durchzuführen. Die resultierende Menge stellt<br />

gewissermaßen wieder eine Unifikationsrelation dar, denn sie enthält die Paare<br />

von Appl-Elementen, die durch die Termstruktur und die unifizierten Ein-<br />

/Ausgabeausdrücke zuein<strong>and</strong>er korrespondieren.<br />

exists appl_fixpoint: lfp FP_Appl set<br />

fpappl_it:(one:Appl, two:Appl)<br />

with (<br />

exists im_fpa:input_map . (<br />

im_fpa.one.Pattern.Model = fpappl_it.one <strong>and</strong><br />

im_fpa.one.Pattern.Model = fpappl_it.two<br />

) or<br />

exists om_fpa:output_map . (<br />

om_fpa.one.Expression.Model = fpappl_it.one <strong>and</strong><br />

om_fpa.one.Expression.Model = fpappl_it.two<br />

) or<br />

exists fpa_elem:FP_Appl . (<br />

is Args(fpa_elem.one, fpappl_it.one) <strong>and</strong><br />

is Args(fpa_elem.two, fpappl_it.two) <strong>and</strong><br />

indexOf(fpappl_it.one, fpa_elem.one, "Args") =<br />

indexOf(fpappl_it.two, fpa_elem.two, "Args")<br />

)<br />

) .<br />

50

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!