20.01.2015 Aufrufe

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

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.

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.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!