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:
- Entwicklung einer API für Transformationen von FlatCurry-Programmen (Fragestellung: welche Arten von Transformationen sind ausreichend, welche Kontextinformation benötigen diese?)
- 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:
- Sichere Quellcodetransformationen
- Aufbauend auf Syntaxbäumen mit Positionsinformation und Pretty Printing
Eignung: Masterarbeit
Web-Baukasten für Curry
Von: Michael Hanus
Beinhaltet:
- Definition grundlegender Datenstrukturen: Request, Response, …
- Implementierung von Zugriffsfunktionen auf einzelne Teile, z.B. die Parameter im Query String oder im Request Body
- Entwicklung eines CGI-Servers
- Entwicklung eines FastCGI-Servers
- weitere Middleware wäre auch möglich
- Session Handling
- Routing/Dispatcher
- Anbindung von HtmlCGI/Spicey?
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:
- Umstellung der Int-Darstellung im Laufzeitsystem auf Haskell-Integer
- Unterstützung von Short_Int, semantisch: type Short_Int = Integer
- Compiler-Transformation: falls explizit Short_Int angegeben, nutze Int auf Haskell-Ebene
- generiere Code für unboxed values, um effiziente rein funktionale Berechnungen zu erzeugen (z.B. durch Ideen aus [1])
Eignung: Masterarbeit
[1] http://doi.acm.org/10.1145/2505879.2505881
Debugging mittels CooSy / BIO für KiCS2
Von: Michael Hanus
Beinhaltet:
- existierende BIO-Implementierung von KiCS [1] auf KiCS2 übertragen
- Neukonzeption der Sourcecode-Positions im Frontend
Eignung: Masterarbeit
[1] http://www-ps.informatik.uni-kiel.de/currywiki/tools/oracle_debugger
Übersetzung FD-Constraints nach SAT
Von: Michael Hanus
Beinhaltet:
- Erweiterung der Masterarbeit von Sven Hüser
- Integration verschiedener SAT-Solver (z.B. Lingeling, Z3) über die von Sven Hüser entwickelten Schnittstellen
- Übersetzung von FD-Constraints in das DIMACS-Format
Eignung: Masterarbeit
[1] https://www.informatik.uni-kiel.de/~mh/lehre/abschlussarbeiten/msc/hueser.pdf
Terminierungsanalyse für Curry
Von: Michael Hanus
Beinhaltet:
- Implementierung von Terminationsprüfern in Curry (mittels CASS)
- auch: Übersetzung nichtterminierender als partielle Funktionen mit Schrittzähler
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:
- analog zur existierenden Agda-Übersetzung
- Beweis nichtdeterministier Berechnungen
- Vergleich Agda/Coq
Eignung: Bachelorarbeit/Masterarbeit
Weitere Abschlussarbeiten:
Abschlussarbeiten mit anderen Kooperationspartnern sind (auch auf eigene Initiative) möglich. Hierzu sollte man Michael Hanus kontaktieren.