Practical Logic by Daniel Seely Gregory