Software engineering with OBJ algebraic specification in action (Kluwer, 2000)