Automated Theorem Proving: A Review