Patterns as Tools for Algebraic Reasoning