Automated Theorem Proving: Theory and Practice A Review