Reasoning and Theorem Proving