Verification of Sequential and Concurrent Programs