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.
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