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.

• Prev by Date: Re: Part Function
• Next by Date: Need Help With Locator in a Manipulate
• Previous by thread: Re: How does TensorReduce use assumptions?
• Next by thread: Need Help With Locator in a Manipulate