Academic
I am a PhD candidate at Universiteit Leiden, under the supervision of Tobias Kappé and Marcello Bonsangue. My research is focused on algebra and coalgebra as tools for studying automaton theory and logic.
Publications
- Partial Reductions for Kleene Algebra with Linear Hypotheses (arxiv) to appear in FoSSaCS 2026
- Dilations and degeneracy in network controllability [Scientific Reports, 2021]
Talks
Further Background
- Master of Logic @ University of Amsterdam, 2022-2024: thesis supervised by Tobias Kappé and Yde Venema
- Bachelor's in maths/CS @ McGill University, 2017-2021: paper supervised Derek Ruths and Justin Ruths
Research Interests
My research interests can be summed up: using mathematical structures in the study of computer programs. In practice that means category theory, logic, and (co)algebra are my tools, and various flavours of automata are my object of study.
"For the Non-Mathematician"
This section is inspired by my friend Ralph Sarkis, who has a similar section on his website.
Coalgebra
Coalgebra is funny because it's like field of math that came about by way of "top hats imply the existence of bottom hats". Algebra is well known, and we basically asked, what is the "opposite" or "dual" of it?
More to come here.
Programming Language Semantics
"Semantics" is a fancy word to mean "what we consider true". For logic people it means something very specific: if I've got some logical system, the point of which is usually to prove things, then I need a way to talk about truth: what is true and what is false? This is where semantics comes in.
For programmers, it's often of great interest to figure out if two programs behave in the same way. For example, I have this program, and it works, and then I move a few things around, change a line here or there, all just to clean it up, hoping that it still works the same way. But are the old program and the new one actually the same? And what does it mean for them to be "actually the same"?
You might say, two programs are the same if for the same inputs they give the same outputs. But what if, for some input, one of the programs crashes, and the other gives a nonsensical output? What if they produce the same output, but one takes way longer than the other, or in general the ways they got to their output are vastly different? All of this to say, there's not one easy answer.
So in a sense "programming language semantics" means asking, "what does it mean for two programs to be the same?" In a sense this is also wrong, because like I just illustrated, there isn't one easy answer. So maybe a better version would be that we're asking "what are the different ways for two programs to be equivalent? When might I want to use one instead of the other?"
More to come here.