let rec data_startof_set ta ga =
    match ga with
      | Value _ | Data _ | Loc _ ->
          Loc (M.startof (loc_of_data ta ga) ta)
      | Set _ | Range _ ->
          Wp_parameters.not_yet_implemented "start-of over sets"
      | List pl ->
          union_map (fun p -> data_startof_set ta p ) pl
      | Interval _ -> WpLog.fatal "unexpected argument for [startof]"