Principles of Automated Theorem Proving