projects.html
changeset 43 a6c077ba850a
child 44 790a40046dc8
equal deleted inserted replaced
42:5fe9c359135f 43:a6c077ba850a
       
     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>