Biabduction.PredicatesOffset for an lvalue.
type atom = | Aeq of IR.Exp.t * IR.Exp.tequality
*)| Aneq of IR.Exp.t * IR.Exp.tdisequality
*)| Apred of IR.PredSymb.t * IR.Exp.t listpredicate symbol applied to exps
*)| Anpred of IR.PredSymb.t * IR.Exp.t listnegated predicate symbol applied to exps
*)an atom is a pure atomic formula
val atom_has_local_addr : atom -> boolThe boolean is true when the pointer was dereferenced without testing for zero.
True when the value was obtained by doing case analysis on null in a procedure call.
type inst = | Iabstraction| Iactual_precondition| Ialloc| Iformal of zero_flag * null_case_flag| Iinitial| Ilookup| Inone| Inullify| Irearrange of zero_flag * null_case_flag * int * IR.PredSymb.path_pos| Itaint| Iupdate of zero_flag * null_case_flag * int * IR.PredSymb.path_pos| Ireturn_from_call of intinstrumentation of heap values
val inst_actual_precondition : instval inst_formal : instval inst_initial : instfor formal parameters and heap values at the beginning of the function
val inst_lookup : instfor initial values
val inst_none : instval inst_nullify : instval inst_rearrange : bool -> IBase.Location.t -> IR.PredSymb.path_pos -> instthe boolean indicates whether the pointer is known nonzero
val inst_update : IBase.Location.t -> IR.PredSymb.path_pos -> instval inst_new_loc : IBase.Location.t -> inst -> instupdate the location of the instrumentation
type 'inst strexp0 = | Eexp of IR.Exp.t * 'instBase case: expression with instrumentation
*)| Estruct of (IR.Fieldname.t * 'inst strexp0) list * 'instC structure
*)| Earray of IR.Exp.t * (IR.Exp.t * 'inst strexp0) list * 'instArray of given length There are two conditions imposed / used in the array case. First, if some index and value pair appears inside an array in a strexp, then the index is less than the length of the array. For instance, x |->[10 | e1: v1] implies that e1 <= 9. Second, if two indices appear in an array, they should be different. For instance, x |->[10 | e1: v1, e2: v2] implies that e1 != e2.
structured expressions represent a value of structured type, such as an array or a struct.
Comparison function for strexp. The inst:: parameter specifies whether instumentations should also be considered (false by default).
Equality function for strexp. The inst:: parameter specifies whether instumentations should also be considered (false by default).
type 'inst hpred0 = | Hpointsto of IR.Exp.t * 'inst strexp0 * IR.Exp.trepresents exp|->strexp:typexp where typexp is an expression representing a type, e.h. sizeof(t).
| Hlseg of lseg_kind * 'inst hpara0 * IR.Exp.t * IR.Exp.t * IR.Exp.t listhigher - order predicate for singly - linked lists. Should ensure that exp1!= exp2 implies that exp1 is allocated. This assumption is used in the rearrangement. The last exp list parameter is used to denote the shared links by all the nodes in the list.
| Hdllseg of lseg_kind
  * 'inst hpara_dll0
  * IR.Exp.t
  * IR.Exp.t
  * IR.Exp.t
  * IR.Exp.t
  * IR.Exp.t listhigher-order predicate for doubly-linked lists. Parameter for the higher-order singly-linked list predicate. Means "lambda (root,next,svars). Exists evars. body". Assume that root, next, svars, evars are disjoint sets of primed identifiers, and include all the free primed identifiers in body. body should not contain any non - primed identifiers or program variables (i.e. pvars).
*)an atomic heap predicate
and 'inst hpara0 = {root : IR.Ident.t;next : IR.Ident.t;svars : IR.Ident.t list;evars : IR.Ident.t list;body : 'inst hpred0 list;}and 'inst hpara_dll0 = {cell : IR.Ident.t;address cell
*)blink : IR.Ident.t;backward link
*)flink : IR.Ident.t;forward link
*)svars_dll : IR.Ident.t list;evars_dll : IR.Ident.t list;body_dll : 'inst hpred0 list;}parameter for the higher-order doubly-linked list predicates. Assume that all the free identifiers in body_dll should belong to cell, blink, flink, svars_dll, evars_dll.
val compare_hpara_dll0 : 
  ('inst -> 'inst -> int) ->
  'inst hpara_dll0 ->
  'inst hpara_dll0 ->
  inttype hpara_dll = inst hpara_dll0Comparison function for hpred. The inst:: parameter specifies whether instumentations should also be considered (false by default).
Equality function for hpred. The inst:: parameter specifies whether instumentations should also be considered (false by default).
val create_sharing_env : unit -> sharing_envCreate a sharing env to store canonical representations
val hpred_compact : sharing_env -> hpred -> hpredReturn a compact representation of the exp
val is_objc_object : hpred -> boolval pp_offset : IStdlib.Pp.env -> F.formatter -> offset -> unitval d_offset_list : offset list -> unitDump a list of offsets
val pp_atom : IStdlib.Pp.env -> F.formatter -> atom -> unitPretty print an atom.
val d_atom : atom -> unitDump an atom.
val pp_inst : F.formatter -> inst -> unitpretty-print an inst
val pp_sexp : IStdlib.Pp.env -> F.formatter -> strexp -> unitPretty print a strexp.
val d_sexp : strexp -> unitDump a strexp.
val pp_hpred : IStdlib.Pp.env -> F.formatter -> hpred -> unitPretty print a hpred.
val d_hpred : hpred -> unitDump a hpred.
val pp_hpara : IStdlib.Pp.env -> F.formatter -> hpara -> unitPretty print a hpara.
val pp_hpara_dll : IStdlib.Pp.env -> F.formatter -> hpara_dll -> unitPretty print a hpara_dll.
module Env : sig ... endrecord the occurrences of predicates as parameters of (doubly -)linked lists and Epara. Provides unique numbering for predicates and an iterator.
val pp_hpred_env : 
  IStdlib.Pp.env ->
  Env.t option ->
  F.formatter ->
  hpred ->
  unitPretty print a hpred with optional predicate env
Change exps in strexp using f. WARNING: the result might not be normalized.
Change exps in hpred by f. WARNING: the result might not be normalized.
val hpred_list_expmap : 
  ((IR.Exp.t * inst option) -> IR.Exp.t * inst option) ->
  hpred list ->
  hpred listChange exps in hpred list by f. WARNING: the result might not be normalized.
Change exps in atom by f. WARNING: the result might not be normalized.
val atom_free_vars : atom -> IR.Ident.t IStdlib.IStd.Sequence.tval atom_gen_free_vars : 
  atom ->
  (unit, IR.Ident.t) IStdlib.IStd.Sequence.Generator.tval hpred_free_vars : hpred -> IR.Ident.t IStdlib.IStd.Sequence.tval hpred_gen_free_vars : 
  hpred ->
  (unit, IR.Ident.t) IStdlib.IStd.Sequence.Generator.tval hpara_shallow_free_vars : hpara -> IR.Ident.t IStdlib.IStd.Sequence.tval hpara_dll_shallow_free_vars : 
  hpara_dll ->
  IR.Ident.t IStdlib.IStd.Sequence.tVariables in hpara_dll, excluding bound vars in the body
type subst = private (IR.Ident.t * IR.Exp.t) listval subst_of_list : (IR.Ident.t * IR.Exp.t) list -> substCreate a substitution from a list of pairs. For all (id1, e1), (id2, e2) in the input list, if id1 = id2, then e1 = e2.
val subst_of_list_duplicates : (IR.Ident.t * IR.Exp.t) list -> substlike subst_of_list, but allow duplicate ids and only keep the first occurrence
val sub_to_list : subst -> (IR.Ident.t * IR.Exp.t) listConvert a subst to a list of pairs.
val sub_empty : substThe empty substitution.
val is_sub_empty : subst -> boolCompute the common id-exp part of two inputs subst1 and subst2. The first component of the output is this common part. The second and third components are the remainder of subst1 and subst2, respectively.
Compute the common id-exp part of two inputs subst1 and subst2. The first component of the output is this common part. The second and third components are the remainder of subst1 and subst2, respectively.
val sub_find : (IR.Ident.t -> bool) -> subst -> IR.Exp.tsub_find filter sub returns the expression associated to the first identifier that satisfies filter. Raise Not_found_s/Caml.Not_found if there isn't one.
val sub_filter : (IR.Ident.t -> bool) -> subst -> substsub_filter filter sub restricts the domain of sub to the identifiers satisfying filter.
val sub_filter_pair : subst -> f:((IR.Ident.t * IR.Exp.t) -> bool) -> substsub_filter_exp filter sub restricts the domain of sub to the identifiers satisfying filter(id, sub(id)).
sub_range_partition filter sub partitions sub according to whether range expressions satisfy filter.
val sub_domain_partition : (IR.Ident.t -> bool) -> subst -> subst * substsub_domain_partition filter sub partitions sub according to whether domain identifiers satisfy filter.
val sub_domain : subst -> IR.Ident.t listReturn the list of identifiers in the domain of the substitution.
Return the list of expressions in the range of the substitution.
sub_range_map f sub applies f to the expressions in the range of sub.
val sub_map : 
  (IR.Ident.t -> IR.Ident.t) ->
  (IR.Exp.t -> IR.Exp.t) ->
  subst ->
  substsub_map f g sub applies the renaming f to identifiers in the domain of sub and the substitution g to the expressions in the range of sub.
val extend_sub : subst -> IR.Ident.t -> IR.Exp.t -> subst optionExtend substitution and return None if not possible.
val subst_free_vars : subst -> IR.Ident.t IStdlib.IStd.Sequence.tval subst_gen_free_vars : 
  subst ->
  (unit, IR.Ident.t) IStdlib.IStd.Sequence.Generator.tsubstitution functions WARNING: these functions do not ensure that the results are normalized.
val hpara_instantiate : 
  hpara ->
  IR.Exp.t ->
  IR.Exp.t ->
  IR.Exp.t list ->
  IR.Ident.t list * hpred listhpara_instantiate para e1 e2 elist instantiates para with e1, e2 and elist. If para = lambda (x, y, xs). exists zs. b, then the result of the instantiation is b[e1 / x, e2 / y, elist / xs, _zs'/ zs] for some fresh _zs'.
val hpara_dll_instantiate : 
  hpara_dll ->
  IR.Exp.t ->
  IR.Exp.t ->
  IR.Exp.t ->
  IR.Exp.t list ->
  IR.Ident.t list * hpred listhpara_dll_instantiate para cell blink flink elist instantiates para with cell, blink, flink, and elist. If para = lambda (x, y, z, xs). exists zs. b, then the result of the instantiation is b[cell / x, blink / y, flink / z, elist / xs, _zs'/ zs] for some fresh _zs'.
val custom_error : IR.Pvar.t