Computational group theory
Algorithms for permutation groups — graph backtracking, canonical images, 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 for all these things, and I'm trying to get better at writing about them.
My work spans three areas that keep eavesdropping on each other. See the full publications list for the details.
Algorithms for permutation groups — graph backtracking, canonical images, refiners. I develop the Vole and GraphBacktracking packages for GAP.
Solver design, propagation, automated modelling. Co-author of the Minion solver and the Essence specification language.
Puzzle generation, difficulty measurement, understanding how humans solve. Demystify explains puzzle solutions step by step.
I welcome applications in any of the areas above. Email caj21@st-andrews.ac.uk and mention you found this page at heather.cafe — I get a lot of generic PhD emails, and this helps me know 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 |