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]"