+
+
+2011/12 MSc Individual Projects
+Supervisor: Christian Urban
+Email: @kcl Office: Strand Building S6.30
+
+
+-
[CU1] Implementing a SAT-Solver in a Functional Programming Language
+
+ Description:
+ SAT-solver search for satisfying assignments of boolean formulas. Although this
+ is a computationally hard problem (NP-complete),
+ modern SAT-solvers routinely solve boolean formulas with 100,000 and more variables.
+ Application areas of SAT-solver are manifold: they range from hardware verification to
+ Sudoku solvers. Every 2 years there is a competition of the best SAT-solvers in the world.
+
+
+ Most SAT-solvers are written in C. The aim of this project is to design and implement
+ a SAT-solver in a functional programming language (preferably
+ ML, but
+ Haskell,
+ Scala,
+ OCaml, ... are also OK). Starting point is
+ the open source SAT-solver MiniSat (available here).
+ The long-term hope is that your implementation becomes part of the interactive theorem prover
+ Isabelle.
+
+
+ Tasks: Understand MiniSat, design and code a SAT-solver in ML,
+ empirical evaluation and tuning of your code.
+
+
+ Literature: A good starting point for reading about SAT-solving is the handbook
+ article in here.
+ MiniSat is explained here and
+ here. The standard reference for ML is
+ here (I can lend you my copy
+ of this book for the duration of the project). The best free implementation of ML is
+ PolyML.
+
+
+ -
[CU2] A Compiler for System F
+
+ Description:
+ System F is a mini programming language,
+ which is often used to study the theory behind programming languages, but is also used as
+ a core-language of functional programming languages (for example
+ Haskell). The language is small
+ enough to implement in a reasonable amount of time a compiler to an
+ idealised assembly language (preferably
+ TAL) or an abstract machine.
+ This has been explained in full detail in a PhD-thesis by Louis-Julien Guillemette
+ (available in English here). He used Haskell
+ as his implementation language. Other choices are of course possible.
+
+
+
+ Tasks:
+ Read the relevant literature and implement the various components of a compiler
+ (parser, intermediate languages, simulator for the idealised assembly language).
+ This project is for a good student with an interest in programming languages,
+ who can also translate abstract ideas into code. If it is too difficult, the project can
+ easily be scaled back to the
+ simply-typed
+ lambda calculus (which is simpler than
+ System F) or only some components of the compiler are implemented.
+
+
+
+ Literature:
+ The PhD-thesis by Louis-Julien Guillemette is required reading. A shorter
+ paper about this subject is available here.
+ A good starting point for TAL is here.
+ There is a lot of literature about compilers
+ (for example this book -
+ I can lend you my copy for the duration of the project).
+
+
+ -
[CU3] Sorting Suffixes
+
+ Description: Given a string, take all its suffixes, and sort them.
+ This is often also called suffix
+ array sorting. It sound simple, but there are some difficulties.
+ The naive algorithm would generate all (suffix) strings and sort them
+ using a standard sorting algorithm, for example quick-sort. Unfortunately,
+ this algorithm is not optimal (it does not take into account that you sort
+ suffixes) and it also takes an quadratic amount of space, which is a
+ problem if you have to sort strings of several Mega-Bytes or even Giga-Bytes
+ (happens often in biotech DNA information.
+
+ Aim: the notion of index on a text is central in many methods for text
+ processing and for the management of textual databases. Suffix Arrays is one
+ of these methods based on the sorted list of suffixes of the input text. The
+ project consists in implementing a linear-time sorting algorithm and other
+ elements related to Suffix Array construction and to Burrows-Wheeler text
+ compression. Plan: study of the sorting problem in the literature starting
+ with the reference below. Implementation of the sorting algorithm and the
+ LCP computation to obtain a Suffix Array construction software. Then, using
+ this work, implementation of the algorithms described in the second
+ reference below. Deliverables: report, suffix sorting and associated
+ software and their documentation.
+
+ References:
+ J. Kärkkäinen and P. Sanders, Simple linear work suffix array construction, in ICALP'03, LNCS 2719, Spinger, 2003, pp. 943--955.
+ M. Crochemore, J. Désarménien and D. Perrin, A note on the Burrows-Wheeler transformation, Theoret. Comput. Sci., 2005, to appear.
+
+ There is a horrendously complicated algorithm for solving these problems.
+ Your task would be to understand it, and then implement it.
+
+ -
[CU 4] Simplification modulo Equivalences in Isabelle
+ In this project you have to extend the simplifier of the Isabelle theorem
+ prover. Currently, the simplifier only rewrites terms according to equalities
+ l = r. Provided ~ is an equivalence relation, the simplifier should also
+ be able to rewrite terms according to equivalences of the form l ~ r.
+ This project requires knowledge of the functional programming language ML.
+
+ [CU 5] Parsing with Derivatives
+
+ Derivatives can be used to implement a regular expression matcher. In
+ this project you have to apply this technique to parsing. The starting
+ point for this project is the paper "Yacc is Dead" by Matthew Might.
+
+-
[CU 6] Equivalence Checking of Regular Expression using Antimirov's Method
+
+
+ |
+
+