Reasoning in Predicate Logic