let make_compact f max_variable_number variable_environment =
    let rename_table = Array.create max_variable_number (-1) in
    let variable_counter = ref 0 in
    let rename n =
        let m = rename_table.(n) in
        if m = -1 then begin
              let m = !variable_counter in
              incr variable_counter;
              rename_table.(n) <- m;
              m
        end
        else
            m
    in
    let rename_phi_function( r, t, a ) = rename r, t, Array.map rename a in
    for i = 0 to Array.length f - 1 do
        let phi_function = List.map rename_phi_function f.(i).phi_function in
        let code = List.map (map_il rename rename) f.(i).code in
        f.(i).phi_function <- phi_function;
        f.(i).code <- code
    done;
    let new_max_variable_number = !variable_counter in
    let new_variable_environment =
        Array.create new_max_variable_number null_variable_attribute
    in
    for i = 0 to max_variable_number - 1 do
        if rename_table.(i) <> -1 then
            let j = rename_table.(i) in
            new_variable_environment.(j) <- variable_environment.(i)
    done;
    new_max_variable_number, new_variable_environment