My goal is to understand the underlying logic and structure behind programming languages, and to use this understanding to make it easier to write correct software. To do so, I use and create techniques and tools from mathematical logic, type theory, and category theory. My research interests include:
- data types in type theory: how can we give semantics of different classes of data types? Is one class more powerful than another? I have developed initial algebra semantics to answer such questions for inductive-inductive definitions, and quotient inductive types from homotopy type theory.
- correct-by-construction programming: how can we get machines to help humans write the correct program? I create programming languages that make it possible to specify the meaning of programs in their type. This creates new challenges, such as extending the equational theory of programs while retaining decidable type checking, strong normalisation, and canonicity.
- constructive mathematics and logic: how can we prove theorems and develop mathematical theories that are suitable for implementation in a computer? I am interested both in mathematical developments themselves, such as the theory of a constructive treatments of ordinals, as well as metamathematical investigations into categorical model theory and nonderivability results.
- applied category theory: how can we describe and build large systems from smaller components? I am working to make this possible in the fields of economic game theory, and for business process languages, by using ideas and techniques from monoidal category theory.
See also my personal web page.