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

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Konstruktoren können in den Applikationselementen an zwei Stellen auftreten:<br />

als applizierte Funktion (Head-Assoziation) oder als ein Parameter (Args-<br />

Assoziation). Im zweiten Fall muss natürlich zusätzlich der Index des Parameters<br />

beachtet werden.<br />

Mit dem folgenden Prädikat überprüfen wir ein Paar von Applikationen und<br />

ein Paar von Konstruktoren, ob die Unifikation der Konstruktoren durch die<br />

strukturelle Übereinstimmung der Applikationen impliziert wird.<br />

define testApplForConstructor(<br />

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

con:(one:Constructor, two:Constructor)<br />

) := (<br />

/* applied function case */<br />

( appl.one.Head = con.one <strong>and</strong><br />

appl.two.Head = con.two<br />

) or<br />

/* parameter case */<br />

( is Args(appl.one, con.one) <strong>and</strong><br />

is Args(appl.two, con.two) <strong>and</strong><br />

indexOf(con.one, appl.one, "Args") =<br />

indexOf(con.two, appl.two, "Args")<br />

)<br />

) .<br />

Mit dieser Vorberechnung der Applikationselemente und der Definition des<br />

Testprädikats können wir nun die Vereinigungsrelation der Konstruktoren berechnen.<br />

Wir sammeln ein Paar von Konstruktoren in der Fixpunktmenge auf,<br />

wenn es, entweder durch ein Element der Ein- bzw. Ausgaberelation oder durch<br />

ein Paar von Applikationen, als zu unifizierend bestimmt wird.<br />

exists constructor_map: lfp FP4 set<br />

fp4_it:(one:Constructor, two:Constructor)<br />

with (<br />

/* single signal in input pattern */<br />

exists im_fp4:input_map . (<br />

fp4_it.one = im_fp4.one.Pattern.Model <strong>and</strong><br />

fp4_it.two = im_fp4.two.Pattern.Model<br />

)<br />

or<br />

/* single signal in output expression */<br />

exists om_fp4:output_map . (<br />

fp4_it.one = om_fp4.one.Expression.Model <strong>and</strong><br />

fp4_it.two = om_fp4.two.Expression.Model<br />

)<br />

/* unification implied by application element */<br />

or exists fp4_ap:appl_fixpoint .<br />

call testApplForConstructor(fp4_ap, fp4_it)<br />

) .<br />

Die beiden in diesem Abschnitt berechneten Unifikationsrelationen müssen<br />

noch dahingehend überprüft werden, ob die Input- und Output-Relation die<br />

51

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!