let comparisons _info ~signed f e1 e2 =
    let r =
    try
      let k1,v1 = find_lonely_key e1 in
      let k2,v2 = find_lonely_key e2 in
      if not (Base.equal k1 k2)
      then begin
          if (not signed)
          then begin
              let e1_zero = equal e1 singleton_zero in
              let e2_zero = equal e2 singleton_zero in
              if (e1_zero && (f == do_le || f == do_lt))
                || (e2_zero && (f == do_ge || f == do_gt))
              then singleton_one
              else if (e2_zero && (f == do_le || f == do_lt))
                || (e1_zero && (f == do_ge || f == do_gt))
              then singleton_zero
              else zero_or_one
            end
          else zero_or_one
        end
      else Ival.compare_C f v1 v2
    with Not_found ->
      zero_or_one
    in
(*    Format.printf "comparisons %a %a %a@."
      pretty e1 pretty e2 pretty r; *)

    r