let rec set_of  = function
    | Value v -> D.singleton (M.logic_of_value v)
    | Data d -> D.singleton d
    | Loc l ->  D.singleton (F.wrap (M.pointer_of_loc l))
    | List ds -> D.unions (List.map set_of ds)
    | Interval i -> D.interval i
    | Set s -> s
    | Range _ -> Wp_parameters.not_yet_implemented "set of zone"