Proof Techniques In Theory Of Computation