let data_index ta ka ga kb gb =
   match ka,kb with
     | (Karray _ | Kptr _) , (Kint | Kcint _) ->
         Loc (M.index (loc_of_data ta ga) ta (integer_of_data kb gb))
     | (Karray _ | Kptr _) , (Kset ((Kint |Kcint _) as kbi)) ->
         data_index_range ta (loc_of_data ta ga) kbi gb
     | _ ->  WpLog.not_yet_implemented "shift over arbitrary sets of pointers"