First-Order Logic and Automated Theorem Proving