“…The problem of designing suitable unfolding and generalization operators has been addressed in many papers and various solutions have been proposed in the literature (see, for instance, [16,19,31] and [28] for a survey in the case of logic programs). In this paper we will not focus on this aspect and we will simply assume that we are given: (i) an operator Unfold(δ, P ) which, for every clause δ occurring in a program P , returns a set of clauses derived from δ by applying n (≥ 1) times the unfolding rule R2, and (ii) an operator Gen(c ∧ ∧ A, Defs) which, for every constraint c, atom A with vars(c) ⊆ vars(A), and set Defs of the definition clauses introduced so far by Rule R1 during the Specialization Strategy, returns a constraint g that is more general than c, that is: (i) vars(g) ⊆ vars(c) and (ii) c ⊑ R g. An example of the generalization operator Gen will be presented in Section 5.…”