Mechanizing the development of software

This paper presents a mechanizable framework for software development by refinement. The framework is based on a category of specifications. The key idea is representing knowledge about programming concepts, such as algorithm design, datatype refinement, and expression simplification, by means of taxonomies of specifications and morphisms. Examples are drawn from working systems Specware, Designware, and Planware.