Formal development of programs and proofs (Addison, 1990)