[C0*1, C1*X1, C2*X2, ...]where Ci are numbers and Xi are distinct variables. The first (constant) term is always present, Ci (i>=1) are nonzero.
Such a form can become denormalized due to unifications (instantiation or variable-variable aliasing). This predicate renormalizes it. Note that variables may only become instantiated to numbers!
?- linearize(3*X-7*Y+2*(X+Y), L1, R), writeln(L1), Y = 3, linrenorm(L1,L2), writeln(L2). [0 * 1, 5 * X, -5 * Y] [-15 * 1, 5 * X]