Explanation-based generalization in a logic programming environment