Valery,
COMPONENTS did exactly what you told it to do. Spell it out:
(C7) (m([],[j])*l([j],[])*p([i],[]))*(m([],[j])*l([j],[])*p([j],[]));
2 2
(D7) m ([], [j]) p([i], []) l ([j], []) p([j], [])
What you are really asking COMPONENTS to do is to uniquely rename bound
indices every time a substitution is being made.
(C16)
RENAME(m([],[j])*l([j],[])*p([i],[]),1)*RENAME(m([],[j])*l([j],[])*p([j],[])
,2);
(D16) m([], [%1]) m([], [%2]) l([%1], []) l([%2], []) p([%2], []) p([i], [])
Do you think COMPONENTS should be responsible for this?
Viktor
-----Original Message-----
From: Valery Pipin [mailto:pip at iszf]
Sent: Tuesday, May 18, 2004 6:22 AM
To: maxima@www.ma.utexas.edu
Cc: Viktor T. Toth
Subject: components() is still buggy
The following example illustrates that components() should not be used
if you have contractions inside the tensor definition
(%i1) load(itensor);
(%o1) /usr/share/maxima/5.9.1/share/tensor/itensor.lisp
(%i2) components(f([i],[]),m([],[j])*l([j],[])*p([i],[]));
(%o2) DONE
(%i3) f([i],[])*f([j],[]);
2 2
(%o3) m ([], [j]) p([i], []) l ([j], []) p([j], [])
which is obviously wrong
Valery