Constructing correct software - the basics - Cooke, John (Springer, 1998)