Re: How does TensorReduce use assumptions?

*To*: mathgroup at smc.vnet.net*Subject*: [mg132258] Re: How does TensorReduce use assumptions?*From*: Yi Wang <tririverwangyi at gmail.com>*Date*: Fri, 24 Jan 2014 04:21:18 -0500 (EST)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*Delivered-to*: l-mathgroup@wolfram.com*Delivered-to*: mathgroup-outx@smc.vnet.net*Delivered-to*: mathgroup-newsendx@smc.vnet.net*References*: <20140123083525.A574969EB@smc.vnet.net>

Dear Jose, Thank you very much for your reply! With your help, now I can get TensorReduce work in this way. Previously I didn't notice TensorRank and that's why I had the problem. BTW, it also took me some time to notice that TensorSymmetry[f] ^= Symmetric[All] doesn't work. Explicit slots like Symmetric[{1,2}] needs to be given. After solving this problem, everything works great! Best, Yi On Thu, Jan 23, 2014 at 2:08 PM, Jose Martin-Garcia <jose at wolfram.com>wrote: > Hi, > > The documentation statement on TensorDimensions is correct, but some > operations need full information (dimensions, rank and symmetry). For > example let us assume that f does not have any symmetry, > > In[1]:= TensorDimensions[f[g__]] ^:= d& /@ {g}; > TensorRank[f[g__]] ^:= Length[{g}]; > TensorSymmetry[f[g__]] ^:= {}; > > Then you get the expected > > In[4]:= Assuming[t \[Element] Arrays[{d, d}, Antisymmetric[All]], > TensorReduce@ TensorContract[t \[TensorProduct] f[DN, DN], > {{1, 4}}]] > Out[4]= - TensorContract[t \[TensorProduct] f[DN, DN], {{2, 4}}] > > Regards, > Jose. > > ----- Original Message ----- > > > From: "Yi Wang" <tririverwangyi at gmail.com> > > To: mathgroup at smc.vnet.net > > Sent: Thursday, January 23, 2014 2:35:25 AM > > Subject: How does TensorReduce use assumptions? > > > I would like to use TensorReduce by assuming that certain patterns of > > functions are tensors. From documentation of TensorReduce: > > > "If TensorDimensions[ten] does not return a list of dimensions, then the > > expression ten is returned unchanged." > > > I would have inferred from above that if I modify TensorDimensions[ten], > > TensorReduce should work. Thus I did > > > Unprotect[TensorDimensions]; > > TensorDimensions[f_[g__]] := d & /@ {g}; > > Protect[TensorDimensions]; > > > Assuming[ t \[Element] Arrays[{d, d}, Antisymmetric[All]] , > > TensorReduce @ TensorContract[ t\[TensorProduct]f[DN, DN], {1, 4}]] > > > However, this doesn't work. i.e. TensorReduce does nothing, and the > result is > > > TensorContract[ t\[TensorProduct]f[DN, DN], {{1, 4}}] > > > To compare, having defined > > > Assuming[ t \[Element] Arrays[{d, d}, Antisymmetric[All]] && > > f[DN, DN] \[Element] Arrays[{d, d}], > > TensorReduce @ TensorContract[ t\[TensorProduct]f[DN, DN], {1, 4}]] > > > - TensorContract[ t\[TensorProduct]f[DN, DN], {{2, 4}}] > > > the result is indeed simplified as desired: > > > I also tried to modify TensorSymmetry, but without luck either. > > > I'd like to understand what are the assumptions that TensorReduce really > > uses. Is there a way that I can work with TensorReduce as above, with > > pattern like declaration of tensors? > > > PS: Currently I generate a list of assumptions of f_[g__] using Cases, > and > > put those assumptions together in Assuming. This makes the code slow and > > ugly. >

**References**:**How does TensorReduce use assumptions?***From:*Yi Wang <tririverwangyi@gmail.com>