Satisfiability-Based Program Reasoning and Program Synthesis. by Saurabh Srivastava