code: private WyalFile.VariableDeclaration[] generateLoopInvariantParameterDeclarations(Stmt.Loop loop,
  			LocalEnvironment environment) {
  		// Extract all used variables within the loop invariant. This is necessary to
  		// determine what parameters are required for the loop invariant macros.
  		Tuple<Decl.Variable> modified = determineUsedVariables(loop.getInvariant());
  		WyalFile.VariableDeclaration[] vars = new WyalFile.VariableDeclaration[modified.size()];
  		// second, set initial environment
  		for (int i = 0; i != modified.size(); ++i) {
  			WyilFile.Decl.Variable var = modified.get(i);
  			vars[i] = environment.read(var);
  		}
  		return vars;
  	}
docs: Convert the types of local variables in scope at a given position within a
  function or method into a type pattern. This is primarily useful for
  determining the types for a loop invariant macro.
  
  @param params
  @param declaration
  @return