Logic and Proof Techniques