declaring x as symbolp is usually a mistake.
when you are matching
a*x+b, you want to match a as the coefficient of x, a given parameter to the
match.
If you declare x as symbolp, then the matching program will, I think, refuse
to match
x+b with a=1, .
beyond that, I don't know if the integration of unit_step()*f(x) is being
done right, but I
suggest that you stop hacking on 'integrate except for two rules:
matchdeclare([any,any2,any3,any4,any5],true);
tellsimp(integrate(any*unit_step(any2),any3,any4,any5),
unit_step_prod_integrate(any,any2,any3,any4,any5));
tellsimp(integrate(unit_step(any2),any3,any4,any5),
unit_step_prod_integrate(1,any2,any3,any4,any5));
then write unit_step_prod_integrate...
RJF