Foundations of Software Science and Computation Structures by Wolfgang Thomas