Vorbemerkung:

Die folgenden Themenvorschläge sind unvollständig und naturgemäß oft nicht ganz aktuell! Weitere Themen auch aus anderen Gebieten sind möglich. Kontaktieren Sie bei Interesse daher auf jeden Fall Michael Hanus bzw. die jeweils ausgeführte Kontaktperson.


Implementierung eines Curry-Compilers auf Basis eines GHC-Plugins (Folgearbeit zur Arbeit von K. Prott)

Von: Kai und Finn

Kürzlich wurde auf Basis eines GHC-Plugins prototypisch ein Compiler für die funktional-logische Programmiersprache Curry erstellt. [1] Da Curry syntaktisch sehr ähnlich zu Haskell und quasi eine Erweiterung ist, bietet sich die Nutzung der Infrastruktur des GHCs an. Der Vorteil liegt insbesondere darin, dass man Sprachfeatures wie Multiparametertypklassen, Functional Dependencies, View Patterns und viele mehr mit wenig bis keinem Aufwand für Curry umsetzen kann. Im Rahmen dieser Arbeit soll dieser Prototyp zu einem möglichst vollwertigem Compiler ausgebaut werden. Der Fokus liegt insbesondere in der Unterstützung von IO-Berechnungen, nativem Support von freien Variablen und Unifikation sowie ggf. eingekapselter Suche, da die eigentliche Grundfunktionalität von Curry bereits durch den Prototypen abgedeckt ist.

Eignung: Bachelorarbeit

[1] https://www.informatik.uni-kiel.de/~mh/lehre/abschlussarbeiten/msc/Prott.pdf

Eigenschaftsbasiertes Testen von Programmeigenschaften

Von: Michael Hanus

Mit CurryCheck [1] steht ein Werkzeug zur Verfügung, mit dessen Hilfe nicht nur Unit-Tests, sondern auch komplexere Programmeigenschaften der deklarativen Programmiersprache Curry automatisiert getestet werden können. Es wird verwendet, um täglich die Korrektheit von Curry-Distributionen und den zur Verfügung stehenden Paketen [2] zu testen. Inbesondere werden auch komplexere Eigenschaften, wie Vor- und Nachbedingungen automatisiert getestet. In dieser Arbeit soll der automatisierte Test weiterer Eigenschaften, wie z.B. Klassengesetze, umgesetzt werden, um die Zuverlässigkeit der zur Verfügung stehenden Pakete zu erhöhen.

Eignung: Bachelorarbeit

[1] https://www.informatik.uni-kiel.de/~mh/papers/LOPSTR16.html
[2] https://www-ps.informatik.uni-kiel.de/~cpm/

Visualisierung von Termgraph-orientierten Berechnungen

Von: Michael Hanus

Berechnungen in deklarativen Programmiersprachen basieren in der Regel auf einer Termgraphstruktur, d.h. Terme mit Sharing von (Variablen-)Knoten. Neuere Implementierungen von logisch-funktionalen Programmiersprachen stellen den gesamten Berechnungszustand in Form von Graphen dar, wodurch optimale und vollständige Berechnungsstrategien unterstützt werden. In einem kürzlich erschienen Artikel wird eine Zwischensprache, genannt ICurry, zur Übersetzung von Curry in imperative Sprachen wie C, Java, Python, Go, u.ä. vorgeschlagen. ICurry basiert auf einfachen Operationen zur Graphmanipulation. Hierzu existiert mit dem Paket icurry [1] auch ein einfacher Interpreter für ICurry, dessen Berechnungen mit Hilfe von graphviz visualisiert werden können. Die Visualisierung ist allerdings sehr einfach und nicht auf Termgraphen zugeschnitten, sodass diese nur für sehr kleine Berechnungen brauchbar ist. Aus diesem Grund soll in dieser Arbeit eine geeignete Visualisierung realisiert werden, mit der man auch größere Berechnungen in einem Web-Browser anzeigen lassen und zwischen verschiedenen Darstellungen (text/graphbasiert) wechseln kann.

Eignung: Bachelorarbeit

[1] https://www-ps.informatik.uni-kiel.de/~cpm/pkgs/icurry.html
[2] http://graphviz.org/

Curry mit Haskell Pattern Matching

Von: Michael Hanus

Ein wesentlicher Unterschied zwischen den Programmiersprachen Haskell und Curry ist die Pattern-Matching-Strategie. Während in Haskell die Pattern in einer Regel von links nach rechts getestet werden und nur die jeweils erste passende Regel verwendet wird, verwendet Curry eine optimale Strategie mit nichtdeterministischer Selektion aller passenden Regeln. Für rein funktionale Berechnungen sind Haskell-Definitionen manchmal kürzer als in Curry. Außerdem können Haskell-Programme auf Grund dieser Unterschiede nicht direkt als Curry-Programme ausgeführt werden. Daher soll in dieser Arbeit eine Quellsprachentransformation entwickelt werden, die z.B. in den Curry-Präprozessor [1] eingebaut oder auch als separates Tool bereitgestellt wird, mit dessen Hilfe man Curry-Programme mit der Semantik von Haskell ausführen kann. Hierzu können z.B. Funktionen, bei denen dieser Unterschied relevant ist, in case-Ausdrücke übersetzt werden. Eine andere Möglichkeit ist die Übersetzung mit Default-Regeln [2], wodurch es möglich wird, auch logisch-orientierte Berechnungen durchzuführen. Die Transformation soll daher über entsprechende Parameter steuerbar sein.

Eignung: Bachelorarbeit

[1] https://www-ps.informatik.uni-kiel.de/~cpm/pkgs/currypp.html
[2] http://doi.org/10.1017/S1471068416000168

Beweisführung in Coq über Eigenschaften von Algebraischen Effekten und Effekthandlern

Von: Niels

Beinhaltet:

Algebraische Effekte und Effekthandler sind ein Ansatz zur Modellierung von Seiteneffekten wie beispielsweise Nicht-Determinismus. Zu jedem Effekt gehören Gesetze, die bestimmen, wie sich die Operationen des Effekts verhalten sollen. Überlicherweise werden diese Gesetze in Sprachen wie Haskell für eine konkrete Implementierung nicht überprüft, was in dieser Arbeit anhand konkreter Effekte mittels des Beweisassistenten Coq [1] durchgeführt werden soll. Von besonderem Interesse sind die Kombination verschiedener Effekte und die für die Kombination geltenden Gesetze.

Eignung: Bachelorarbeit

[1] https://softwarefoundations.cis.upenn.edu/lf-current/toc.html

Verwendung einer Effekt-Bibliothek zur Implementierung einer DSL

Von: Niels

Beinhaltet:

Basierend auf einer aktueller Entwicklung einer Bibliothek zur Modellierung von algebraischen Effekten in Haskell soll eine bestehende Implementierung zur probabilistischen Programmierung in Curry [1] portiert werden. Algebraische Effekte [2] werden dabei als Alternative zur monadischen Implementierung verwendet. Probabilistische Programmierung kombiniert Nichtdeterminismus mit Wahrscheinlichkeiten.

Eignung: Bachelorarbeit

[1] https://github.com/finnteegen/pflp
[2] https://github.com/fused-effects/fused-effects

Implementierung eines einfachen 3D-Druck-Slicers mittels deklarativer Techniken

Von: Niels

Slicer wie PrusaSlicer [1] oder Cura [2] übersetzen ein 3D-Modell in Maschinenanweisungen, ähnlich einem Compiler, der ein Programm in Maschinenanweisungen übersetzt. In dieser Arbeit soll ein einfacher Slicer mittels deklarativer Techniken implementiert werden und daraufhin untersucht werden, ob sich gängige (Optimierungs-)Techniken aus dem Übersetzerbau auf die Erzeugung von Maschinenanweisungen für 3D-Drucker übertragen lassen.

Eignung: Bachelorarbeit/Masterarbeit

[1] https://github.com/prusa3d/PrusaSlicer [2] https://github.com/Ultimaker/Cura

Erweiterung von Curry um Multiparametertypklassen mit Functional Dependencies (Folgearbeit zur Arbeit von F. Teegen)

Von: Finn

Nachdem Curry kürzlich um Typ- und Typkonstruktorklassen erweitert wurde, soll in einem nächsten Schritt die Unterstützung für Multiparametertypklassen hinzugefügt werden. Um dabei möglicherweise auftretende Mehrdeutigkeiten aufzulösen, soll es weiterhin möglich sein, wie in Haskell funktionale Abhängigkeiten zwischen den Typklassenparametern spezifizieren zu können. Beides kann durch entsprechende Anpassungen im gemeinsamen Front-End von KiCS2 und PAKCS erreicht werden.

Beinhaltet:

Eignung: Masterarbeit

[1] https://www.informatik.uni-kiel.de/~mh/lehre/abschlussarbeiten/msc/Teegen.pdf
[2] http://web.cecs.pdx.edu/~mpj/pubs/fundeps-esop2000.pdf

Generierung und Testen von Gegenbeispielen mit SMT-Lösern

Von: Michael Hanus

SMT-Löser können verwendet werden, um bestimmte Programmeigenschaften automatisch zu beweisen. Dies wurde z.B. durchgeführt, um Verträge statisch zu prüfen oder automatisch zu beweisen, dass Programme fehlerfrei sind, d.h. nicht abstürzen. Hierzu werden bestimmte Eigenschaften aus Quellprogrammen extrahiert und in SMT-Skripte übersetzt. Falls diese Eigenschaften nicht bewiesen werden können, können SMT-Löser auch Gegenbeispiele liefern. In dieser Arbeit soll nun ein Werkzeug implementiert werden, das diese Gegenbeispiele rückübersetzt und dann durch Testen des Quellprogramms überprüft, ob die gelieferten Beispiele echte Gegenbeispiele sind, sodass die Programmiererin damit dann die zu beweisenden Programmeigenschaften verfeinern oder ändern kann.

Beinhaltet z.B.:

Eignung: Bachelor- oder Masterarbeit (je nach Umfang)

Refactoring-Tool für Curry

Von: Michael Hanus

Beinhaltet:

Eignung: Masterarbeit

Web-Baukasten für Curry

Von: Michael Hanus

Beinhaltet:

Eignung: Bachelorarbeit

Curry-Simplifier

Von: Michael Hanus

Idee: Entwicklung und Implementierung von semantik-erhaltenden Optimierungen für FlatCurry als Bibliothek und/oder Binärprogramm

Beinhaltet:

Eignung: Masterarbeit

Curr(y)gle 2.0

Von: Kai

Curr(y)gle ist eine Suchmaschine für Curry-Bibliotheken und deren Definitionen nach dem Vorbild von Hoogle [1], eine Suchmaschine aus der Haskell-Community.

Eignung: Bachelorarbeit

[1] https://www.haskell.org/hoogle/

Verbesserung der Arithmetik für KiCS2

Von: Michael Hanus

Beinhaltet:

Eignung: Masterarbeit

[1] http://doi.acm.org/10.1145/2505879.2505881

Visualisierung von Rewriting/Narrowing-Berechnungen

Von: Michael Hanus

Beinhaltet:

Eignung: Bachelorarbeit (oder mit weiteren Themen evtl. Masterarbeit)

[1] http://www.purescript.org/

Debugging mittels CooSy / BIO für KiCS2

Von: Michael Hanus

Beinhaltet:

Eignung: Masterarbeit

[1] http://www-ps.informatik.uni-kiel.de/currywiki/tools/oracle_debugger

Sprachprojekt mit Levels

Von: Michael Hanus

Beinhaltet:

Eignung: Masterarbeit

Übersetzung FD-Constraints nach SAT

Von: Michael Hanus

Beinhaltet:

Eignung: Masterarbeit

[1] https://www.informatik.uni-kiel.de/~mh/lehre/abschlussarbeiten/msc/hueser.pdf

Parallelisierung von KiCS2

Von: Michael Hanus

Beinhaltet:

Eignung: Masterarbeit

[1] http://www.informatik.uni-kiel.de/~mh/lehre/abschlussarbeiten/msc/holst.pdf

Pattern Matching Bibliothek für Curry

Von: Michael Hanus

Beinhaltet:

Eignung: Bachelorarbeit

[1] http://www.informatik.uni-kiel.de/~mh/lehre/abschlussarbeiten/bsc/Sikorra.pdf

Terminierungsanalyse für Curry

Von: Michael Hanus

Beinhaltet:

Eignung: Bachelorarbeit (oder mit Erweiterungen auch Masterarbeit)

[1] http://www2.tcs.ifi.lmu.de/~abel/foetus.pdf
[1] http://www.cs.mcgill.ca/~dthibo1/papers/termination.pdf

Übersetzung von Curry-Programmen nach Coq, Why3

Von: Michael Hanus

Beinhaltet:

Eignung: Bachelorarbeit/Masterarbeit


Weitere Abschlussarbeiten:

Abschlussarbeiten mit anderen Kooperationspartnern sind (auch auf eigene Initiative) möglich. Hierzu sollte man Michael Hanus kontaktieren.