The second method is the one which for commuting algebras has been developed to a high art in computer calculation. The idea is very simple and intuitive. Simplification is done with rules which replace complicated monomials with sums of simpler monomials, e.g.,
inv[1-x] ** x -> inv[1-x]-1
inv[a+b ** c] ** b ** c -> 1-inv[a+b ** c] ** inv[a]
throughout the expression to be simplified. When you use NCAlgebra
you will often be making up such rules and substituting them in
expressions. In a fixed collection of applications you can make your
life easier if you save the rules and use them over and over again.
The best way to do this is to put them in a function, say
MyRules=
{inv[1-x_] :> inv[x]-1,
inv[a+b ** c] ** b ** c -> 1-inv[a+b ** c] ** inv[a]};
MySimplify[expr_]:=Substitute[expr, MyRules];
One of the trickier fine points is how to set the blanks in your rules.
If you do not use blanks that's fine provided you always use the
same letters and do not replace them with other notation in some equation.
Clearly using blanks is much more powerful. The trick is how many.
For example, x_ is ok here.
APPENDIX E discusses this.