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