On a general ?-algorithm