Type Slowly
Dissertation ideas
I’ve started thinking about what I might do for my Dissertation / Project, come April. It’s early days yet, but the areas in which I’m most interested (functional languages, formal proofs, information retrieval, language design) are probably the ones that I have to do the most work on over this year (my Mathematics is rapidly improving, but is still not quite there), So I think it’d be worth finding a project early, so that I can make sure I’m prepared for it, if I’m going to do something in one of these areas. Plus, I’ve got to find a supervisor with similar interests, so having some idea about what I might want to do already will definitely help with that. So, here are some of the options I’ve come up with so far:
- Modelling Probability Distributions in Haskell - briefly, a probability is a monad that wraps whatever represents your outcome, and a lot of useful combinators emerge from this fairly naturally, most notably, Bayes Theorem. Sadly, this is definitely not novel, and I’m struggling to think of an interesting slant to put on it.
- Improving live television subtitling with bayesian inference and / or support vector machines - Live subtitling uses a text to speech system that doesn’t seem to be aware of context when picking words to match to a given bit of audio, leading to some odd errors. I was thinking that there could be an interesting application of some IR techniques to this - by inferring the topic of a piece of speech from the words already recognised, the text-to-speech algorithm could refine its guesses as it goes along. My main problem with this one is that it’s a very specific problem (and not one in which I have any particular interest, beyond it seeming like a neat use of some interesting technology), and I’d wanted to do something a little more general.
- A DSL to write declarative tests for code that use static analysis and techniques from formal verification - It’d allow you to set preconditions, postconditions and invariants for a given method call, then analyse the code and notify the programmer of success or failure, ideally making formal methods as accessible as unit tests as an indicator of program correctness. I’d originally planned to do this for Ruby, but that seems like a nightmare, what with it’s lack of type-checking, and crazy dynamic-dispatch metaprogramming stuff (which I have no problem with in other contexts), it’s going to be fairly tricky to do. Perhaps a subset of Ruby, would work, although I think Scala would lend itself particularly well to this.
I’ve got another idea involving IR, DSLs, parallelization, and Haskell, but it’s not really anything beyond a vague suspicion that there’s an interesting project lurking in the intersection of those four areas somewhere, so I’ll leave that out of the running for the moment. In any case, I’d be really interested in any feedback on any of these, or about any other interesting ideas that people have!