A Logical Introduction to Proof by Daniel W. Cunningham