Simplify ladder operators



Hi all,


I tried to simplify ladder operators as they appear
in quantuum mechanics. For a simple example assume
R and L be the operators for which we know:

L|n> = sqrt(n)*|n-1>

and

R|n> = sqrt(n+1)*|n+1>

and [R,L] = 1


I do not know much about the simplifier of maxima
and this is my first real world try which custom rules.
But I read saw threads about geometric algebra simplifications
on this list. So I tried to do more or less the same thing here.


First I would like to simplify the following expression: (R+L).(R+L)

expand((R+L).(R+L));

yields a big result which is correct but can be simplified
which the help of the commutator relation mentioned above.

I tried to use "tellsimpafter" like this:

tellsimpafter(R.L, 1-L.R);

This works nice for (R+L).(R+L), lets call the
fully simplified result E. No problems so far.


Now I would like to simplify (R+L).(R+L).(R+L).(R+L), 
so I try:

expand((R+L).(R+L).(R+L).(R+L));

but there remain terms which could be simplified away.
What does prohibit the full simplification?
I can get a fully simplified result f.e. with expand(E.E).



Finally I would like to be able to calculate for example:

R.R.L.L |n> = ...?

Is there an (easy) way to use the definitions of R and L
as simplifing rules? Something like

tellsimpafter(L.ket(n), sqrt(n)*ket(n-1));

And how should I tell maxima about the kets?


Thanks for any hint.


-- Raoul