Computational group theory
I design algorithms for permutation groups, including graph backtracking, canonical images and refiners. I develop the Vole and GraphBacktracking packages for GAP.
I'm a professor of computer science thinking about groups, constraints and puzzles. I spend lots of time writing programs to test ideas in all three, and I'm trying to get better at explaining what I find.
I work on three closely related problems: computing with groups, building constraint solvers, and understanding how people solve puzzles. See the full publications list for the details.
I design algorithms for permutation groups, including graph backtracking, canonical images and refiners. I develop the Vole and GraphBacktracking packages for GAP.
I build constraint solvers and modelling tools. I co-authored the Minion solver and the Essence language, and contribute to Conjure and Savile Row.
I generate puzzle levels, measure difficulty and study how people solve. You can play my puzzle games online, while Demystify explains forced moves step by step.
I supervise projects in all three areas. Email caj21@st-andrews.ac.uk with a few sentences about the problem that interests you, and mention that you found this page at heather.cafe. I get a lot of generic PhD emails; this tells me you've actually looked at my work.
| Posts | ||
| 13 Apr 2026 | How many pieces do you really need for a calendar puzzle? | Puzzles, Search, Constraint programming |
| 04 Apr 2026 | JSONLines — My Favourite Format | code, data formats |
| 30 Mar 2026 | Making the most annoying jigsaw puzzle | Puzzles, Search |
| 16 Mar 2026 | Too much Discussion of the XOR swap trick | Programming, Rambling |