Optimizing strategies for telescoping languages: procedure strength reduction and procedure vectorization