| author | Christian Urban <christian dot urban at kcl dot ac dot uk> | 
| Thu, 07 Apr 2016 23:14:26 +0100 | |
| changeset 424 | 1bb32ab3e90e | 
| parent 125 | d399003a53ca | 
| permissions | -rw-r--r-- | 
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
1  | 
<?xml version="1.0" encoding="utf-8"?>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
2  | 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
3  | 
<HEAD>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
4  | 
<TITLE>Christian Urban</TITLE>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
5  | 
<BASE HREF="http://www.inf.kcl.ac.uk/staff/urbanc/">  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
6  | 
<script type="text/javascript" src="striper.js"></script>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
7  | 
<link rel="stylesheet" href="nominal.css">  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
8  | 
</HEAD>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
9  | 
<BODY TEXT="#000000"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
10  | 
BGCOLOR="#4169E1"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
11  | 
LINK="#0000EF"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
12  | 
VLINK="#51188E"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
13  | 
ALINK="#FF0000"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
14  | 
      ONLOAD="striper('ul','striped','li','first,second')">
 | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
15  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
16  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
17  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
18  | 
<TABLE WIDTH="100%"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
19  | 
BGCOLOR="#4169E1"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
20  | 
BORDER="0"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
21  | 
FRAME="border"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
22  | 
CELLPADDING="10"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
23  | 
CELLSPACING="2"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
24  | 
RULES="all">  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
25  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
26  | 
<TR>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
27  | 
<TD BGCOLOR="#FFFFFF"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
28  | 
WIDTH="75%"  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
29  | 
VALIGN="TOP">  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
30  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
31  | 
<H2>2011/12 MSc Individual Projects</H2>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
32  | 
<H4>Supervisor: Christian Urban</H4>  | 
| 47 | 33  | 
<H4>Email: christian dot urban at kcl dot ac dot uk, Office: Strand Building S6.30</H4>  | 
34  | 
<H4>If you are interested in a project, please send me an email and we can discuss details. Please include  | 
|
| 50 | 35  | 
a short description about your programming skills and computer science background in your first email.  | 
36  | 
I will also need your King's username in order to book the project for you. Thanks.</H4>  | 
|
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
37  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
38  | 
<ul class="striped">  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
39  | 
<li> <H4>[CU1] Implementing a SAT-Solver in a Functional Programming Language</H4>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
40  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
41  | 
<p><B>Description:</b>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
42  | 
SAT-solver search for satisfying assignments of boolean formulas. Although this  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
43  | 
is a computationally hard problem (<A HREF="http://en.wikipedia.org/wiki/NP-complete">NP-complete</A>),  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
44  | 
modern SAT-solvers routinely solve boolean formulas with 100,000 and more variables.  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
45  | 
Application areas of SAT-solver are manifold: they range from hardware verification to  | 
| 120 | 46  | 
Sudoku solvers (see <a href="http://anytime.cs.umass.edu/aimath06/proceedings/P34.pdf">here</a>).  | 
| 119 | 47  | 
Every 2 years there is a competition of the best SAT-solvers in the world.</p>  | 
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
48  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
49  | 
<p>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
50  | 
Most SAT-solvers are written in C. The aim of this project is to design and implement  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
51  | 
a SAT-solver in a functional programming language (preferably  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
52  | 
<A HREF="http://en.wikipedia.org/wiki/Standard_ML">ML</A>, but  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
53  | 
<A HREF="http://haskell.org/haskellwiki/Haskell">Haskell</A>,  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
54  | 
<A HREF="http://www.scala-lang.org/">Scala</A>,  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
55  | 
<A HREF="http://caml.inria.fr/">OCaml</A>, ... are also OK). Starting point is  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
56  | 
the open source SAT-solver MiniSat (available <A HREF="http://minisat.se/Main.html">here</A>).  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
57  | 
The long-term hope is that your implementation becomes part of the interactive theorem prover  | 
| 44 | 58  | 
<A HREF="http://www.cl.cam.ac.uk/research/hvg/isabelle/">Isabelle</A>. For this  | 
59  | 
the SAT-solver needs to be implemented in ML.</p>  | 
|
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
60  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
61  | 
<p>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
62  | 
<B>Tasks:</B> Understand MiniSat, design and code a SAT-solver in ML,  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
63  | 
empirical evaluation and tuning of your code.</p>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
64  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
65  | 
<p>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
66  | 
<B>Literature:</B> A good starting point for reading about SAT-solving is the handbook  | 
| 44 | 67  | 
article <A HREF="http://www.cs.cornell.edu/gomes/papers/SATSolvers-KR-Handbook.pdf">here</A>.  | 
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
68  | 
MiniSat is explained <A HREF="http://minisat.se/downloads/MiniSat.pdf">here</A> and  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
69  | 
<A HREF="http://minisat.se/Papers.html">here</A>. The standard reference for ML is  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
70  | 
<A HREF="http://www.cl.cam.ac.uk/~lp15/MLbook/">here</A> (I can lend you my copy  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
71  | 
of this book for the duration of the project). The best free implementation of ML is  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
72  | 
<A HREF="http://www.polyml.org/">PolyML</A>.  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
73  | 
</p>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
74  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
75  | 
<li> <H4>[CU2] A Compiler for System F</H4>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
76  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
77  | 
<p><b>Description:</b>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
78  | 
<A HREF="http://en.wikipedia.org/wiki/System_F">System F</A> is a mini programming language,  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
79  | 
which is often used to study the theory behind programming languages, but is also used as  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
80  | 
a core-language of functional programming languages (for example  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
81  | 
<A HREF="http://haskell.org/haskellwiki/Haskell">Haskell</A>). The language is small  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
82  | 
enough to implement in a reasonable amount of time a compiler to an  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
83  | 
idealised assembly language (preferably  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
84  | 
<A HREF="http://en.wikipedia.org/wiki/Typed_assembly_language">TAL</A>) or an abstract machine.  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
85  | 
This has been explained in full detail in a PhD-thesis by Louis-Julien Guillemette  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
86  | 
(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>  | 
| 44 | 87  | 
as his implementation language. Other choices are possible.  | 
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
88  | 
</p>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
89  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
90  | 
<p>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
91  | 
<b>Tasks:</b>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
92  | 
Read the relevant literature and implement the various components of a compiler  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
93  | 
(parser, intermediate languages, simulator for the idealised assembly language).  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
94  | 
This project is for a good student with an interest in programming languages,  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
95  | 
who can also translate abstract ideas into code. If it is too difficult, the project can  | 
| 44 | 96  | 
be easily scaled down to the  | 
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
97  | 
<A HREF="http://en.wikipedia.org/wiki/Simply_typed_lambda_calculus">simply-typed  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
98  | 
lambda calculus</A> (which is simpler than  | 
| 44 | 99  | 
System F) or to cover only some components of the compiler.  | 
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
100  | 
</p>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
101  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
102  | 
<p>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
103  | 
<B>Literature:</B>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
104  | 
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  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
105  | 
paper about this subject is available <A HREF="http://www.iro.umontreal.ca/~monnier/icfp08.pdf">here</A>.  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
106  | 
A good starting point for TAL is <A HREF="http://www.cs.cornell.edu/talc/papers/tal-tr.pdf">here</A>.  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
107  | 
There is a lot of literature about compilers  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
108  | 
(for example <A HREF="http://www.cs.princeton.edu/~appel/papers/cwc.html">this book</A> -  | 
| 55 | 109  | 
I can lend you my copy for the duration of the project). A very good overview article  | 
110  | 
about implementing compilers by  | 
|
111  | 
<A HREF="http://tratt.net/laurie/">Laurie Tratt</A> is  | 
|
112  | 
<A HREF="http://tratt.net/laurie/tech_articles/articles/how_difficult_is_it_to_write_a_compiler">here</A>.  | 
|
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
113  | 
</p>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
114  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
115  | 
<li> <H4>[CU3] Sorting Suffixes</H4>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
116  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
117  | 
<p><b>Description:</b> Given a string, take all its suffixes, and sort them.  | 
| 44 | 118  | 
This is often called <A HREF="http://en.wikipedia.org/wiki/Suffix_array">suffix  | 
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
119  | 
array sorting</A>. It sound simple, but there are some difficulties.  | 
| 44 | 120  | 
The naive algorithm would generate all suffix strings and sort them  | 
121  | 
using a standard sorting algorithm, for example  | 
|
122  | 
<A HREF="http://en.wikipedia.org/wiki/Quicksort">quicksort</A>.  | 
|
123  | 
The problem is that  | 
|
124  | 
this algorithm is not optimal for suffix sorting: it does not take into account that you sort  | 
|
125  | 
suffixes and it also takes a quadratic amount of space. This is a  | 
|
126  | 
huge problem if you have to sort strings of several Megabytes or even Gigabytes,  | 
|
127  | 
as happens often in biotech and DNA data mining. Suffix sorting is also a crucial operation for the  | 
|
| 51 | 128  | 
<A HREF="http://en.wikipedia.org/wiki/Burrows-Wheeler_transform">Burrows-Wheeler transform</A>  | 
| 44 | 129  | 
on which the data compression algorithm of the popular  | 
130  | 
<A HREF="http://en.wikipedia.org/wiki/Bzip2">bzip2</A>  | 
|
131  | 
program is based.  | 
|
132  | 
</p>  | 
|
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
133  | 
|
| 44 | 134  | 
<p>  | 
135  | 
There are more efficient algorithms for suffix sorting, for example  | 
|
136  | 
<A HREF="http://books.google.co.uk/books?id=Pn1sHToYf9oC&printsec=frontcover&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false">here</A> and  | 
|
137  | 
<A HREF="http://ls11-www.cs.uni-dortmund.de/people/rahmann/teaching/ss2008/AlgorithmenAufSequenzen/09-walk-bwt.pdf">here</A>.  | 
|
138  | 
However the most space efficient algorithm for suffix sorting  | 
|
139  | 
(<A HREF="http://www.cs.rutgers.edu/~muthu/fm072.pdf">here</A>)  | 
|
140  | 
is horrendously complicated. Your task would be to understand it, and then implement it.  | 
|
141  | 
</p>  | 
|
142  | 
||
143  | 
<p>  | 
|
144  | 
<B>Tasks:</B>  | 
|
145  | 
Start by reading the literature about suffix sorting. Then work through the  | 
|
146  | 
12-page <A HREF="http://www.cs.rutgers.edu/~muthu/fm072.pdf">paper</A>  | 
|
147  | 
explaining the horrendously complicated algorithm and implement it.  | 
|
148  | 
Time permitting the work can include an implementation of the Burrows-Wheeler  | 
|
149  | 
data compression. This project is for a good student, who likes to study in-depth  | 
|
150  | 
algorithms. The project can be carried out in almost all programming languages,  | 
|
151  | 
including C, Java, Scala, ML, Haskell and so on.  | 
|
152  | 
</p>  | 
|
153  | 
||
154  | 
<p>  | 
|
155  | 
<B>Literature:</B> A good starting point for reading about suffix sorting is the  | 
|
| 71 | 156  | 
<A HREF="http://books.google.co.uk/books?id=Pn1sHToYf9oC&printsec=frontcover&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false">book</A> by Crochemore.  | 
157  | 
Another good introduction is  | 
|
158  | 
<A HREF="http://people.unipmn.it/manzini/papers/esa02.pdf">here</A>,  | 
|
159  | 
which gives also good pointers for why efficient suffix sorting  | 
|
160  | 
is practically relevant.  | 
|
161  | 
Two simple algorithms are described  | 
|
| 44 | 162  | 
<A HREF="http://ls11-www.cs.uni-dortmund.de/people/rahmann/teaching/ss2008/AlgorithmenAufSequenzen/09-walk-bwt.pdf">here</A>. The main literature is the 12-page  | 
163  | 
<A HREF="http://www.cs.rutgers.edu/~muthu/fm072.pdf">article</A> about in-place  | 
|
164  | 
suffix sorting. The Burrows-Wheeler data compression is described  | 
|
165  | 
<A HREF="http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-124.pdf">here</A>.  | 
|
166  | 
</p>  | 
|
167  | 
||
168  | 
<li> <H4>[CU4] Simplification with Equivalence Relations in the Isabelle Theorem Prover</H4>  | 
|
169  | 
<p>  | 
|
170  | 
<B>Description:</B>  | 
|
171  | 
In this project you have to extend the simplifier of the  | 
|
172  | 
<A HREF="http://isabelle.in.tum.de/">Isabelle theorem prover</A>.  | 
|
173  | 
The simplifier is an important reasoning tool of this theorem prover: it  | 
|
174  | 
replaces a term by another term that can be proved to be equal to it. However,  | 
|
175  | 
currently the simplifier only rewrites terms according to equalities.  | 
|
176  | 
Assuming ≈ is an equivalence relation, the simplifier should also be able  | 
|
177  | 
to rewrite terms according to ≈. Since equivalence relations occur  | 
|
178  | 
frequently in automated reasoning, this extension would make the simplifier  | 
|
179  | 
more powerful and useful. The hope is that your code can go into the  | 
|
180  | 
code base of Isabelle.  | 
|
181  | 
</p>  | 
|
182  | 
||
183  | 
<p>  | 
|
184  | 
<B>Tasks:</B>  | 
|
185  | 
Read the <A HREF="http://www.springerlink.com/content/x7041m1807738832/">paper</A>  | 
|
186  | 
about rewriting with equivalence relations. Get familiar with parts of the  | 
|
187  | 
implementation of Isabelle (I will be of much help as I can). Implement  | 
|
188  | 
the extension. This project is suitable for a student with a bit of math background.  | 
|
189  | 
It requires knowledge of the functional programming language ML, which  | 
|
190  | 
however can be learned quickly provided you have already written code  | 
|
191  | 
in another functional programming language.  | 
|
192  | 
</p>  | 
|
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
193  | 
|
| 44 | 194  | 
<p>  | 
195  | 
<B>Literature:</B> A good starting point for reading about rewriting modulo equivalences  | 
|
196  | 
is the paper <A HREF="http://www.springerlink.com/content/x7041m1807738832/">here</A>,  | 
|
197  | 
which uses the ACL2 theorem prover. The implementation of the Isabelle theorem  | 
|
198  | 
prover is described in much detail in this  | 
|
199  | 
<A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/Cookbook/">programming tutorial</A>.  | 
|
200  | 
The standard reference for ML is  | 
|
201  | 
<A HREF="http://www.cl.cam.ac.uk/~lp15/MLbook/">here</A> (I can lend you my copy  | 
|
202  | 
of this book for the duration of the project).  | 
|
203  | 
</p>  | 
|
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
204  | 
|
| 44 | 205  | 
|
206  | 
<li><h4>[CU5] Lexing and Parsing with Derivatives</h4>  | 
|
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
207  | 
|
| 44 | 208  | 
<p>  | 
209  | 
<B>Description:</B>  | 
|
210  | 
Lexing and parsing are usually done using automated tools, like  | 
|
211  | 
<A HREF="http://en.wikipedia.org/wiki/Lex_programming_tool">lex</A> and  | 
|
212  | 
<A HREF="http://en.wikipedia.org/wiki/Yacc">yacc</A>. The problem  | 
|
| 47 | 213  | 
with them is that they "work when they work", but if they do not, then they are  | 
| 44 | 214  | 
<A HREF="http://en.wikipedia.org/wiki/Black_box">black boxes</A>  | 
215  | 
which are difficult to debug and change. They are really quite  | 
|
| 47 | 216  | 
clumsy to the point that Might and Darais wrote a paper titled  | 
| 44 | 217  | 
"<A HREF="http://arxiv.org/pdf/1010.5023v1">Yacc is dead</A>".</p>  | 
218  | 
||
219  | 
<p>  | 
|
| 47 | 220  | 
There is a simple algorithm for regular expression matching (that is lexing).  | 
| 44 | 221  | 
This algorithm was introduced by  | 
222  | 
<A HREF="http://en.wikipedia.org/wiki/Janusz_Brzozowski_(computer_scientist)">Brzozowski</A>  | 
|
223  | 
in 1964. It is based on the notion of derivatives of regular expressions and  | 
|
224  | 
has proved <A HREF="http://www.cl.cam.ac.uk/~so294/documents/jfp09.pdf">useful</A>  | 
|
225  | 
for practical lexing. Last year the notion of derivatives was extended by  | 
|
226  | 
<A HREF="http://matt.might.net/papers/might2011derivatives.pdf">Might et al</A>  | 
|
227  | 
to <A HREF="http://en.wikipedia.org/wiki/Context-free_grammar">context free grammars</A>  | 
|
228  | 
and parsing.  | 
|
229  | 
</p>  | 
|
230  | 
||
231  | 
<p>  | 
|
232  | 
<B>Tasks:</B> Get familiar with the two algorithms and implement them. Regular  | 
|
233  | 
expression matching is relatively simple; parsing with derivatives is the  | 
|
234  | 
harder part. Therefore you should empirically evaluate this part and  | 
|
235  | 
tune your implementation. The project can be carried out in almost all programming  | 
|
236  | 
languages, including C, Java, Scala, ML, Haskell and so on.  | 
|
237  | 
</p>  | 
|
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
238  | 
|
| 44 | 239  | 
<p>  | 
240  | 
<B>Literature:</B> This  | 
|
241  | 
<A HREF="http://www.cl.cam.ac.uk/~so294/documents/jfp09.pdf">paper</A>  | 
|
242  | 
gives a modern introduction to derivative based lexing. Derivative-based  | 
|
243  | 
parsing is explained <A HREF="http://arxiv.org/pdf/1010.5023v1">here</A>  | 
|
244  | 
and <A HREF="http://matt.might.net/papers/might2011derivatives.pdf">here</A>.  | 
|
| 125 | 245  | 
A proposal for derivative PEG-parsing is  | 
246  | 
<A HREF="http://fmota.eu/2011/01/07/PEG-derivatives.html">here</a>. The mailing  | 
|
247  | 
list about PEGs is <A HREF="https://lists.csail.mit.edu/pipermail/peg/">here</A>.  | 
|
| 44 | 248  | 
</p>  | 
249  | 
||
250  | 
<li> <H4>[CU6] Equivalence Checking of Regular Expressions using the Method by Antimirov and Mosses</H4>  | 
|
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
251  | 
|
| 44 | 252  | 
<p>  | 
253  | 
<B>Description:</B>  | 
|
254  | 
Solving the problem of deciding equivalence of regular expressions can be used  | 
|
255  | 
to decide a number of problems in automated reasoning. Therefore one likes to  | 
|
| 47 | 256  | 
have a method for equivalence checking that is as fast as possible. There have  | 
257  | 
been a number of algorithms proposed in the past, but one based on a method  | 
|
258  | 
by Antimirov and Mosses seems relatively simple and easy to implement.  | 
|
| 44 | 259  | 
</p>  | 
260  | 
||
261  | 
<p>  | 
|
262  | 
<B>Tasks:</B>  | 
|
263  | 
The task is to implement the algorithm by Antimirov and Mosses and compare it to  | 
|
264  | 
other methods. Hopefully the algorithm can be tuned to be faster than other  | 
|
| 47 | 265  | 
methods. The project can be carried out in almost all programming languages, but  | 
266  | 
as usual functional programming languages such Scala, ML, Haskell have an edge  | 
|
267  | 
for this kind of problems.  | 
|
| 44 | 268  | 
</p>  | 
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
269  | 
|
| 44 | 270  | 
<p>  | 
271  | 
<B>Literature:</B>  | 
|
| 54 | 272  | 
Central to this project are the papers <A HREF="http://www.dcc.fc.up.pt/~nam/publica/ijcs08.pdf">here</A>  | 
273  | 
and <A HREF="http://www.dcc.fc.up.pt/~nam/publica/51480046.pdf">here</A>.  | 
|
| 44 | 274  | 
Other methods have been described, for example,  | 
275  | 
<A HREF="http://www4.informatik.tu-muenchen.de/~krauss/papers/rexp.pdf">here</A>.  | 
|
| 47 | 276  | 
A relatively complicated method, based on automata, is described  | 
277  | 
<A HREF="http://sardes.inrialpes.fr/~braibant/atbr/">here</A>.  | 
|
| 44 | 278  | 
</p>  | 
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
279  | 
|
| 58 | 280  | 
<li> <H4>[CU7] Game-Playing Engine for Five-In-A-Row on a Large Board</H4>  | 
| 
57
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
281  | 
|
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
282  | 
<p>  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
283  | 
<B>Literature:</b>  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
284  | 
There is a web-page with various pointers to computer players  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
285  | 
<A HREF="http://webdocs.cs.ualberta.ca/~games/">here</A>. There are  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
286  | 
also some good books about computer players, for example:  | 
| 121 | 287  | 
<table cellspacing="10">  | 
| 122 | 288  | 
<tr><td><i>Artificial Intelligence: A Modern Approach</i> by S. Russel and P. Norvig, Prentice Hall, 2003  | 
289  | 
(a standard textbook about search strategies).  | 
|
| 120 | 290  | 
</td></tr>  | 
| 122 | 291  | 
<tr><td><i>Principles of Artificial Intelligence</i> by N. J. Nilsson, Springer Verlag, 1980  | 
292  | 
(a standard textbook about search strategies).  | 
|
| 120 | 293  | 
</td></tr>  | 
294  | 
||
| 122 | 295  | 
<tr><td><i>Computer Game-Playing: Theory and Practice</i> by M. Bramer, Ellis Horwood Ltd, 1983  | 
296  | 
(considers techniques used for programming a variety of games: Chess, Go, Scrabble, Billiards,  | 
|
297  | 
Othello, etc; includes theoretical issues about game searching).  | 
|
| 
57
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
298  | 
</td></tr>  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
299  | 
<tr><td><i>Chips Challenging Champions: Games, Computers and Artificial Intelligence</i> by  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
300  | 
J. Schaeffer and H.J. van den Herik, North Holland, 2002.  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
301  | 
</td></tr>  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
302  | 
<tr><td>  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
303  | 
<i>Artificial Intelligence for Games</i> by I. Millington and J. Funge, Morgan Kaufmann, 2009.  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
304  | 
</td></tr>  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
305  | 
<tr><td>  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
306  | 
<i>Computer Gamesmanship: The Complete Guide to Creating and Structuring Intelligent Games Programs</i>  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
307  | 
by D.N.L. Levy, Simon and Schuster, 1983.  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
308  | 
</td></tr>  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
309  | 
</table>  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
310  | 
</p>  | 
| 
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
311  | 
|
| 77 | 312  | 
<li><h4>[CU8] Webserver for a Revision Control System</h4>  | 
313  | 
||
| 78 | 314  | 
<p>  | 
315  | 
Modern revision control systems are  | 
|
316  | 
<A HREF="http://mercurial.selenic.com/">mercurial</A> and  | 
|
317  | 
<A HREF="http://git-scm.com/">git</A>.  | 
|
318  | 
</p>  | 
|
| 77 | 319  | 
|
| 78 | 320  | 
<p>  | 
321  | 
<b>Task:</b> Build a webserver for a revision control system  | 
|
322  | 
that allows user management.  | 
|
323  | 
</p>  | 
|
| 
57
 
62e8e9ac4114
added pointers to gameplayers
 
Christian Urban <urbanc@in.tum.de> 
parents: 
55 
diff
changeset
 | 
324  | 
|
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
325  | 
</ul>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
326  | 
</TD>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
327  | 
</TR>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
328  | 
</TABLE>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
329  | 
|
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
330  | 
<P><!-- Created: Tue Mar 4 00:23:25 GMT 1997 -->  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
331  | 
<!-- hhmts start -->  | 
| 71 | 332  | 
Last modified: Wed Jan 11 16:30:03 GMT 2012  | 
| 
43
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
333  | 
<!-- hhmts end -->  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
334  | 
<a href="http://validator.w3.org/check/referer">[Validate this page.]</a>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
335  | 
</BODY>  | 
| 
 
a6c077ba850a
added initial version of projects
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
336  | 
</HTML>  |