defrule and apply1



Hallo,
I would ask you again about applying rules in maxima.
Although
*
matchdeclare(s,constantp)$
defrule(a1, A(x(a),s*y(a)),s*A(x(a),y(a)))$
apply1(A(x(a),%i*y(a)),a1);
*
gives what expected: %i*A(x(a),y(a)),
the lines below (where the constant is symbolic):
*
matchdeclare(s1,constantp,s2,constantp)$
declare(C1,constant,C2,constant)$
defrule(r11, A(   W1(a),s1*W2(a)),s1*A(W1(a),W2(a)))$
defrule(r12, A(s1*W1(a),   W2(a)),s1*A(W1(a),W2(a)))$
defrule(r13, A(s1*W1(a),s2*W2(a)),s1*s2*A(W1(a),W2(a)))$
wyr:A(C1*F1(a),C2*F2(a))$
apply1(wyr,r11,r12,r13);
*
do not work properly. There appeared A(C1*F1(a),C2*F2(a)) instead of 
expected
C1*C2*A(F1(a),F2(a)). Why is this so?
Thank you. Marek Pietrow.