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,

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.
>

```

• Prev by Date: Re: Part Function
• Next by Date: Re: Part Function
• Previous by thread: How does TensorReduce use assumptions?
• Next by thread: Re: How does TensorReduce use assumptions?