Mathematics of program construction (Berlin Springer-Verlag, 2006)