sig
  module type T =
    sig
      type t
      val pretty : Stdlib.Format.formatter -> Abstract_offset.T.t -> unit
      val append :
        Abstract_offset.T.t -> Abstract_offset.T.t -> Abstract_offset.T.t
      val join :
        Abstract_offset.T.t -> Abstract_offset.T.t -> Abstract_offset.T.t
      val of_cil_offset :
        (Cil_types.exp -> Int_val.t) ->
        Cil_types.typ -> Cil_types.offset -> Abstract_offset.T.t
      val of_ival :
        base_typ:Cil_types.typ ->
        typ:Cil_types.typ -> Ival.t -> Abstract_offset.T.t
      val of_term_offset :
        Cil_types.typ -> Cil_types.term_offset -> Abstract_offset.T.t
      val is_singleton : Abstract_offset.T.t -> bool
    end
  type typed_offset =
      NoOffset of Cil_types.typ
    | Index of Int_val.t * Cil_types.typ * Abstract_offset.typed_offset
    | Field of Cil_types.fieldinfo * Abstract_offset.typed_offset
  module TypedOffset :
    sig
      type t = typed_offset
      val pretty : Format.formatter -> t -> unit
      val append : t -> t -> t
      val join : t -> t -> t
      val of_cil_offset :
        (Cil_types.exp -> Int_val.t) ->
        Cil_types.typ -> Cil_types.offset -> t
      val of_ival :
        base_typ:Cil_types.typ -> typ:Cil_types.typ -> Ival.t -> t
      val of_term_offset : Cil_types.typ -> Cil_types.term_offset -> t
      val is_singleton : t -> bool
    end
  module TypedOffsetOrTop :
    sig
      type t = [ `Top | `Value of typed_offset ]
      val pretty : Format.formatter -> t -> unit
      val append : t -> t -> t
      val join : t -> t -> t
      val of_cil_offset :
        (Cil_types.exp -> Int_val.t) ->
        Cil_types.typ -> Cil_types.offset -> t
      val of_ival :
        base_typ:Cil_types.typ -> typ:Cil_types.typ -> Ival.t -> t
      val of_term_offset : Cil_types.typ -> Cil_types.term_offset -> t
      val is_singleton : t -> bool
    end
end