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"