defrule for altering sum expressions?



I'd like to define the following rule and have it convert a sum into a
"nearest neighbor sum" so that the sum is from i-1 to i+1 no matter what
the original bounds are. Any ideas why it doesn't work?

numorsym(a) := numberp(a) or symbolp(a);

defmatch(A,true, [low,high],numorsym);

defrule(nearestneighborsum,sum(A,j,low,high),sum(A,j,i-1,i+1));

but it doesn't work:

(%i71) numorsym(x) := numberp(x) or symbolp(x);
(%o71)              numorsym(x) := numberp(x) or symbolp(x)
(%i72) matchdeclare(A,true,[low,high],numorsym);
(%o72)                               done
(%i73) defrule(nearestneighborsum,sum(A,j,low,high),sum(A,j,i-1,i+1));
(%o73) nearestneighborsum : sum(A, j, low, high) -> sum(A, j, i - 1, i + 1)
(%i74) nearestneighborsum(sum(foobar[j],j,1,N));
(%o74)                               false