let data_valid m k d =
    let t =
      match k with
        | Kptr te -> te
        | Kset (Kptr te) -> te
        | _ -> WpLog.fatal "unexpected type for valid predicate"
    in
    let te = Ctypes.object_of t in
    F.p_conj (List.map (M.valid m) (assigned_of_data te [] d))