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.


CurryDoc 2.0

Von: Finn

Curry besitzt -- wie viele andere Sprachen auch -- ein Werkzeug, um automatisch HTML-Dokumentationen aus Quellprogrammen zu generieren. Momentan werden hierfür eine auf javadoc basierende Syntax sowie Informationen aus FlatCurry-Interfaces verwendet. Weiterhin fehlt aktuell die Unterstützung für die kürzlich zu Curry hinzugefügten Typklassen. Im Rahmen dieser Arbeit soll daher eine neue Version geschaffen werden, die statt der FlatCurry-Interfaces die vom Front-End generierten Curry-Interfaces nutzt und es darüber hinaus erlaubt, Typklassen zu dokumentieren. Gleichzeitig soll die gegenwärtige Dokumentationssyntax auf den aus Haskell bekannten Stil umgestellt werden.

Beinhaltet:

Eignung: Bachelorarbeit

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

WiF 2.0: Anwesenheitsmonitoringsystem

Von: Marcellus, Finn

Das WiF-System gibt Auskunft darüber, wo sich ein Mitarbeiter derzeit befindet. Ein Monitor in der siebten Etage des CAP4 zeigt den Status der Mitarbeiter der Arbeitsgruppe Programmiersprachen und Übersetzerkonstruktion an.

Leider wird das System nicht aktiv verwendet, weil der Aufwand des Eintragens zu groß ist. Einige Mitarbeiter setzen daher ihren Status mit Magneten direkt an ihrer Tür. Eine Verknüpfung dieser analogen Eingabe und der digitalen Anzeige (analog zum WiF-System) soll konzipiert und realisiert werden.

Beinhaltet:

Hinweis:

Eignung:

CurryStore: Ein Paketarchivierungssystem für Curry

Von: Michael

Der Curry Package Manager CPM ist ein Werkzeug zur Verwaltung von Curry-Paketen, die durch Benutzer einfach heruntergeladen und verwendet werden können. Momentan sind im zentralen Paketindex von CPM schon viele Pakete über git repositories eingestellt. In dieser Arbeit soll das Einstellen neuer Pakete durch beliebige Benutzer mittels eines Web-basiertes Werkzeugs unterstützt werden. Es soll also eine allgemeine Infrastruktur zur Speicherung von Paketen, Suche in vorhandenen Paketen u.ä., analog zu anderen Paketarchiven wie z.B. Hackage, geschaffen werden. Dazu gehört auch eine Benutzerverwaltung und Indizierung von Paketen.

Beinhaltet:

Eignung: Masterarbeit

Spicey 2.0: Ein neues Web-Framework für Curry

Von: Michael

Das bisherige Web-Framework Spicey basiert auf der Idee, automatisch aus einem Entity-Relationship-Modell eine Web-Anwendung zu generieren, mit dem man alle Entitäten und Relationen manipulieren kann. Mit diesem Web-Framework wurden verschiedene Web-Anwendungen erzeugt, wie z.B. die Moduldatenbank. Durch das neue Haskell-artige Typkonzept von Curry mit Typklassen kann der generierte Code vereinfacht und besser strukturiert werden. Dies soll in dieser Masterarbeit konzipiert und realisiert werden.

Beinhaltet:

Eignung: Masterarbeit

Erweiterter Style Checker für Curry (Folgearbeit zur Arbeit von K. Rahf)

Von: Michael

Beinhaltet:

Eignung: Bachelorarbeit

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

Code-Verbesserer für Curry (Folgearbeit zur Arbeit von K. Rahf)

Von: Björn

Beinhaltet:

Eignung: Bachelor- oder Masterarbeit (je nach Umfang)

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

Refactoring-Tool für Curry

Von: Michael

Beinhaltet:

Eignung: Masterarbeit

Web-Baukasten für Curry

Von: Björn

Beinhaltet:

Eignung: Bachelorarbeit

Evaluation der Code-Erzeugung im KiCS2

Von: Sandra

Das KiCS2 [1] kompiliert nach Haskell und erzeugt daher aus der FlatCurry-Darstellung Haskell-Code und übersetzt diesen erzeugten Code anschließend mit dem GHC [2]. Der GHC kann wiederum viele Optimierungen vornehmen. Aufgrund des Nichtdeterminismus der in Curry Bestandteil der Sprache ist, werden Curry-Datentypen und -Funktionen nicht 1-zu-1 in entsprechende Haskell-Konstrukte ersetzt. In dieser Arbeit soll evaluiert werden, welche Art von Curry-Programmen vom GHC optimiert werden können bzw. ob der generierte Code so "unnatürlich" ist, dass keine Optimierung zum Tragen kommt.

Beinhaltet: - Aufbau einer Testumgebung (was für Datentypen und Funktionen sollen getestet werden?) - Recherche bzgl. der möglichen Optimierungen im GHC - Einarbeitung in Curry um grobes Verständnis des Übersetzungsschemas zu bekommen - tatsächliche Evaluation (Wie viele Tests sollte es geben? Wie viele Optimierungen werden getestet? Wie können die Ergebnisse interpretiert werden? Wie können die Ergebnisse am besten dargestellt/visualisiert werden?) - optional: Ideen zur Verbesserung der Code-Erzeugung, um mehr Optimierungen im GHC zu erreichen

Eignung: Bachelorarbeit (bei tatsächlicher "Lösung" des evaluierten Problems auch als Masterarbeit)

Curry-Simplifier

Von: Björn

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: Sandra

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

Beinhaltet:

Eignung: Bachelorarbeit

[1] https://hackage.haskell.org/package/hoogle [2] http://www.purescript.org [3] http://elm-lang.org [4] https://www.haskell.org/hoogle/

Verbesserung der Arithmetik für KiCS2

von: Michael

Beinhaltet:

Eignung: Masterarbeit

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

Visualisierung von Rewriting/Narrowing-Berechnungen

von: Michael

Beinhaltet:

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

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

Debugging mittels CooSy / BIO für KiCS2

von: Michael

Beinhaltet:

Eignung: Masterarbeit

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

Sprachprojekt mit Levels

von: Michael

Beinhaltet:

Eignung: Masterarbeit

Übersetzung FD-Constraints nach SAT

von: Jan

Beinhaltet:

Eignung: Masterarbeit

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

Parallelisierung von KiCS2

von: Michael

Beinhaltet:

Eignung: Masterarbeit

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

Bibliothek zur probabilistischen funktional logischen Programmierung

von: Sandra

Probabilistische Programme eignen sich gut, um Wahrscheinlichkeitsmodelle (vgl. Bayes Netzwerke [2]) zu definieren. Dabei sollen Probablistische Programmiersprachen oder DSLs die Kluft zwischen Experten, die Modelle entwickeln, und Anwedern, die Modelle tatsächlich verwenden wollen, mindern. Logisch-funktionale Programmiersprache teilen sich auf Grund des Nichtdeterminums einige Problemstellungen und Designentscheidungen mit probabilistischen Programmiersprachen. In dieser Arbeit soll die Ähnlichkeit dazu genutzt werden, um eine leichtgewichtige Bibliothek in der funktional logischen Programmiersprache Curry nach dem Vorbild in Haskell [1] zu entwickeln und mit Beispielen aus der Literatur zu testen.

Beinhaltet: - Einarbeitung in Curry und das logisch funktionale Programmierparadigma - Implementierung einer Bibliothek zur probabilistischen funktional (logischen) Programmierung (s. Erwig et al [1]) - Implementierung von Beispielanwendungen aus der Literatur

Eignung: Bachelorarbeit

[1] https://web.engr.oregonstate.edu/~erwig/papers/PFP_JFP06.pdf [2] https://de.wikipedia.org/wiki/Bayessches_Netz

Probabilistische funktional logische Programmierung

von: Sandra

Probabilistische Programme eignen sich gut, um Wahrscheinlichkeitsmodelle (vgl. Bayes Netzwerke [2]) zu definieren. Dabei sollen Probablistische Programmiersprachen oder DSLs die Kluft zwischen Experten, die Modelle entwickeln, und Anwedern, die Modelle tatsächlich verwenden wollen, mindern. Logisch-funktionale Programmiersprache teilen sich auf Grund des Nichtdeterminums einige Problemstellungen und Designentscheidungen mit probabilistischen Programmiersprachen. In dieser Arbeit sollen die Ähnlichkeit dazu genutzt werden, um zuerst eine leichtgewichtige Bibliothek zu implementieren, die dann durch eine Erweiterung der aktuellen Repräsentation des Nichtdeterminismus in der logisch-funktionalen Programmiersprache Curry optimiert werden. Weiter kann untersucht werden, inwiefern diese Erweiterung auch für andere Anwendungen genutzt werden kann. Beinhaltet:

Eignung: Masterarbeit

[1] https://web.engr.oregonstate.edu/~erwig/papers/PFP_JFP06.pdf [2] https://de.wikipedia.org/wiki/Bayessches_Netz

Terminierungsanalyse für Curry

von: Michael

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

Beinhaltet:

Eignung: Bachelorarbeit/Masterarbeit


Weitere Abschlussarbeiten:

Abschlussarbeiten mit anderen Kooperationspartnern sind (auch auf eigene Initiative) möglich. Hierzu sollte man Michael Hanus kontaktieren. Hier folgen einige noch existierende Vorschläge:

Abschlussarbeiten in Zusammenarbeit mit clinical registry

Die folgenden Abschlussarbeiten könnten z.T. in Zusammenarbeit mit clinical registry erfolgen (eine genauere Beschreibung ist hier zu finden):

Funktional-logische Modelltransformationen

In dieser Abschlussarbeit sollen funktional-logische Abstraktionen für die Realisierung von Modelltransformationen erarbeitet werden. Dazu ist eine entsprechende Bibliothek in der funktional-logischen Programmiersprache Curry zu entwickeln und deren Nutzbarkeit durch die Realisierung geeigneter Beispieltransformationen nachzuweisen.

Eine genauere Beschreibung ist hier zu finden.