Thinking Programs Logical Modeling and Reasoning About Languages, Data, Computations, and Executions, 2nd ed.

Wolfgang Schreiner