<?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>basis -- basis of all or part of a module or ring</title> <link rel="stylesheet" type="text/css" href="../../../../Macaulay2/Style/doc.css"/> </head> <body> <table class="buttons"> <tr> <td><div><a href="_exterior_sppower_spof_spa_spmodule.html">next</a> | <a href="___Hilbert_spfunctions_spand_spfree_spresolutions.html">previous</a> | <a href="_exterior_sppower_spof_spa_spmodule.html">forward</a> | <a href="___Hilbert_spfunctions_spand_spfree_spresolutions.html">backward</a> | <a href="_modules.html">up</a> | <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> <div><a href="index.html" title="">Macaulay2Doc</a> > <a href="_modules.html" title="">modules</a> > <a href="_basis.html" title="basis of all or part of a module or ring">basis</a></div> <hr/> <div><h1>basis -- basis of all or part of a module or ring</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>basis(i,M)</tt></div> </dd></dl> </div> </li> <li><div class="single">Inputs:<ul><li><span><tt>i</tt>, a list of integers to serve as a degree or multidegree</span></li> <li><span><tt>M</tt>, <span>a <a href="___Module.html">module</a></span>, <span>a <a href="___Ring.html">ring</a></span>, or <span>an <a href="___Ideal.html">ideal</a></span>. If <tt>M</tt> is a ring, it is replaced by the free module of rank 1. If <tt>M</tt> is an ideal, it is replaced by its underlying module over the ring it is contained in.</span></li> </ul> </div> </li> <li><div class="single">Outputs:<ul><li><span><span>a <a href="___Matrix.html">matrix</a></span>, a map from a free module over the ring specified by the <a href="___Source__Ring.html" title="name for an optional argument">SourceRing</a> option, or over the ring of <tt>M</tt> if the option was not used, to <tt>M</tt> which sends the basis elements of the free module to a basis (over the coefficient field) of the degree <tt>i</tt> part of <tt>M</tt></span></li> </ul> </div> </li> <li><div class="single"><a href="_using_spfunctions_spwith_spoptional_spinputs.html">Optional inputs</a>:<ul><li><span><tt>Limit => </tt><span><span>an <a href="___Z__Z.html">integer</a></span>, <span>default value -1</span>, the maximum number of basis elements to find</span></span></li> <li><span><tt>Truncate => </tt><span><span>a <a href="___Boolean.html">Boolean value</a></span>, <span>default value false</span>, whether to add additional generators to the basis sufficient to generate the submodule of <tt>M</tt> generated by all elements of degree at least <tt>i</tt>. If true, the degree rank must be equal to 1. This option is intended mainly for internal use by <a href="_truncate.html" title="truncate the module at a specified degree">truncate</a>.</span></span></li> <li><span><tt>Variables => </tt><span><span>a <a href="___List.html">list</a></span>, <span>default value null</span>, a list of variables; only basis elements involving only these variables will be reported</span></span></li> <li><span><tt>SourceRing => </tt><span><span>a <a href="___Ring.html">ring</a></span>, <span>default value null</span>, the ring to use as the ring of the source of the map produced; by default, this is the same as the ring of <tt>M</tt>.</span></span></li> </ul> </div> </li> </ul> </div> <div class="single"><h2>Description</h2> <div><p>The degree <tt>i</tt> is a multi-degree, represented as a list of integers. If the degree rank is 1, then <tt>i</tt> may be provided as an integer.</p> <p>The algorithm uses the heft vector of the ring, and cannot proceed without one; see <a href="_heft_spvectors.html" title="">heft vectors</a>.</p> <table class="examples"><tr><td><pre>i1 : R = ZZ/101[a..c];</pre> </td></tr> <tr><td><pre>i2 : basis(2, R) o2 = | a2 ab ac b2 bc c2 | 1 6 o2 : Matrix R <--- R</pre> </td></tr> <tr><td><pre>i3 : M = ideal(a,b,c)/ideal(a^2,b^2,c^2) o3 = subquotient (| a b c |, | a2 b2 c2 |) 1 o3 : R-module, subquotient of R</pre> </td></tr> <tr><td><pre>i4 : f = basis(2,M) o4 = {1} | b c 0 | {1} | 0 0 c | {1} | 0 0 0 | o4 : Matrix</pre> </td></tr> </table> <p>Notice that the matrix of <tt>f</tt> above is expressed in terms of the generators of <tt>M</tt>. The reason is that the module <tt>M</tt> is the target of the map <tt>f</tt>, and matrices of maps such as <tt>f</tt> are always expressed in terms of the generators of the source and target.</p> <table class="examples"><tr><td><pre>i5 : target f o5 = subquotient (| a b c |, | a2 b2 c2 |) 1 o5 : R-module, subquotient of R</pre> </td></tr> </table> <p>The command <a href="_super.html" title="get the ambient module">super</a> is useful for rewriting <tt>f</tt> in terms of the generators of module of which <tt>M</tt> is a submodule.</p> <table class="examples"><tr><td><pre>i6 : super f o6 = | ab ac bc | o6 : Matrix</pre> </td></tr> </table> <p>When a ring is multi-graded, we specify the degree as a list of integers.</p> <table class="examples"><tr><td><pre>i7 : S = ZZ/101[x,y,z,Degrees=>{{1,3},{1,4},{1,-1}}];</pre> </td></tr> <tr><td><pre>i8 : basis({7,24}, S) o8 = | x4y3 | 1 1 o8 : Matrix S <--- S</pre> </td></tr> </table> <p>Here is an example showing the use of the <a href="___Source__Ring.html" title="name for an optional argument">SourceRing</a> option. Using a ring of different degree length as the source ring is currently not well supported, because the graded free modules may not lift.</p> <table class="examples"><tr><td><pre>i9 : R = QQ[x]/x^6;</pre> </td></tr> <tr><td><pre>i10 : f = basis(R,SourceRing => ambient R) o10 = | 1 x x2 x3 x4 x5 | 1 6 o10 : Matrix R <--- (QQ[x])</pre> </td></tr> <tr><td><pre>i11 : coimage f o11 = cokernel {0} | x 0 0 0 0 0 | {1} | -1 x 0 0 0 0 | {2} | 0 -1 x 0 0 0 | {3} | 0 0 -1 x 0 0 | {4} | 0 0 0 -1 x 0 | {5} | 0 0 0 0 -1 x | 6 o11 : QQ[x]-module, quotient of (QQ[x])</pre> </td></tr> <tr><td><pre>i12 : kernel f o12 = image {0} | x 0 0 0 0 0 | {1} | -1 x 0 0 0 0 | {2} | 0 -1 x 0 0 0 | {3} | 0 0 -1 x 0 0 | {4} | 0 0 0 -1 x 0 | {5} | 0 0 0 0 -1 x | 6 o12 : QQ[x]-module, submodule of (QQ[x])</pre> </td></tr> <tr><td><pre>i13 : g = basis(R,SourceRing => QQ) o13 = | 1 x x2 x3 x4 x5 | 1 6 o13 : Matrix R <--- QQ</pre> </td></tr> <tr><td><pre>i14 : coimage g 6 o14 = QQ o14 : QQ-module, free</pre> </td></tr> <tr><td><pre>i15 : kernel g o15 = image 0 6 o15 : QQ-module, submodule of QQ</pre> </td></tr> </table> <p>In some situations it may be desirable to retain the degrees of the generators, so a ring such as <tt>QQ[]</tt>, which has degree length 1, can serve the purpose.</p> <table class="examples"><tr><td><pre>i16 : degrees source g o16 = {{}, {}, {}, {}, {}, {}} o16 : List</pre> </td></tr> <tr><td><pre>i17 : A = QQ[];</pre> </td></tr> <tr><td><pre>i18 : h = basis(R,SourceRing => A) o18 = | 1 x x2 x3 x4 x5 | 1 6 o18 : Matrix R <--- A</pre> </td></tr> <tr><td><pre>i19 : degrees source h o19 = {{0}, {1}, {2}, {3}, {4}, {5}} o19 : List</pre> </td></tr> <tr><td><pre>i20 : coimage h 6 o20 = A o20 : A-module, free, degrees {0, 1, 2, 3, 4, 5}</pre> </td></tr> <tr><td><pre>i21 : kernel h o21 = image 0 6 o21 : A-module, submodule of A</pre> </td></tr> </table> <div><h2>Synopsis</h2> <ul><li><div class="list"><dl class="element"><dt class="heading">Usage: </dt><dd class="value"><div><tt>basis M</tt></div> </dd></dl> </div> </li> <li>Inputs:<ul><li><span><tt>M</tt>, <span>a <a href="___Module.html">module</a></span> or <span>a <a href="___Ring.html">ring</a></span></span></li> </ul> </li> <li>Outputs:<ul><li><span>a map from a free module to <tt>M</tt> which sends the basis elements to a basis, over the coefficient field, of <tt>M</tt></span></li> </ul> </li> </ul> <table class="examples"><tr><td><pre>i22 : R = QQ[x,y,z]/(x^2,y^3,z^5) o22 = R o22 : QuotientRing</pre> </td></tr> <tr><td><pre>i23 : basis R o23 = | 1 x xy xy2 xy2z xy2z2 xy2z3 xy2z4 xyz xyz2 xyz3 xyz4 xz xz2 xz3 xz4 y ----------------------------------------------------------------------- y2 y2z y2z2 y2z3 y2z4 yz yz2 yz3 yz4 z z2 z3 z4 | 1 30 o23 : Matrix R <--- R</pre> </td></tr> </table> </div> <div><h2>Synopsis</h2> <ul><li><div class="list"><dl class="element"><dt class="heading">Usage: </dt><dd class="value"><div><tt>basis(lo,hi,M)</tt></div> </dd></dl> </div> </li> <li>Inputs:<ul><li><span><tt>M</tt>, <span>a <a href="___Module.html">module</a></span>, <span>a <a href="___Ring.html">ring</a></span>, or <span>an <a href="___Ideal.html">ideal</a></span></span></li> <li><span><tt>lo</tt>, <span>an <a href="___Z__Z.html">integer</a></span>, <span>a <a href="___List.html">list</a></span>, or <span>an <a href="___Infinite__Number.html">infinite number</a></span></span></li> <li><span><tt>hi</tt>, <span>an <a href="___Z__Z.html">integer</a></span>, <span>a <a href="___List.html">list</a></span>, or <span>an <a href="___Infinite__Number.html">infinite number</a></span></span></li> </ul> </li> <li>Outputs:<ul><li><span>a map from a free module to <tt>M</tt> which sends the basis elements to a basis, over the ground field, of the part of <tt>M</tt> spanned by elements of degrees between <tt>lo</tt> and <tt>hi</tt>. The degree rank must be 1.</span></li> </ul> </li> </ul> <table class="examples"><tr><td><pre>i24 : R = QQ[x,y,z]/(x^3,y^2,z^5);</pre> </td></tr> <tr><td><pre>i25 : basis R o25 = | 1 x x2 x2y x2yz x2yz2 x2yz3 x2yz4 x2z x2z2 x2z3 x2z4 xy xyz xyz2 xyz3 ----------------------------------------------------------------------- xyz4 xz xz2 xz3 xz4 y yz yz2 yz3 yz4 z z2 z3 z4 | 1 30 o25 : Matrix R <--- R</pre> </td></tr> <tr><td><pre>i26 : basis(-infinity,4,R) o26 = | 1 x x2 x2y x2yz x2z x2z2 xy xyz xyz2 xz xz2 xz3 y yz yz2 yz3 z z2 z3 ----------------------------------------------------------------------- z4 | 1 21 o26 : Matrix R <--- R</pre> </td></tr> <tr><td><pre>i27 : basis(5,infinity,R) o27 = | x2yz2 x2yz3 x2yz4 x2z3 x2z4 xyz3 xyz4 xz4 yz4 | 1 9 o27 : Matrix R <--- R</pre> </td></tr> <tr><td><pre>i28 : basis(2,4,R) o28 = | x2 x2y x2yz x2z x2z2 xy xyz xyz2 xz xz2 xz3 yz yz2 yz3 z2 z3 z4 | 1 17 o28 : Matrix R <--- R</pre> </td></tr> </table> </div> </div> </div> <div class="waystouse"><h2>Ways to use <tt>basis</tt> :</h2> <ul><li>basis(Ideal)</li> <li>basis(InfiniteNumber,InfiniteNumber,Ideal)</li> <li>basis(InfiniteNumber,InfiniteNumber,Module)</li> <li>basis(InfiniteNumber,InfiniteNumber,Ring)</li> <li>basis(InfiniteNumber,List,Ideal)</li> <li>basis(InfiniteNumber,List,Module)</li> <li>basis(InfiniteNumber,List,Ring)</li> <li>basis(InfiniteNumber,ZZ,Ideal)</li> <li>basis(InfiniteNumber,ZZ,Module)</li> <li>basis(InfiniteNumber,ZZ,Ring)</li> <li>basis(List,Ideal)</li> <li>basis(List,InfiniteNumber,Ideal)</li> <li>basis(List,InfiniteNumber,Module)</li> <li>basis(List,InfiniteNumber,Ring)</li> <li>basis(List,List,Ideal)</li> <li>basis(List,List,Module)</li> <li>basis(List,List,Ring)</li> <li>basis(List,Module)</li> <li>basis(List,Ring)</li> <li>basis(List,ZZ,Ideal)</li> <li>basis(List,ZZ,Ring)</li> <li>basis(Module)</li> <li>basis(Ring)</li> <li>basis(ZZ,Ideal)</li> <li>basis(ZZ,InfiniteNumber,Ideal)</li> <li>basis(ZZ,InfiniteNumber,Module)</li> <li>basis(ZZ,InfiniteNumber,Ring)</li> <li>basis(ZZ,List,Ideal)</li> <li>basis(ZZ,List,Ring)</li> <li>basis(ZZ,Module)</li> <li>basis(ZZ,Ring)</li> <li>basis(ZZ,ZZ,Ideal)</li> <li>basis(ZZ,ZZ,Module)</li> <li>basis(ZZ,ZZ,Ring)</li> </ul> </div> </div> </body> </html>