|         |      1 <?xml version="1.0" encoding="utf-8"?> | 
|         |      2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | 
|         |      3 <HEAD> | 
|         |      4 <TITLE>Christian Urban</TITLE> | 
|         |      5 <BASE HREF="http://www.inf.kcl.ac.uk/staff/urbanc/"> | 
|         |      6 <script type="text/javascript" src="striper.js"></script> | 
|         |      7 <link rel="stylesheet" href="nominal.css"> | 
|         |      8 </HEAD> | 
|         |      9 <BODY TEXT="#000000"  | 
|         |     10       BGCOLOR="#4169E1"  | 
|         |     11       LINK="#0000EF"  | 
|         |     12       VLINK="#51188E"  | 
|         |     13       ALINK="#FF0000" | 
|         |     14       ONLOAD="striper('ul','striped','li','first,second')"> | 
|         |     15  | 
|         |     16  | 
|         |     17  | 
|         |     18 <TABLE WIDTH="100%"  | 
|         |     19        BGCOLOR="#4169E1"  | 
|         |     20        BORDER="0"    | 
|         |     21        FRAME="border"   | 
|         |     22        CELLPADDING="10"      | 
|         |     23        CELLSPACING="2" | 
|         |     24        RULES="all"> | 
|         |     25  | 
|         |     26 <TR> | 
|         |     27 <TD BGCOLOR="#FFFFFF"  | 
|         |     28     WIDTH="75%"  | 
|         |     29     VALIGN="TOP"> | 
|         |     30  | 
|         |     31 <H2>2011/12 MSc Individual Projects</H2> | 
|         |     32 <H4>Supervisor: Christian Urban</H4>  | 
|         |     33 <H4>Email: @kcl   Office: Strand Building S6.30</H4> | 
|         |     34  | 
|         |     35 <ul class="striped"> | 
|         |     36 <li> <H4>[CU1] Implementing a SAT-Solver in a Functional Programming Language</H4> | 
|         |     37  | 
|         |     38   <p><B>Description:</b>   | 
|         |     39   SAT-solver search for satisfying assignments of boolean formulas. Although this  | 
|         |     40   is a computationally hard problem (<A HREF="http://en.wikipedia.org/wiki/NP-complete">NP-complete</A>),  | 
|         |     41   modern SAT-solvers routinely solve boolean formulas with 100,000 and more variables.  | 
|         |     42   Application areas of SAT-solver are manifold: they range from hardware verification to  | 
|         |     43   Sudoku solvers. Every 2 years there is a competition of the best SAT-solvers in the world.</p>  | 
|         |     44  | 
|         |     45   <p> | 
|         |     46   Most SAT-solvers are written in C. The aim of this project is to design and implement  | 
|         |     47   a SAT-solver in a functional programming language (preferably  | 
|         |     48   <A HREF="http://en.wikipedia.org/wiki/Standard_ML">ML</A>, but  | 
|         |     49   <A HREF="http://haskell.org/haskellwiki/Haskell">Haskell</A>,  | 
|         |     50   <A HREF="http://www.scala-lang.org/">Scala</A>, | 
|         |     51   <A HREF="http://caml.inria.fr/">OCaml</A>, ... are also OK). Starting point is  | 
|         |     52   the open source SAT-solver MiniSat (available <A HREF="http://minisat.se/Main.html">here</A>).  | 
|         |     53   The long-term hope is that your implementation becomes part of the interactive theorem prover  | 
|         |     54   <A HREF="http://www.cl.cam.ac.uk/research/hvg/isabelle/">Isabelle</A>.</p>  | 
|         |     55  | 
|         |     56   <p> | 
|         |     57   <B>Tasks:</B> Understand MiniSat, design and code a SAT-solver in ML,  | 
|         |     58   empirical evaluation and tuning of your code.</p> | 
|         |     59  | 
|         |     60   <p> | 
|         |     61   <B>Literature:</B> A good starting point for reading about SAT-solving is the handbook | 
|         |     62   article in <A HREF="http://www.cs.cornell.edu/gomes/papers/SATSolvers-KR-Handbook.pdf">here</A>. | 
|         |     63   MiniSat is explained <A HREF="http://minisat.se/downloads/MiniSat.pdf">here</A> and | 
|         |     64   <A HREF="http://minisat.se/Papers.html">here</A>. The standard reference for ML is | 
|         |     65   <A HREF="http://www.cl.cam.ac.uk/~lp15/MLbook/">here</A> (I can lend you my copy  | 
|         |     66   of this book for the duration of the project). The best free implementation of ML is  | 
|         |     67   <A HREF="http://www.polyml.org/">PolyML</A>. | 
|         |     68   </p> | 
|         |     69  | 
|         |     70 <li> <H4>[CU2] A Compiler for System F</H4> | 
|         |     71  | 
|         |     72   <p><b>Description:</b>  | 
|         |     73   <A HREF="http://en.wikipedia.org/wiki/System_F">System F</A> is a mini programming language,  | 
|         |     74   which is often used to study the theory behind programming languages, but is also used as  | 
|         |     75   a core-language of functional programming languages (for example  | 
|         |     76   <A HREF="http://haskell.org/haskellwiki/Haskell">Haskell</A>). The language is small | 
|         |     77   enough to implement in a reasonable amount of time a compiler to an | 
|         |     78   idealised assembly language (preferably  | 
|         |     79   <A HREF="http://en.wikipedia.org/wiki/Typed_assembly_language">TAL</A>) or an abstract machine. | 
|         |     80   This has been explained in full detail in a PhD-thesis by  Louis-Julien Guillemette | 
|         |     81   (available in English <A HREF="https://papyrus.bib.umontreal.ca/jspui/bitstream/1866/3454/6/Guillemette_Louis-Julien_2009_these.pdf">here</A>). He used <A HREF="http://haskell.org/haskellwiki/Haskell">Haskell</A> | 
|         |     82   as his implementation language. Other choices are of course possible. | 
|         |     83   </p> | 
|         |     84  | 
|         |     85   <p> | 
|         |     86   <b>Tasks:</b> | 
|         |     87   Read the relevant literature and implement the various components of a compiler | 
|         |     88   (parser, intermediate languages, simulator for the idealised assembly language). | 
|         |     89   This project is for a good student with an interest in programming languages, | 
|         |     90   who can also translate abstract ideas into code. If it is too difficult, the project can | 
|         |     91   easily be scaled back to the  | 
|         |     92   <A HREF="http://en.wikipedia.org/wiki/Simply_typed_lambda_calculus">simply-typed  | 
|         |     93   lambda calculus</A> (which is simpler than | 
|         |     94   System F) or only some components of the compiler are implemented. | 
|         |     95   </p>  | 
|         |     96  | 
|         |     97   <p> | 
|         |     98   <B>Literature:</B> | 
|         |     99   The <A HREF="https://papyrus.bib.umontreal.ca/jspui/bitstream/1866/3454/6/Guillemette_Louis-Julien_2009_these.pdf">PhD-thesis</A> by  Louis-Julien Guillemette is required reading. A shorter | 
|         |    100   paper about this subject is available <A HREF="http://www.iro.umontreal.ca/~monnier/icfp08.pdf">here</A>. | 
|         |    101   A good starting point for TAL is <A HREF="http://www.cs.cornell.edu/talc/papers/tal-tr.pdf">here</A>. | 
|         |    102   There is a lot of literature about compilers  | 
|         |    103   (for example <A HREF="http://www.cs.princeton.edu/~appel/papers/cwc.html">this book</A> - | 
|         |    104   I can lend you my copy for the duration of the project). | 
|         |    105   </p> | 
|         |    106  | 
|         |    107   <li> <H4>[CU3] Sorting Suffixes</H4> | 
|         |    108    | 
|         |    109   <p><b>Description:</b> Given a string, take all its suffixes, and sort them. | 
|         |    110   This is often also called <A HREF="http://en.wikipedia.org/wiki/Suffix_array">suffix  | 
|         |    111   array sorting</A>. It sound simple, but there are some difficulties.  | 
|         |    112   The naive algorithm would generate all (suffix) strings and sort them | 
|         |    113   using a standard sorting algorithm, for example quick-sort. Unfortunately, | 
|         |    114   this algorithm is not optimal (it does not take into account that you sort | 
|         |    115   suffixes) and it also takes an quadratic amount of space, which is a  | 
|         |    116   problem if you have to sort strings of several Mega-Bytes or even Giga-Bytes  | 
|         |    117   (happens often in biotech DNA information.<p>  | 
|         |    118  | 
|         |    119   Aim: the notion of index on a text is central in many methods for text | 
|         |    120   processing and for the management of textual databases. Suffix Arrays is one | 
|         |    121   of these methods based on the sorted list of suffixes of the input text. The | 
|         |    122   project consists in implementing a linear-time sorting algorithm and other | 
|         |    123   elements related to Suffix Array construction and to Burrows-Wheeler text | 
|         |    124   compression. Plan: study of the sorting problem in the literature starting | 
|         |    125   with the reference below. Implementation of the sorting algorithm and the | 
|         |    126   LCP computation to obtain a Suffix Array construction software. Then, using | 
|         |    127   this work, implementation of the algorithms described in the second | 
|         |    128   reference below. Deliverables: report, suffix sorting and associated | 
|         |    129   software and their documentation. | 
|         |    130  | 
|         |    131   References:  | 
|         |    132   J. Kärkkäinen and P. Sanders,  Simple linear work suffix array construction, in ICALP'03, LNCS 2719, Spinger, 2003, pp. 943--955.  | 
|         |    133   M. Crochemore, J. Désarménien and D. Perrin,  A note on the Burrows-Wheeler transformation, Theoret. Comput. Sci., 2005, to appear. | 
|         |    134  | 
|         |    135   There is a horrendously complicated algorithm for solving these problems.  | 
|         |    136   Your task would be to understand it, and then implement it. | 
|         |    137  | 
|         |    138 <li> <H5>[CU 4] Simplification modulo Equivalences in Isabelle</H5> | 
|         |    139   In this project you have to extend the simplifier of the Isabelle theorem  | 
|         |    140   prover.  Currently, the simplifier only rewrites terms according to equalities  | 
|         |    141   l = r. Provided ~ is an equivalence relation, the simplifier should also  | 
|         |    142   be able to rewrite terms according to equivalences of the form l ~ r. | 
|         |    143   This project requires knowledge of the functional programming language ML. | 
|         |    144  | 
|         |    145 <li><h5>[CU 5] Parsing with Derivatives</h5> | 
|         |    146  | 
|         |    147   Derivatives can be used to implement a regular expression matcher. In  | 
|         |    148   this project you have to apply this technique to parsing. The starting  | 
|         |    149   point for this project is the paper "Yacc is Dead" by Matthew Might. | 
|         |    150  | 
|         |    151 <li> <H5>[CU 6] Equivalence Checking of Regular Expression using Antimirov's Method<H5> | 
|         |    152  | 
|         |    153 </ul> | 
|         |    154 </TD> | 
|         |    155 </TR> | 
|         |    156 </TABLE> | 
|         |    157  | 
|         |    158 <P><!-- Created: Tue Mar  4 00:23:25 GMT 1997 --> | 
|         |    159 <!-- hhmts start --> | 
|         |    160 Last modified: Thu Dec  1 18:10:37 GMT 2011 | 
|         |    161 <!-- hhmts end --> | 
|         |    162 <a href="http://validator.w3.org/check/referer">[Validate this page.]</a> | 
|         |    163 </BODY> | 
|         |    164 </HTML> |