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