Algebraic Reasoning through Patterns