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.


Test-Framework für Haskell-Abgaben auf der Basis von QuickCheck und Template Haskell

Von: Kai Prott

Im Wintersemester 2021/2022 wurden erstmalig automatisierte Tests für studentische Abgaben in dem Modul “Fortgeschrittene Programmierung” (neue PO: Deklarative Programmierung) eingeführt. Dabei basieren diese Tests auf QuickCheck. Ein Problem für die automatischen Tests ist es, wenn die Studierenden die Datentypen für ihre Funktionen selbst definieren sollen. Für diese Datentypen ist es nicht einfach, entsprechende valide Testfälle mit QuickCheck zu generieren. Dazu soll im Zuge dieser Arbeit via Reflection mit TemplateHaskell Metaprogrammierung ein Framework geschaffen werden, mit welchem dann auch Aufgaben mit Studierenden-Datentypen vernünftig getestet werden können. Dieses soll dann für unseren Aufgabenpool experimentell ausprobiert werden. Dabei sollen ebenfalls für eventuell auftretende andere Probleme auch Lösungen gefunden werden.

Experimentelle Evaluation eines GHC-Plugins für die Erstellung von DSLs

Von: Kai Prott

Kürzlich wurde auf Basis eines GHC-Plugins prototypisch ein Compiler für die funktional-logische Programmiersprache Curry erstellt. [1] Dieses Plugin wurde dann für andere monadisch modellierbare Sprachen verallgemeinert. Im Zuge dieser Arbeit soll eine “domain specific language” (DSL) mithilfe des Plugins entwickelt werden. Die Semantik der DSL ist noch nicht festgelegt und kann bei Bedarf abgesprochen werden. Interessant ist dabei auch, herauszufinden an welchen Stellen im Plugin eventuelle Änderungen gemacht werden müssen, um die Nutzbarkeit für andere DSLs zu verbessern.

Eignung: Bachelorarbeit/Masterarbeit

[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 (in Bearbeitung)

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

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 Functional Dependencies (Folgearbeit zur Arbeit von F. Teegen, L. Krüger)

Von: Finn

Nachdem Curry kürzlich um Typ- und Typkonstruktorklassen (inkl. Multiparametertypklassen in einer separaten Arbeit) erweitert wurde, sollen nun auch funktinale Abhängigkeiten zwischen den Typklassenparametern spezifiziert werden können. Dies kann durch entsprechende Anpassungen im gemeinsamen Front-End von KiCS2 und PAKCS erreicht werden. Dabei muss vor allem der Typcheck des Frontends überarbeitet 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

Refactoring-Tool für Curry

Von: Michael Hanus

Beinhaltet:

Eignung: Masterarbeit

Web-Baukasten für Curry

Von: Michael Hanus

Beinhaltet:

Eignung: Bachelorarbeit

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

Übersetzung FD-Constraints nach SAT

Von: Michael Hanus

Beinhaltet:

Eignung: Masterarbeit

[1] https://www.informatik.uni-kiel.de/~mh/lehre/abschlussarbeiten/msc/hueser.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 (in Bearbeitung)

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.