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 einer Striktheits-Analyse für Curry (in Bearbeitung)

Von: Kai-Oliver Prott

Bei der Optimierung von funktionalen Haskell-Programmen ist es häufig nützlich zu wissen, ob bestimmte Argumente einer Funktion garantiert ausgewertet werden müssen. Auch in der funktional-logischen Programmiersprache Curry können solche Informationen bei der Optimierung eines Programms helfen. Einer der Anwendungsfälle wird gerade in einem verwandten Projekt ([1]) betrachtet.

In dieser Arbeit soll eine einfache Analyse von vereinfachtem FlatCurry Code implementiert werden. Dabei soll mit einer einfachen Implementierung begonnen werden, welche bei Bedarf beliebig um die Erzeugung detaillierterer Informationen erweitert werden kann. Die Implementierung soll sich dabei an der von Haskell ([2]) orientieren, darf aber weniger komplexe/gute Ergebnisse liefern.

Eignung: Bachelorarbeit

[1] Siehe unten “Optimierung von monadischem Code via Striktheits-Analyse” [2] https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/using-optimisation.html#ghc-flag--fstrictness

Universelle Instrumentierung von Zwischenprogrammen (potentiell wieder frei)

Von: Michael Hanus

In vielen Anwendungsszenarien möchte man Informationen über den Ablauf eines Programms erhalten, z.B. beim Tracen/Debuggen, Profiling, Kontexte fehlschlagender Berechnungen u.ä. Häufig werden für diese Aufgaben spezielle Erweiterungen im Laufzeitsystem einer Implementierung vorgenommen, die schwierig auf andere Implementierungen übertragen werden können. Aus diesem Grund soll in dieser Arbeit ein Konzept entwickelt werden, wie man auf Zwischenprogrammebene Transformationen programmieren kann, die dann mit verschiedenen Backends für diese Zwischensprache implementierbar sind.

Konkret soll hier die Quellsprache Curry und die Zwischensprache FlatCurry betrachtet werden, da hier schon viele Tools vorhanden sind. Für FlatCurry sind verschiedene Backends (z.B. in Prolog, Haskell, Go, Julia) vorhanden, sodass eine geeignete Testumgebung vorhanden ist. Weiterhin wurden schon für einige dieser Backends spezielle Instrumentierungswerkzeuge implementiert, welcher mit dem Konzept dieser Arbeit verallgemeinert und somit für mehrere Implementierungen angeboten werden können. Das genaue Konzept soll durch die Analyse der vorhandenen Tools entwickelt werden. Ein mögliches Vorgehen wäre:

  1. Entwicklung einer API für Transformationen von FlatCurry-Programmen (Fragestellung: welche Arten von Transformationen sind ausreichend, welche Kontextinformation benötigen diese?)
  2. Festlegung von Basis-APIs für das jeweilige Tool, die die transformierten Programme verwenden (z.B. Operationen zur Trace-Ausgabe, Sammeln von Profiling-Daten, etc)

Mit Hilfe dieses Konzepts sollen prototypisch die in einigen Curry-Systemen vorhandenen Werkzeuge, wie Tracer/Debugger, Anzeige fehlschlagender Berechnungen [1], strikte Debugger für lazy Berechnungen [2] [3], Profiling [4], umgesetzt werden, oder auch neue Werkzeuge zur Überdeckungsanalyse ausgetestet werden.

Eignung: Masterarbeit

[1] https://doi.org/10.1016/j.entcs.2007.01.002 [2] http://www-ps.informatik.uni-kiel.de/currywiki/tools/oracle_debugger [3] https://doi.org/10.1145/1291151.1291193 [4] https://doi.org/10.1007/11506676_12

Automatische Korrektur von SLD-Resolutionsaufgaben

Von: Kai Prott

In dem Modul “Deklarative Programmierung” ist ein wichtiges Thema die SLD-Resolution und die Erstellung entsprechender Resolutionsbäume. In dieser Arbeit soll eine Möglichkeit geschaffen werden, diese automatisiert zu korrigieren. Für die genaue Art der Aufgabenstellung und wie die Abgabe eines Baums erfolgen muss sollen in dieser Arbeit verschiedene Ansätze erarbeitet und evaluiert werden.

Eignung: Bachelorarbeit

Übersicht über Erweiterungen von Haskells Typsystem mit deren Eigenschaften

Von: Kai Prott

Der GHC ist die de-facto Standardimplementierung von Haskell und ist in den letzten Jahren immer um einige Features erweitert worden. Dabei sind einige dieser Erweiterungen für das Typsystem von Haskell gedacht. Während im Typsystem vom 2010er Haskell Standard immer* ein allgemeinster Typ inferiert werden kann, gilt dies mit einigen Erweiterungen jedoch nicht. Auch Andere Eigenschaften wie Entscheidbarkeit und Terminierung gehen bei manchen Spracherweiterungen verloren. In dieser Arbeit soll ein zusammenfassender Überblick über die Typsystem Erweiterungen in Haskell mit ihren Eigenschaften gegeben werden. Dabei sollen auch einige Beweise geführt werden, wobei viele dieser Eigenschaften an verschiedenen Stellen schon bewiesen wurden. Eine neue Eigenschaft zu beweisen ist für eine Bachelorarbeit nicht unbedingt erforderlich

Eignung: Bachelorarbeit/Masterarbeit

*: Außer bei polymorpher Rekursion.

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/

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

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

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.