sig
  type logic = M.loc Memory.logic
  val value : logic -> Lang.F.term
  val loc : logic -> M.loc
  val vset : logic -> Vset.set
  val sloc : logic -> M.loc Memory.sloc list
  val rdescr : M.loc Memory.sloc -> Lang.F.var list * M.loc * Lang.F.pred
  val map : Lang.F.unop -> logic -> logic
  val map_opp : logic -> logic
  val map_loc : (M.loc -> M.loc) -> logic -> logic
  val map_l2t : (M.loc -> Lang.F.term) -> logic -> logic
  val map_t2l : (Lang.F.term -> M.loc) -> logic -> logic
  val apply : Lang.F.binop -> logic -> logic -> logic
  val apply_add : logic -> logic -> logic
  val apply_sub : logic -> logic -> logic
  val field : logic -> Cil_types.fieldinfo -> logic
  val shift : logic -> Ctypes.c_object -> ?size:int -> logic -> logic
  val load : M.Sigma.t -> Ctypes.c_object -> logic -> logic
  val union : Cil_types.logic_type -> logic list -> logic
  val inter : Cil_types.logic_type -> logic list -> logic
  type region = M.loc Memory.sloc list
  val separated : (Ctypes.c_object * region) list -> Lang.F.pred
  val included :
    Ctypes.c_object -> region -> Ctypes.c_object -> region -> Lang.F.pred
  val valid :
    M.Sigma.t -> Memory.acs -> Ctypes.c_object -> region -> Lang.F.pred
end