Re[Maxima] itensor



Hi Rob,

Thanks for your interest in itensor.


>How would one go about writing some macros to simplify input in itensor
>form?  While I have figured out what it takes to input each of the base
>operators, an additional layer of abstraction could greatly reduce the
>opportunity for errors.
I agree with this. I'm sorry I can not help at this point. I just know nothing 
how to write macros.


>If these functions exsited, would it be possible to take the next step, and
>have maxima identify common forms, and display them as such.

>exp : u([],[i],i)$
>show(exp)$
>would print (div u) or (del dot u)?
I still don't understand what a sence to present in such a form. As to me 
notation U^i_{,i} is equally well as div U.

>Somewhat unrelated, what are the pros & cons between using your lch & the
>built-in lc?
Lc does not understand the symbolic indices. lch does it, however it is still 
unsatisfactory. Actually it is possible to do without these functions. I mean 
you migth use the kdelta instead them.

>From what I can tell, your lch is just a dummy constant entity with 3
>indices.  As such, it survives differentiation, without causing extra terms
>through the chain rule.  Otherwise, it has no functionality.  Thats why (v
>cross v) using your lch is not recognized as being zero.
As I said you can  kdelta here or use  the rule which will be replace all the 
single lch with relevant kdelta.
v cross v  in covariant notation will be 
kdelta([i,j],[i1,j1])*v([i1],[])*v([j1],[]). You can check that this is 
exactly zero.
(C7) 'kdelta([i,j],[i1,j1])*v([i1])*v([j1])$
(C8) show(%)$
                                            I1 J1
(D8)                          KDELTA       V   V
                                             I/J      I1  J1
(C9) canform(ev(%,kdelta));
(D9)                                   0

 This way  is very usefull if you want to apply conditions  like a curl-free 
to expression. Say, lets introduce the two-form like 
(C18) tf: 'kdelta([i,j],[i1,j1])*'diff(v([i1]),j1)$
(C19) show(tf)$
                                           I1 J1   d
(D19)                       KDELTA      (  ---   (V  ))
                                            I/J    dJ1     I1

Then we can use the property D D Forma =0, 

(C20) matchdeclare(I1,true);
(D20)                                DONE
(C21) defrule(grad, V([I1],[]),diff(FV([],[]),I1));
(D21)             GRAD : V([I1], []) -> DIFF(FV([], []), I1)
(C22) APPLYB1(tf,grad);
                     d
(D22)           (--- (FV([], [], I1))) KDELTA([I, J], [I1, J1])
                    dJ1
(C23) contract(canform(ev(ev(%,diff),kdelta)));
(D23)                                  0

Best wishes,
Valerij