I think that such a brief explanation using the terms non-associative
and non-commutative
will not be informative to the typical user. Even if the user knows the
meaning
of the terms it might not convey how the match may or may not work.
Describing the actual situation in which a match will or will not occur is
probably tantamount to trying to recount the algorithm used for matching.
note that components of the pattern may have matchdeclare declarations.
A rule that says tellsimp(a(h)+b(h) ,c(h)) with h being declared
predicate p,
e.g. matchdeclare(h,p)
can sometimes be rephrased via
ratsubst.
e..g.
s:target_expression;
for h in listofvars(s) do if p(h) then s:ratsubstc(h), a(h)+b(h), s);
s;
This has the advantage of reducing the transformation of sums into a
more easily defined situation. The disadvantage is that it is using
the rational function representation which may do other transformations
which may be unwelcome.