This paper describes a uniform approach to the automation of verification tasks associated with while statements, representation functions for abstract data types, generic program units and abstract base classes. Program units are annotated with equations containing symbols defined by algebraic axioms. An operation's axioms are developed using strategies that guarantee crucial properties such as convergence and sufficient completeness. Sets of axioms are developed by stepwise extensions that preserve these properties. Verifications are performed with the aid of a program that incorporates term rewriting, structural induction, and heuristics based on ideas used in the Boyer-Moore prover. The program provides valuable mechanical assistance: managing inductive arguments and providing hints for necessary lemmas, without which formal proofs would be impossible. The successes and limitations of our approaches are illustrated with examples from each domain.