let rec data_index_range tobj loc kbi dindex =
    match dindex with
      | Data _ | Value _ | Loc _  as d ->
          Loc (M.index loc tobj (integer_of_data kbi d))
      | List il -> union_map (data_index_range tobj loc kbi ) il
      | Interval r -> Range(tobj,loc,r)
      | Set _ | Range _ ->
          Wp_parameters.not_yet_implemented "array access over arbitrary sets"