Algebraic Methodology and Software Technology by Michael Johnson