This illustrates that the syntactic structures of B and C alone provide insufficient information for a satisfactory control of polyvariance and that a refined abstraction operator should also take the associated SLDNF-trees into consideration.
So an abstraction operator should focus on the "essential" structure of an SLDNF-tree and for instance disregard the particular substitutions and goals within the tree.
4 An Abstraction Operator Using Characteristic Trees
The following abstraction operator represents a first attempt at using characteristic trees for the control of polyvariance.
So, although partial deduction was able to figure out that member(a, [a, b]) as well as member(a, [a]) have only one nonfailing resolvent, this information has been lost due to an imprecision of the abstraction operator, thereby leading to a suboptimal residual program in which the determinacy is not explicit (and redundant computation steps occur at run-time).
We first define an abstraction operator which, by definition, preserves the characteristic trees.
The overall tree is kept finite through ensuring monotonicity of the measure functions, and termination of the algorithm follows, provided the abstraction operator (on atoms) is similarly well-founded.
Alternatively, one could try to use an altogether more accurate abstraction operator than taking an msg on characteristic atoms.
1, which allows the advanced user to change and even implement for example the unfolding rule as well as the abstraction operator and nontermination detection method.