Mathematical Structures for Software Engineering (1991)