Basic Proof Techniques for Software Engineers