Software abstractions : logic, language and analysis - Jackson, Daniel. (MIT Press, 2006)