a field-theory motivated approach to computer algebra

## take_match

Select a subset of terms in a sum for further computations.
The take_match and replace_match algorithms enable you to temporarily work only on a part of an expression. You select the terms that you want to work on with take_match. When you are done, put the result back into the larger expression with replace_match. A simple example shows how this works:
ex:=A C + B D G + C D A;
$$\displaystyle{}A C+B D G+C D A$$
take_match(_, $D Q??$);
$$\displaystyle{}B D G+C D A$$
substitute(_, $C -> Q$);
$$\displaystyle{}B D G+Q D A$$
replace_match(_);
$$\displaystyle{}A C+B D G+Q D A$$
As you can see here, the replacement $C\rightarrow Q$ was only done on the 2nd and 3rd term of the original expression, to which we restricted all manipulations using the take_match command. This of course also works with more complicated, tensorial expressions, as the example below shows.
ex:= A_{m n} \chi B^{m}_{p} + \psi A_{n p};
$$\displaystyle{}A_{m n} \chi B^{m}\,_{p}+\psi A_{n p}$$
take_match(_, $\chi Q??$);
$$\displaystyle{}A_{m n} \chi B^{m}\,_{p}$$
substitute(_, $A_{m n} -> C_{m n}$);
$$\displaystyle{}C_{m n} \chi B^{m}\,_{p}$$
replace_match(_);
$$\displaystyle{}C_{m n} \chi B^{m}\,_{p}+\psi A_{n p}$$
When you are working on a part of an expression, you can restrict attention further by applying take_match again. The replace_match then puts sub-expressions back into the larger expression in reverse order:
ex:=A B + C B + C D B;
$$\displaystyle{}A B+C B+C D B$$
take_match(_, $C Q??$);
$$\displaystyle{}C B+C D B$$
substitute(_, $C -> Q$);
$$\displaystyle{}Q B+Q D B$$
take_match(_, $D Q??$);
$$\displaystyle{}Q D B$$
substitute(_, $B -> R$);
$$\displaystyle{}Q D R$$
replace_match(_);
$$\displaystyle{}Q B$$
replace_match(_);
$$\displaystyle{}A B+Q B$$