§ Stuff I learnt in 2024



§ Resolution, UNSAT proof calculi, Bibtlasting


Much of this stuff was learnt in many discussions with my friend, Henrik Böving . I had a lot of fun studying the theory of SAT solving and their UNSAT proofs.

§ UNSAT proofs



§ Interpolation and Model Checking


I found he idea of interpolation based model checking to be extremely cool.

§ Writing a SAT solver


I've been implementing a SAT solver over at bollu/casette by following the MiniSAT paper , and it's been super educational.
In general, it turns that implementing the core of a CDCL based, incremenetal SAT solver doesn't need too much! It needs some careful data structure engineering for doing efficient trail management and unit propagation, but other than that, the rest is quite straightforward.
I wasn't able to find a correctness proof for the calculation of the first UIP in the MiniSAT paper, so I wound up writing the prof down. The key insight is that given a DAG with a source vertex, the dominator of the sink vertex can be found by visiting nodes in reverse BFS order. The key invariant is that when visiting nodes in reverse BFS order, a node pp (parent) is visited only after all of its children are.

§ Other Decision Procedures


When interning at AWS, I got to talk to lots of fantastic folks, including Shilpi Goel , Jim Grundy , Leonardo De Moura , Kim Morisson , Nathan Wetzler , John Harrison and many others, who gave me lots of pointers to really interesting ideas many of which I'm yet to read. I list them down here:

A good reference for at least some of these appear to be the course Little Engines of Proof .
There are many more decision procedures I want to learn, mostly coming from algebraic number theory, algebraic geometry, and 3-manifold theory. Many of these are not critical to my day-to-day for the next year, but I consider it important that I know them, and so I list them out here.
A good reference for some of the algebraic and number theoretic ones is Computational Algebraic number Theory by Henri Cohen. The SnapPy project for 3-manifold algorithms has lots of super interesting algorithms for deciding facts about 3-manifolds. Since knots can be identified with their knot-complement, and apparently, the knot complement can be given a 3-manifold structure, it also provides decision procedures for knot. I realized that I need to know a lot of 3-manifold theory, so a current medium-to-long-term wishlist maths is to study Thurston's geometry and topology of 3-manifolds . To be extremeley honest, if it is possible, I am tempted to spend a semester at the Indian Institute of Science reading through the book with Siddhartha Gadgil's supervision, if he's interested to let me take this on.

§ Cambridge Vibes: Lectures and Reports



§ Projects for Master Students at Cambridge



§ Optics and Photography


My friend, Anton Lydike has been encouraging me to pick up photography, so I wound up doing that this year. I first began by learning about shutter speed and exposure, by reading the books:

However, it wasn't clear to me that I actually understood what was going on, so I wound up writing a raytracing simulation for classic geometric optics to understand these phenomena, over at bollu/optics . It was a really good exercise to both refresh my memory of raymarching, but also to setup scenes where I could understand what e.g. focal length and aperture did to the final image, as a function of incoming light waves. I'd highly recommend such an exercise to get a felt sense. The simulation was written in C++, with raylib as the GUI library. Raylib's a blast to work with, and was super enjoyable to write code in! However, I think I like egui better, cause it's just much more fun to write Rust, and it's API is so much more ergonomic. Regardless, Link to the simluation video .
Next, to learn how to actually edit photographs, I've been reading the darktable user manual , which has lots of good information about the algorithms used for image processing. I enjoy their random asides, such as the whole tirade about [scene referred versus display referred workflows ]. TL;DR: Display referred assumes that light intensity can be normalized between [0,1][0, 1] before starting processing. On the other hand, Scene referred only normalizes at the end, and thus light intensity live in [0,)[0, \infty). I don't understand at all why the normalization is incorrect, so if someone wants to educate me, please do leave a comment below. Even so, I enjoy the sheer opinionatedness of it all.
Anyway, I plug my DeviantArt here, so give a follow if you like!

§ Music and Composition


Unexpectedly, in the middle of a year, a friend ( Luisa Cicolini ) mysteriously got me back to playing the piano through no fault of hers. This led me to read quite a lot of compositional theory, music history, and counterpoint.

Toward this time, I also got interested in explanations of Jazz (a)tonality, so I went and asked Alan Blackwell , who is a Professor of Interdisciplinary Design about where I could study such a theory. He pointed me to work by Dmitri Tymoczko, called The Geometry of Musical Chords , where one uses orbifolds to represent the tonnetz . This also led me into reading more about atonal music composition, and in particular, the twelve tone theory by Schoenberg . While I'm not a huge fan of the music, I can at the very least, understand what it's trying to do now!

§ Monodrone


In a fit of insanity, I decided that I wanted to precisely understand how a tracker such as MilkyTracker worked, so I decided to write one myself. However, I hate debugging off-by-one-errors, and so, I decided to formally verify the whole thing in Lean instead. This lead to bollu/monodrone , where the core tracker data structure was written in pure lean4 , with a rust ffi , and a cargo build script to smash Rust and Lean together, and a egui-based UI for rendering. This was quite fun, and I managed to snipe a friend, Sébastien Michelland to write an alternative Coq formalization that he felt was more elegant.
Moreover, I wound up extending it with a chord recognition algorithm , since I was trying to think about chord inversions and extensions in the process of getting back to piano. This was a wild ride, because it seems that the state of the art is to make gigantic tables ala Music21, which is based on Neo Riemannian / Tonnetz based chord naming conventions, or to use atonal music theory See Alan forte: The structure of atonal music . I disliked both ideas, and instead just wrote something that brute forces all possibilities and ranks the outcomes based on a vibes-guided heuristic. It works well enough that I'm happy with it!
The funny thing was, while I did this purely for recreation, having thought about deciding the overlapping of 1D contiguous segments of notes turned out to be exactly what AWS wanted me to do, except one replaced "notes" with "memory regions"! This just got me even more convinced that no screwing around with code is ever wasted.

§ Shakespeare


I've always wanted to enjoy Shakespeare's works, and school sadly failed to impart any enjoyment of this to me. This year, I got two opportunities to learn more about Shakespeare. Firstly, there was Shakespeare in the summer , which is a Cambridge event where lots of shakespeare plays are put up by theater troupes. My friend, John Mark Poole, took me to a bunch of these, and kindly explained to me both the historical context, as well as gave me a sense of how I ought to watch, compare, and contrast the different interpretations of the same play. I had a lot of fun with this, and I can definitely say that I enjoy shakespeare now! Secondly, I watched the Shakespeare lectures by Marjorie Garber with my ex-partner-and-still-amazing-friend Sahiti , which was a blast, since they're way better at this language stuff than I am. I personally found watching different interpretations of Macbeth to be super interesting, since Macbeth can be played as either tragic or as malevolent, and this totally changes the tenor and arc of the entire story.
Overall, I'm really happy that I learnt how to enjoy Shakespeare this year, and I'm looking forward to continue to engage with more of the canon next year.

§ Poetry


I spent a bunch of time this year trying to find poetry that I actually liked, or to give up on the aesthetic project known as liking poetry. I started from what I knew I actually liked, such as Shelley and Tennyson, and then attempted to speedrun the next couple centuries of poetry history. To do this, I would up watching lectures and performing background reading on literary critism. In particular, the lecture series Introduction to the theory of literature by Paul H Fry was instrumental in this. The lecture series covers the evolution of literature, poetry, and critiques of these by their respective communities. This actually gave me lenses to understand why I should even bother caring about Auden, for example. Paradoxically, this and surrounding reading made me dislike modernists even more --- A single useful article was What is New formalism by Marjorie Levinson, which lays out the new formalism manifesto, which made me realize why I dislike most of the formalist 20th century poetry in the first place! Anyway, I wound up collecting a bunch of poetry I do in fact like:

Ajar by A. E. Stallings
The washing-machine door broke. We hand-washed for a week.
Left in the tub to soak, the angers began to reek,
And sometimes when we spoke, you said we shouldn't speak.

Pandora was a bride; the gods gave her a jar
But said don't look inside. You know how stories are—
The can of worms denied? It's never been so far.

Whatever the gods forbid, it's sure someone will do,
And so Pandora did, and made the worst come true.
She peeked under the lid, and out all trouble flew:

Sickness, war, and pain, nerves frayed like fretted rope,
Every mortal bane with which Mankind must cope.
The only thing to remain, lodged in the mouth, was Hope.

Or so the tale asserts— and who am I to deny it?
Yes, out like black-winged birds the woes flew and ran riot,
But I say that the woes were words, and the only thing left was quiet.


The theif left it behind—
the moon
At the window

Today’s begging is finished; at the crossroads
I wander by the side of Hachiman Shrine
Talking with some children.
Last year, a foolish monk;
This year, no change!

Twilight, --- the only conversation
on this hill
Is the wind blowing through the pines


To the Grapefruit by Vladmir Nabokov
Resplendent fruit, so weightly and so glossy,
exactly like a full-blown moon you shine;
hermetic vessel of unsweet ambrosia
and aromatic coolness of white wine.

The lemon is the pride of Syracuse,
Mignon yields to the orange's delights,
but you alone are fit to quench the Muse
when,thirsty, she has come down from her heights.

I memorized "To the grapefruit" as a personal challenge to myself, and that was a really fun exercise! I'm glad that it's now with me, forever. It feels similar to learning proofs, to be honest, and I seem to bring it out and turn it in my mind as often as I do a pretty proof. I'm considering memorizing "Lilith" next, and I'm open to suggestions for somewhat-short, rhyming poems that are very, very clever.
Next year, I want to continue my quest of reading more "epic poetry". I read the divine comedy and Beowulf last year, and found it to be a lot of fun. This year, I have some more listed out, from different cultures. I don't know if I'll be able to find translations, but that's half the fun! Tain bo Cuailnge , aka the irish illiad, Beowulf: A new verse translation by R.M. Liuzza , Kavevala, which is finnish epic poetry , and Nibelungenlied, an epic poem in High German .

§ Other Reading



§ Plans for Next Year



§ What does the year feel like?


Overall, it was a really fulfilling year. I found out what I really want to do for my PhD, for real for real this time: Implement and verify decision procedures. It fits exactly the kind of person I am: I enjoy thinking deeply about algorithms and proofs, and implementing kawaii cores with lots of surrounding heuristics to make stuff go fast! I'm super excited for 2025, because I feel like I've finally found product-market fit for my problem statement.
It was a sad year too, 'cause I broke up with my long term partner. I'm optimistic that we'll remain close friends, as we were before we began dating, and I am super excited to see what they do next!
Cheers, and let me know what I should read, try, and do for next year. After all, New Year's resolutions are still a day or two away!