Proving Optimizations Correct using Parameterized Program Equivalence