Research

I once started doing a PhD degree at the School of Computer Science and Engineering, University of New South Wales.

My topic revolved around designing a refinement calculus for functional programming, with a view to software reuse. In more detail:

Refinement Calculus:
A programming language augmented with a specification construct and a set of correctness preserving rules for transforming specifications into programs. Historically, the rules have been very low-level, so refinement calculi have been difficult to use. Some refinement calculus background information is available.
Functional Programming:
Involves writing functions which map inputs to outputs, without involving state change: no assignment statements. The comp.lang.functional frequently asked questions contains much more detail. I am particularly interested in lazy functional programming languages, such as Haskell. Programs written in functional languages tend to be written at a higher level than their sequential counterparts. Hopefully a refinement calculus aimed at functional programming can also be used at a "higher level" than sequential counterparts. One reason for believing this is that it should be possible to exploit high level algebraic rules as part of refinement rules.
Software Reuse:
Various data types can be viewed as simple algebras. The algebraic structure is often inherent in the type, so many important reusable data structures can be designed correctly the first time!