let pretty fmt v =
    (*Format.printf "@[HERE@.@]";*)
    let pretty_org fmt org =
      if not (Origin.is_top org) then
        Format.fprintf fmt "@ @[(origin: %a)@]" Origin.pretty org
    in
    match v with
      | Top (Top_Param.Top, a) ->
          Format.fprintf fmt "{{ ANYTHING%a }}"
            pretty_org a
      | Top (t, a) ->
          Format.fprintf fmt "{{ garbled mix of &%a%a }}"
            Top_Param.pretty t
            pretty_org a
      | Map m ->
          try
            Ival.pretty fmt (project_ival v)
          with
            | Not_based_on_null ->
                let print_binding fmt k v =
                  if Ival.equal Ival.singleton_zero v
                  then Format.fprintf fmt "@[&%a@]" Base.pretty k
                  else
                    Format.fprintf fmt "@[&%a +@ %a@]"
                      Base.pretty k Ival.pretty v
                in
                Pretty_utils.pp_iter
                  ~pre:"@[<hov 3>{{ " ~suf:" }}@]" ~sep:" ;@ "
                  (fun pp map -> M.iter (fun k v -> pp (k, v)) map)
                  (fun fmt (k, v) -> print_binding fmt k v)
                  fmt m