A simple intervals abstract domain (non relational) derived from nonrel_base.pl.
Usage:nonrel_top(AbsInt,X)
X is the representation of ``top'' in the abstract domain.
Usage:nonrel_bot(AbsInt,X)
X is the representation of ``bot'' in the abstract domain.
Usage:nonrel_var_elem(AbsInt,X)
X is the abstraction of a free variable in the abstract domain.
Usage:nonrel_less_or_equal_elem(AbsInt,E1,E2)
Succeeds if E1 is smaller than E2.
Usage:nonrel_compute_glb_elem(AbsInt,E1,E2,EG)
EG is the greatest lower bound of E1 and E2.
Usage:nonrel_compute_lub_elem(AbsInt,E1,E2,EL)
EL is the least upper bound of E1 and E2.
Usage:nonrel_widen_elem(AbsInt,E1,E2,EW)
EW is the widening of E1 and E2.
Usage:nonrel_amgu(AbsInt,Term1,Term2,ASub0,NASub)
NASub is the abstract unification of Term1 and Term2, with ASub0 an abstract substitution that represents the state of both terms.
Usage:nonrel_unknown_entry(AbsInt,Sg,Vars,Call)
Gives the ``top'' value for a given set of variables Vars, resulting in abstract constraint Call.
Usage:nonrel_abs_sort(Asub,Asub_s)
It sorts the set of X/Values in Asub obtaining Asub_s
Usage:nonrel_project(Sg,Vars,HvFv_u,ASub,Proj)
Proj is the result of eliminating from ASub all X/Value such that X is not in Vars
Usage:nonrel_call_to_entry(AbsInt,Sv,Sg,Hv,Head,K,Fv,Proj,Entry,ExtraInfo)
It obtains the abstract substitution Entry which results from adding the abstraction of Sg = Head to Proj, later projecting the resulting substitution onto Hv.
In the general case, the steps are:
Usage:nonrel_exit_to_prime(AbsInt,Sg,Hv,Head,Sv,Exit,ExtraInfo,Prime)
Usage:nonrel_compute_lub(AbsInt,ListASub,Lub)
Lub is the least upper bound of the list of abstract substitutions ListASub.
Usage:nonrel_extend(AbsInt,Sg,Prime,Sv,Call,Succ)
Usage:nonrel_call_to_success_fact(AbsInt,Sg,Hv,Head,K,Sv,Call,Proj,Prime,Succ)
Specialized version of call_to_entry/9 + exit_to_prime/7 + extend/4 for facts
Usage:nonrel_special_builtin(AbsInt,SgKey,Sg,Subgoal,Type,Condvars)
Usage:nonrel_success_builtin(AbsInt,Sv_uns,Type,Condv,HvFv_u,Call,Succ)
Obtains the success for some particular builtins.
Usage:nonrel_call_to_success_builtin(AbsInt,SgKey,Sg,Sv,Call,Proj,Succ)
Handles those builtins for which computing Proj is easier than Succ. Currently only builtins =/2 and ==/2 are implemented. More builtins can be added by the user.
Usage:nonrel_input_user_interface(AbsInt,InputUser,Qv,ASub,Sg,MaybeCallASub)
Obtains the abstract substitution from the native properties found in the user supplied info.
Usage:nonrel_input_interface(AbsInt,Prop,Kind,Struc0,Struc1)
Adds native property Prop to the structure accumulating the properties relevant to this domain.
Usage:nonrel_asub_to_native(AbsInt,ASub,Qv,OutFlag,ASub_user,Comps)
It translates an internal abstract constraint into something friendly for the user.
Usage:nonrel_unknown_call(AbsInt,Sg,Vars,Call,Succ)
Gives the ``top'' value for the variables involved in a literal whose definition is not present, and adds this top value to Call
Usage:nonrel_less_or_equal(AbsInt,ASub0,ASub1)
Succeeds if ASub1 is more general or equal to ASub0. it is assumed the two abstract substitutions are defined on the same variables
Usage:nonrel_glb(AbsInt,ASub0,ASub1,Glb)
Glb is the great lower bound of ASub0 and ASub1, two substitutions that describe the same set of variables.
Usage:nonrel_widen(AbsInt,Asub1,ASub2,WAsub)
Usage:nonrel_widencall(AbsInt,Asub1,ASub2,WAsub)