abstracted learning algorithm