I was reading Hillel Wayne’s new post TLA+ Won’t Solve Everything and became fixated on one of the things he says cannot be expressed in TLA⁺:

Possibility and reachability properties: that it’s always possible to make P true, even if you don’t actually decide to. Things like “I can always shut down the computer” or “A user can always change their password”. These can’t be expressed with <>P because that’s “for all behaviors, P happens at least once”, we actually want “for all behavior prefixes, there is at least one behavior where P happens at least once”.

This made me think. A while back I was reading Lamport’s new book, A Science of Concurrent Programs, and was doing pretty well until getting completely shut down by section 5.1, Possibility and Accuracy. The section talks about this exact topic, expressing possibility/reachability properties in TLA⁺. I could not wrap my head around it, to the point I thought there were major errors in the text. Hillel’s post spurred me to revisit it1, and I am happy to say I now basically understand it and will try to explain it in a way that makes sense to me. If you’d rather have it explained to you by Lamport directly, read section 5.1 of the above textbook or Lamport’s October 1998 paper Proving Possibility Properties.