<?xml version="1.0" encoding="utf-8" ?> <!-- for emacs: -*- coding: utf-8 -*- --> <!-- Apache may like this line in the file .htaccess: AddCharset utf-8 .html --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg-flat.dtd" > <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head><title>tensor(Ring,Ring) -- tensor product</title> <link rel="stylesheet" type="text/css" href="../../../../Macaulay2/Style/doc.css"/> </head> <body> <table class="buttons"> <tr> <td><div><a href="_tensor_lp__Ring_cm__Ring__Map_cm__Matrix_rp.html">next</a> | <a href="_tensor_lp__Module_cm__Module_rp.html">previous</a> | <a href="_tensor_lp__Ring_cm__Ring__Map_cm__Matrix_rp.html">forward</a> | <a href="_tensor_lp__Module_cm__Module_rp.html">backward</a> | up | <a href="index.html">top</a> | <a href="master.html">index</a> | <a href="toc.html">toc</a> | <a href="http://www.math.uiuc.edu/Macaulay2/">Macaulay2 web site</a></div> </td> </tr> </table> <hr/> <div><h1>tensor(Ring,Ring) -- tensor product</h1> <div class="single"><h2>Synopsis</h2> <ul><li><div class="list"><dl class="element"><dt class="heading">Usage: </dt><dd class="value"><div><tt>tensor(A,B)</tt></div> </dd></dl> </div> </li> <li><span>Function: <a href="_tensor.html" title="tensor product">tensor</a></span></li> <li><div class="single">Inputs:<ul><li><span><tt>A</tt>, <span>a <a href="___Ring.html">ring</a></span></span></li> <li><span><tt>B</tt>, <span>a <a href="___Ring.html">ring</a></span></span></li> </ul> </div> </li> <li><div class="single">Outputs:<ul><li><span><span>a <a href="___Ring.html">ring</a></span>, the tensor product of A with B</span></li> </ul> </div> </li> <li><div class="single"><a href="_using_spfunctions_spwith_spoptional_spinputs.html">Optional inputs</a>:<ul><li><span><tt>DegreeRank => </tt><span><span>an <a href="___Z__Z.html">integer</a></span>, <span>default value null</span>, see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., DegreeRank => ...)</a></span></span></li> <li><span><tt>Degrees => </tt><span><span>a <a href="___List.html">list</a></span>, <span>default value null</span>, see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., Degrees => ...)</a></span></span></li> <li><span><tt>Inverses => </tt><span><span>a <a href="___Boolean.html">Boolean value</a></span>, <span>default value false</span>, see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., Inverses => ...)</a></span></span></li> <li><span><tt>Global => </tt><span><span>a <a href="___Boolean.html">Boolean value</a></span>, <span>default value true</span>, see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., Global => ...)</a></span></span></li> <li><span><tt>Local => </tt><span><span>a <a href="___Boolean.html">Boolean value</a></span>, <span>default value false</span>, see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., Local => ...)</a></span></span></li> <li><span><tt>MonomialOrder => </tt><span><span>a <a href="___List.html">list</a></span>, <span>default value null</span>, see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., MonomialOrder => ...)</a></span></span></li> <li><span><tt>MonomialSize => </tt><span><span>an <a href="___Z__Z.html">integer</a></span>, <span>default value 32</span>, see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., MonomialSize => ...)</a></span></span></li> <li><span><tt>SkewCommutative => </tt><span><span>default value {}</span>, this option is ignored</span></span></li> <li><span><tt>Variables => </tt><span><span>default value null</span>, see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., Variables => ...)</a></span></span></li> <li><span><tt>VariableBaseName => </tt><span><span>a <a href="___Symbol.html">symbol</a></span>, <span>default value null</span>, see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., VariableBaseName => ...)</a></span></span></li> <li><span><tt>Weights => </tt><span><span>a <a href="___List.html">list</a></span>, <span>default value {}</span>, ignored by this routine</span></span></li> <li><span><tt>WeylAlgebra => </tt><span><span>a <a href="___List.html">list</a></span>, <span>default value {}</span>, ignored by this routine</span></span></li> <li><span><tt>Heft => </tt><span><span>a <a href="___List.html">list</a></span>, <span>default value null</span>, see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., Heft => ...)</a></span></span></li> <li><span><tt>Join => </tt><span><span>a <a href="___Boolean.html">Boolean value</a></span>, <span>default value null</span>, overrides the corresponding option in <tt>A</tt>; see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., Join => ...)</a></span></span></li> <li><span><tt>DegreeMap => </tt><span><span>a <a href="___Boolean.html">Boolean value</a></span>, <span>default value null</span>, overrides the corresponding option in <tt>A</tt>; see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., DegreeMap => ...)</a></span></span></li> <li><span><tt>DegreeLift => </tt><span><span>a <a href="___Boolean.html">Boolean value</a></span>, <span>default value null</span>, overrides the corresponding option in <tt>A</tt>; see <a href="_monoid.html" title="make or retrieve a monoid">monoid(..., DegreeLift => ...)</a></span></span></li> </ul> </div> </li> </ul> </div> <div class="single"><h2>Description</h2> <div><p>This is the same as <tt>A ** B</tt> except that options are allowed, see <a href="___Monoid_sp_st_st_sp__Monoid.html" title="tensor product of monoids">Monoid ** Monoid</a> and <a href="___Ring_sp_st_st_sp__Ring.html" title="tensor product">Ring ** Ring</a>. This method allows many of the options available for monoids, see <a href="_monoid.html" title="make or retrieve a monoid">monoid</a> for details. This method essentially combines the variables of <tt>A</tt> and <tt>B</tt> into one monoid or ring.</p> <table class="examples"><tr><td><pre>i1 : kk = ZZ/101 o1 = kk o1 : QuotientRing</pre> </td></tr> <tr><td><pre>i2 : A = kk[a,b] o2 = A o2 : PolynomialRing</pre> </td></tr> <tr><td><pre>i3 : B = kk[c,d,e] o3 = B o3 : PolynomialRing</pre> </td></tr> </table> <p>The simplest version is to simply use <a href="__st_st.html" title="a binary operator, usually used for tensor product or Cartesian product">**</a>:</p> <table class="examples"><tr><td><pre>i4 : describe(A**B) o4 = kk[a..e, Degrees => {2:{1}, 3:{0}}, Heft => {2:1}, MonomialOrder => {MonomialSize => 32}, DegreeRank => 2] {0} {1} {GRevLex => {2:1} } {Position => Up } {GRevLex => {3:1} }</pre> </td></tr> </table> <p/> If you wish to change the variable names:<table class="examples"><tr><td><pre>i5 : describe tensor(A,B,VariableBaseName=>p) o5 = kk[p , p , p , p , p , Degrees => {2:{1}, 3:{0}}, Heft => {2:1}, MonomialOrder => {MonomialSize => 32}, DegreeRank => 2] 0 1 2 3 4 {0} {1} {GRevLex => {2:1} } {Position => Up } {GRevLex => {3:1} }</pre> </td></tr> <tr><td><pre>i6 : describe tensor(A,B,Variables=>{a1,a2,b1,b2,b3}) o6 = kk[a1, a2, b1, b2, b3, Degrees => {2:{1}, 3:{0}}, Heft => {2:1}, MonomialOrder => {MonomialSize => 32}, DegreeRank => 2] {0} {1} {GRevLex => {2:1} } {Position => Up } {GRevLex => {3:1} }</pre> </td></tr> </table> <p/> The tensor product of two singly graded rings is bigraded. Sometimes you want a singly graded ring. Here is one way to get it:<table class="examples"><tr><td><pre>i7 : describe (C = tensor(A,B,DegreeRank=>1,Degrees=>{5:1})) o7 = kk[a..e, Degrees => {5:1}, Heft => {1}, MonomialOrder => {MonomialSize => 32}, DegreeRank => 1] {GRevLex => {2:1} } {Position => Up } {GRevLex => {3:1} }</pre> </td></tr> <tr><td><pre>i8 : degreeLength C o8 = 1</pre> </td></tr> <tr><td><pre>i9 : degreesRing C o9 = ZZ[T] o9 : PolynomialRing</pre> </td></tr> </table> <p/> Packing monomials into smaller space is more efficient, but less flexible. The default is 32 bits, so if you want to pack them into 8 bit exponents, use:<table class="examples"><tr><td><pre>i10 : describe tensor(A,B,MonomialSize=>8) o10 = kk[a..e, Degrees => {2:{1}, 3:{0}}, Heft => {2:1}, MonomialOrder => {MonomialSize => 8 }, DegreeRank => 2] {0} {1} {MonomialSize => 32} {GRevLex => {2:1} } {Position => Up } {GRevLex => {3:1} }</pre> </td></tr> </table> <p/> The default monomial order for tensor products is a product order. Sometimes other orders are more desirable, e.g. GRevLex, or an elimination order:<table class="examples"><tr><td><pre>i11 : describe (C = tensor(A,B,MonomialOrder=>Eliminate numgens A)) o11 = kk[a..e, Degrees => {2:{1}, 3:{0}}, Heft => {2:1}, MonomialOrder => {MonomialSize => 32}, DegreeRank => 2] {0} {1} {Weights => {2:1} } {GRevLex => {5:1} } {Position => Up }</pre> </td></tr> <tr><td><pre>i12 : describe (C = tensor(A,B,MonomialOrder=>GRevLex)) o12 = kk[a..e, Degrees => {2:{1}, 3:{0}}, Heft => {2:1}, MonomialOrder => {0} {1} ----------------------------------------------------------------------- {MonomialSize => 32}, DegreeRank => 2] {GRevLex => {5:1} } {Position => Up }</pre> </td></tr> </table> <p>If you tensor two skew-commutative rings, (or one skew commutative ring with a commutative polynomial ring), then all of the skew-commuting variables skew commute with each other:</p> <table class="examples"><tr><td><pre>i13 : As = kk[a,b,SkewCommutative=>true] o13 = As o13 : PolynomialRing</pre> </td></tr> <tr><td><pre>i14 : D = kk[c,d,e,SkewCommutative=>true] o14 = D o14 : PolynomialRing</pre> </td></tr> <tr><td><pre>i15 : E = tensor(As,D) o15 = E o15 : PolynomialRing</pre> </td></tr> <tr><td><pre>i16 : describe E o16 = kk[a..e, Degrees => {2:{1}, 3:{0}}, Heft => {2:1}, MonomialOrder => {MonomialSize => 32}, DegreeRank => 2, SkewCommutative => {0, 1, 2, 3, 4}] {0} {1} {GRevLex => {2:1} } {Position => Up } {GRevLex => {3:1} }</pre> </td></tr> <tr><td><pre>i17 : c*a o17 = -a*c o17 : E</pre> </td></tr> </table> <p>Similarly, tensoring two Weyl algebras (or one and a polynomial ring) produces a Weyl algebra with both sets of non-commuting pairs.</p> <table class="examples"><tr><td><pre>i18 : E = kk[x,Dx,WeylAlgebra=>{x=>Dx}] o18 = E o18 : PolynomialRing</pre> </td></tr> <tr><td><pre>i19 : tensor(E,E,Variables=>{x,Dx,y,Dy}) o19 = kk[x, Dx, y, Dy] o19 : PolynomialRing</pre> </td></tr> <tr><td><pre>i20 : describe oo o20 = kk[x, Dx, y, Dy, Degrees => {2:{1}, 2:{0}}, Heft => {2:1}, MonomialOrder => {MonomialSize => 32}, DegreeRank => 2, WeylAlgebra => {0 => 1, 2 => 3}] {0} {1} {GRevLex => {2:1} } {Position => Up } {GRevLex => {2:1} }</pre> </td></tr> </table> <p>Two polynomial rings must have the same coefficient ring, otherwise an error is issued. Currently, there is no way to specify other rings over which to define the tensor product.</p> <table class="examples"><tr><td><pre>i21 : A = ZZ/101[a,b] o21 = A o21 : PolynomialRing</pre> </td></tr> <tr><td><pre>i22 : B = A[x,y] o22 = B o22 : PolynomialRing</pre> </td></tr> <tr><td><pre>i23 : C = tensor(B,B,Variables=>{x1,y1,x2,y2}) o23 = C o23 : PolynomialRing</pre> </td></tr> <tr><td><pre>i24 : describe C o24 = A[x1, y1, x2, y2, Degrees => {2:{1}, 2:{0}}, Heft => {2:1}, MonomialOrder => {MonomialSize => 32}, DegreeRank => 2] {0} {1} {GRevLex => {2:1} } {Position => Up } {GRevLex => {2:1} }</pre> </td></tr> </table> The flat monoid with the all variables visible, including those from the base ring, can be obtained as follows.<table class="examples"><tr><td><pre>i25 : C.FlatMonoid o25 = [x1, y1, x2, y2, a..b, Degrees => {2:{1}, 2:{0}, 2:{0}}, Heft => {3:1}, MonomialOrder => {MonomialSize => 32 }, DegreeRank => 3] {0} {1} {0} {GRevLex => {2:1} } {0} {0} {1} {Position => Up } {2:(GRevLex => {1, 1})} o25 : GeneralOrderedMonoid</pre> </td></tr> </table> </div> </div> <div class="single"><h2>Caveat</h2> <div>Not all of the options for monoid are useful here. Some are silently ignored.</div> </div> <div class="single"><h2>See also</h2> <ul><li><span><a href="_describe.html" title="real description">describe</a> -- real description</span></li> <li><span><a href="_degrees__Ring.html" title="the ring of degrees">degreesRing</a> -- the ring of degrees</span></li> <li><span><a href="_degree__Length.html" title="the number of degrees">degreeLength</a> -- the number of degrees</span></li> <li><span><a href="__st_st.html" title="a binary operator, usually used for tensor product or Cartesian product">**</a> -- a binary operator, usually used for tensor product or Cartesian product</span></li> <li><span><a href="___Flat__Monoid.html" title="">FlatMonoid</a></span></li> </ul> </div> </div> </body> </html>