Abstraction and Specification in Program Development (The MIT Electrical Engineering and Computer Science Series)