Stability: [prod] Apt for production use (but please report any bugs).
Usage:project(Sg,Vars,HvFv_u,ASub,Proj)
Eliminates from each element of the list of lists of variables given as second argument any variable which is not an element of the first argument. Both ordered. i.e. Proj = { Ys | Xs in ASub, Ys = Xs intersect Vars }
Usage:call_to_entry(Sv,Sg,Hv,Head,K,Fv,Proj,Entry,ExtraInfo)
It obtains the abstract substitution (Entry) which results from adding the abstraction of the Sg = Head to Proj, later projecting the resulting substitution onto Hv. This is done as follows:
Usage:exit_to_prime(Sg,Hv,Head,Sv,Exit,ExtraInfo,Prime)
It computes the prime abstract substitution Prime, i.e. the result of going from the abstract substitution over the head variables (Exit), to the abstract substitution over the variables in the subgoal. It will:
Usage:abs_sort(Asub,Asub_s)
sorts the set of set of variables ASub to obtaint the Asub_s.
Usage:compute_lub(ListASub,Lub)
It computes the lub of a set of Asub. For each two abstract substitutions ASub1 and ASub2 in ListASub, obtaining the lub is just merging the ASub1 and ASub2.
Usage:glb(ASub0,ASub1,Lub)
Glb is just intersection.
Usage:extend(Sg,Prime,Sv,Call,Succ)
If Prime = bottom, Succ = bottom. If Sv = [], Call = Succ. Otherwise, it splits Call into two sets of sets: Intersect (those sets containing at least a variabe in Sv) and Disjunct (the rest). Then is obtains in Star the closure under union of Intersect. Finally, it prunes Star with the information in Prime adding, at the end, Disjunct.
Usage:
Specialized version of call_to_entry + exit_to_prime + extend for facts
Usage:pos(Xss,Arg,Xs,ArgShare)
Xss is a list containing in each Set_i the variables in the i-th arg of the Term. Arg is the number of the current arg. Xs is a sorted list of variables. It will obtain ArgShare, the set of arguments in at least one variable in Xs appears.
Usage:script_p_star(Atom,ASub,ShareArgsStar)
It first obtains in ArgSare_info the set of sets of argument numbers of Atom each one corresponding to each set in ASub. Then it obtains the closure under union.
Usage:unknown_entry(Sg,Qv,Call)
The top value in Sharing for a set of variables is the powerset.
Usage:empty_entry(Sg,Vars,Entry)
Gives the empty value in this domain for a given set of variables Vars, resulting in the abstract substitution Entry. I.e., obtains the abstraction of a substitution in which all variables Vars are unbound: free and unaliased. In this domain is the list of singleton lists of variables.
Usage:asub_to_native(ASub,Qv,OutFlag,ASub_user,Comps)
The user friendly format consists in extracting the ground variables.
Usage:input_user_interface(InputUser,Qv,ASub,Sg,MaybeCallASub)
Obtaining the abstract substitution for Sharing from the user supplied information just consists in taking the mshare(Sharing) element of InputUser and sorting it. If there is no such element, get the top sharing for the variables involved.
Usage:unknown_call(Sg,Vars,Call,Succ)
Obtained by selecting those sets in Call for which at least a variable in Vars appears, making the star of those sets, and adding the sets with empty intersection with Vars.
Usage:special_builtin(SgKey,Sg,Subgoal,Type,Condvars)
Satisfied if the builtin does not need a very complex action. It divides builtins into groups determined by the flag returned in the second argument + some special handling for some builtins:
Usage:success_builtin(Type,Sv_u,Condv,HvFv_u,Call,Succ)
Obtains the success for some particular builtins:
Usage:call_to_success_builtin(SgKey,Sg,Sv,Call,Proj,Succ)
Handles those builtins for which computing Prime is easier than Succ.