I moved to University of Massachusetts, Lowell in Fall 2021 to join the Computer Science Department as an Assistant Professor.
I'm currently looking for motivated students to work with! If you're interested, send me a message.
Previously, I was a Postdoctoral Research Associate at the University of Oregon's Department of Computer and Information Science.
My general research interests are in the study of programming languages, including their theory, semantics, design, and implementation, with a focus on the foundations of computation and its relation to logic and duality.
In particular, I am interested in using logic to help verify that software systems and their compilation is efficient, correct, safe, and secure.
I'm also interested in aspects of practical languages including computational effects (like mutable state, exceptions, and first-class continuations) and ways for languages to sensibly bridge between high-level abstractions and low-level implementation details.
I have worked on an alternative model for computation based on the connection between programming languages and formal logic (known as the Curry-Howard correspondence or proofs-as-programs interpretation).
With a single stroke in 1935, Gentzen laid out the basis for the modern study of formalized logic: natural deduction and the sequent calculus. On the one hand, natural deduction is the logic of the lambda calculus, which serves as the bedrock for functional programming languages (like Scheme, Haskell, and OCaml) and proof assistants (like Coq).
On the other hand, the sequent calculus has only recently been connected with a lower-level model for programs that highlights the dualities present in programming languages and details such as evaluation strategies (like strict or lazy evaluation) and control-flow effects (like exceptions).
I am developing this model of computation to get another view of programs and languages from different angles:
A high-level calculus for reasoning about the behavior of programs (in a similar style as the lambda calculus) while also accounting for low-level details such as evaluation strategy and control flow.
A contextual representation of programs that allows for performing context-sensitive analysis and transformation of programs, as done by optimizing compilers like the Glasgow Haskell Compiler (GHC).
A dualized framework that gives a symmetric and unified view of programming concepts, as a way to understand differences and similarities in language design, including types and abstraction mechanisms from both functional and object-oriented languages.
Some of these ideas have been (or are currently being) implemented inside GHC for analyzing and optimizing Haskell programs.