Skript (Fassung vom 4.4.2011) - Lehr- und Forschungsgebiet ...
Skript (Fassung vom 4.4.2011) - Lehr- und Forschungsgebiet ...
Skript (Fassung vom 4.4.2011) - Lehr- und Forschungsgebiet ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
ob aus einer Menge von Axiomen bestimmte andere Aussagen folgen). Beispielsweise<br />
kann man untersuchen, ob die Aussagen<br />
plus(succ(succ(O)),x) ≡ plus(succ(O),succ(x)) (1.3)<br />
plus(plus(x,y),z) ≡ plus(x,plus(y,z)) (1.4)<br />
für das ursprüngliche Additionsprogramm mit den Gleichungen (1.1) <strong>und</strong> (1.2) (bei<br />
beliebigen x,y,z) gilt. Die zweite Aussage bedeutet, dass wir überprüfen wollen, ob<br />
dieses Programm eine assoziative Funktion berechnet.<br />
Ähnliche Fragentretenauchbei derSpezifikationvonProgrammen auf. Einealgebraische<br />
Spezifikation von Datentypen besteht aus der Angabe von bestimmten Axiomen<br />
<strong>und</strong> die Frage ist, welche Aussagen über den Datentyp aus den Axiomen folgen. Als<br />
Beispiel betrachten wir die Axiome, die Gruppen spezifizieren:<br />
f(x,f(y,z)) ≡ f(f(x,y),z) (1.5)<br />
f(x,e) ≡ x (1.6)<br />
f(x,i(x)) ≡ e (1.7)<br />
Hierbei ist f eine assoziative Verknüpfung, e ist das rechtsneutrale Element <strong>und</strong> i<br />
ist die rechtsinverse Funktion. Ein Beispiel für eine Gruppe sind z.B. die ganzen<br />
Zahlen, wobei f die Addition, e die Zahl 0 <strong>und</strong> i die Funktion ist, die zu einer Zahl<br />
n jeweils die Zahl −n berechnet. Hier stellt sich z.B. die Frage, ob in jeder Gruppe<br />
die inverse Funktion “selbstinvers” ist, d.h., ob eine zweimalige Anwendung von i<br />
wieder das ursprüngliche Element erzeugt. Mit anderen Worten, man will wissen, ob<br />
die Gleichung<br />
i(i(n)) ≡ n (1.8)<br />
für alleElemente nausden obigendrei Axiomen folgt. Diese Fragebezeichnet manals<br />
Wortproblem. Dies ist tatsächlich der Fall, wie man durch eine (ziemlich lange <strong>und</strong><br />
komplizierte) Folge von Anwendungen dieser Gleichungen zeigen kann (siehe Bsp.<br />
3.1.15, S. 25). Wir werden zeigen, wie man mit Hilfe von Termersetzungssystemen<br />
solch eine Frage automatisch lösen kann.<br />
• Wie kann man ein unvollständiges Programm automatisch vervollständigen<br />
Hierbei wird die Frage untersucht, wie man aus einem nur unvollständig angegebenen<br />
Programm (bzw. aus einer Menge von Axiomen) ein vollständiges (konfluentes<br />
<strong>und</strong> terminierendes) Programm automatisch generieren kann. Beispielsweise ist das<br />
Programm aus den beiden plus-Gleichungen (1.1) <strong>und</strong> (1.2) zusammen mit<br />
plus(succ(x),y) ≡ plus(x,succ(y))<br />
ja nicht mehr konfluent. Man kann es aber (automatisch) um die weitere Gleichung<br />
plus(x,succ(y)) ≡ succ(plus(x,y))<br />
ergänzen <strong>und</strong> erhält dadurch ein “äquivalentes” Programm, das sowohl konfluent als<br />
auch terminierend ist. Die Frage ist, wie man solche Vervollständigungen automatisch<br />
findet.