generalise unification