projects.html
changeset 43 a6c077ba850a
child 44 790a40046dc8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/projects.html	Thu Dec 01 23:36:19 2011 +0000
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HEAD>
+<TITLE>Christian Urban</TITLE>
+<BASE HREF="http://www.inf.kcl.ac.uk/staff/urbanc/">
+<script type="text/javascript" src="striper.js"></script>
+<link rel="stylesheet" href="nominal.css">
+</HEAD>
+<BODY TEXT="#000000" 
+      BGCOLOR="#4169E1" 
+      LINK="#0000EF" 
+      VLINK="#51188E" 
+      ALINK="#FF0000"
+      ONLOAD="striper('ul','striped','li','first,second')">
+
+
+
+<TABLE WIDTH="100%" 
+       BGCOLOR="#4169E1" 
+       BORDER="0"   
+       FRAME="border"  
+       CELLPADDING="10"     
+       CELLSPACING="2"
+       RULES="all">
+
+<TR>
+<TD BGCOLOR="#FFFFFF" 
+    WIDTH="75%" 
+    VALIGN="TOP">
+
+<H2>2011/12 MSc Individual Projects</H2>
+<H4>Supervisor: Christian Urban</H4> 
+<H4>Email: @kcl   Office: Strand Building S6.30</H4>
+
+<ul class="striped">
+<li> <H4>[CU1] Implementing a SAT-Solver in a Functional Programming Language</H4>
+
+  <p><B>Description:</b>  
+  SAT-solver search for satisfying assignments of boolean formulas. Although this 
+  is a computationally hard problem (<A HREF="http://en.wikipedia.org/wiki/NP-complete">NP-complete</A>), 
+  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.</p> 
+
+  <p>
+  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 
+  <A HREF="http://en.wikipedia.org/wiki/Standard_ML">ML</A>, but 
+  <A HREF="http://haskell.org/haskellwiki/Haskell">Haskell</A>, 
+  <A HREF="http://www.scala-lang.org/">Scala</A>,
+  <A HREF="http://caml.inria.fr/">OCaml</A>, ... are also OK). Starting point is 
+  the open source SAT-solver MiniSat (available <A HREF="http://minisat.se/Main.html">here</A>). 
+  The long-term hope is that your implementation becomes part of the interactive theorem prover 
+  <A HREF="http://www.cl.cam.ac.uk/research/hvg/isabelle/">Isabelle</A>.</p> 
+
+  <p>
+  <B>Tasks:</B> Understand MiniSat, design and code a SAT-solver in ML, 
+  empirical evaluation and tuning of your code.</p>
+
+  <p>
+  <B>Literature:</B> A good starting point for reading about SAT-solving is the handbook
+  article in <A HREF="http://www.cs.cornell.edu/gomes/papers/SATSolvers-KR-Handbook.pdf">here</A>.
+  MiniSat is explained <A HREF="http://minisat.se/downloads/MiniSat.pdf">here</A> and
+  <A HREF="http://minisat.se/Papers.html">here</A>. The standard reference for ML is
+  <A HREF="http://www.cl.cam.ac.uk/~lp15/MLbook/">here</A> (I can lend you my copy 
+  of this book for the duration of the project). The best free implementation of ML is 
+  <A HREF="http://www.polyml.org/">PolyML</A>.
+  </p>
+
+<li> <H4>[CU2] A Compiler for System F</H4>
+
+  <p><b>Description:</b> 
+  <A HREF="http://en.wikipedia.org/wiki/System_F">System F</A> 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 
+  <A HREF="http://haskell.org/haskellwiki/Haskell">Haskell</A>). The language is small
+  enough to implement in a reasonable amount of time a compiler to an
+  idealised assembly language (preferably 
+  <A HREF="http://en.wikipedia.org/wiki/Typed_assembly_language">TAL</A>) or an abstract machine.
+  This has been explained in full detail in a PhD-thesis by  Louis-Julien Guillemette
+  (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>
+  as his implementation language. Other choices are of course possible.
+  </p>
+
+  <p>
+  <b>Tasks:</b>
+  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 
+  <A HREF="http://en.wikipedia.org/wiki/Simply_typed_lambda_calculus">simply-typed 
+  lambda calculus</A> (which is simpler than
+  System F) or only some components of the compiler are implemented.
+  </p> 
+
+  <p>
+  <B>Literature:</B>
+  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
+  paper about this subject is available <A HREF="http://www.iro.umontreal.ca/~monnier/icfp08.pdf">here</A>.
+  A good starting point for TAL is <A HREF="http://www.cs.cornell.edu/talc/papers/tal-tr.pdf">here</A>.
+  There is a lot of literature about compilers 
+  (for example <A HREF="http://www.cs.princeton.edu/~appel/papers/cwc.html">this book</A> -
+  I can lend you my copy for the duration of the project).
+  </p>
+
+  <li> <H4>[CU3] Sorting Suffixes</H4>
+  
+  <p><b>Description:</b> Given a string, take all its suffixes, and sort them.
+  This is often also called <A HREF="http://en.wikipedia.org/wiki/Suffix_array">suffix 
+  array sorting</A>. 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.<p> 
+
+  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.
+
+<li> <H5>[CU 4] Simplification modulo Equivalences in Isabelle</H5>
+  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.
+
+<li><h5>[CU 5] Parsing with Derivatives</h5>
+
+  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.
+
+<li> <H5>[CU 6] Equivalence Checking of Regular Expression using Antimirov's Method<H5>
+
+</ul>
+</TD>
+</TR>
+</TABLE>
+
+<P><!-- Created: Tue Mar  4 00:23:25 GMT 1997 -->
+<!-- hhmts start -->
+Last modified: Thu Dec  1 18:10:37 GMT 2011
+<!-- hhmts end -->
+<a href="http://validator.w3.org/check/referer">[Validate this page.]</a>
+</BODY>
+</HTML>