Algebraic Reasoning: Analyzing Functions