Re: How does TensorReduce use assumptions?
- To: mathgroup at smc.vnet.net
- Subject: [mg132260] Re: How does TensorReduce use assumptions?
- From: Jose Martin-Garcia <jose at wolfram.com>
- Date: Fri, 24 Jan 2014 04:21:58 -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>
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>
- How does TensorReduce use assumptions?