The Calculus of Computation: Decision Procedures with Applications to Verification