let reduce_environment env = 
  let gbind =
    List.map
      (fun (id,x) -> id, {x with gbind_type = reduce_variable_type x.gbind_type })
      env.global_binding 
  in
  let str_table = 
    List.map
      (fun (id,desc) -> id, ref (reduce_struct_desc !desc))
      env.struct_table
  in
  assert (env.local_binding = []);
  { global_binding = gbind;
    struct_table = str_table;
    struct_name_table = env.struct_name_table;
    local_binding = [] }