<?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>quotient(..., Strategy => ...) -- Possible strategies are: Iterate, Linear, and Quotient</title> <link rel="stylesheet" type="text/css" href="../../../../Macaulay2/Style/doc.css"/> </head> <body> <table class="buttons"> <tr> <td><div><a href="_quotient_lp__Ideal_cm__Ideal_rp.html">next</a> | <a href="_quotient_lp..._cm_sp__Pair__Limit_sp_eq_gt_sp..._rp.html">previous</a> | <a href="_quotient_lp__Ideal_cm__Ideal_rp.html">forward</a> | <a href="_quotient_lp..._cm_sp__Pair__Limit_sp_eq_gt_sp..._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>quotient(..., Strategy => ...) -- Possible strategies are: Iterate, Linear, and Quotient</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>quotient(I,J,Strategy=>b)</tt></div> </dd></dl> </div> </li> <li><div class="single">Inputs:<ul><li><span><tt>b</tt>, <span>a <a href="___Symbol.html">symbol</a></span>, one of<tt> Iterate, Linear, Quotient</tt></span></li> </ul> </div> </li> </ul> </div> <div class="single"><h2>Description</h2> <div>Suppose that <tt>I</tt> is the image of a free module <tt>FI</tt> in a quotient module <tt>G</tt>, and <tt>J</tt> is the image of the free module <tt>FJ</tt> in <tt>G</tt>.<p/> <p/> The default is <tt>Strategy=>Quotient</tt>, which works as follows:<p/> compute the first components of the syzygies of <pre>map R++((dual FJ)**FI --> (dual FJ) ** G.</pre> <p/> If <tt>Strategy=>Iterate</tt> then quotient first computes the quotient <tt>I1</tt> by the first generator of <tt>J</tt>. It then checks whether this quotient already annihilates the second generator of <tt>J</tt> mod <tt>I</tt>. If so, it goes on to the third generator; else it intersects <tt>I1</tt> with the quotient of <tt>I</tt> by the second generator to produce a new <tt>I1</tt>. It then iterates this process, working through the generators one at a time.<p/> To use <tt>Strategy=>Linear</tt> the argument <tt>J</tt> must be a principal ideal, generated by a linear form. A change of variables is made so that this linear form becomes the last variable. Then a reverse lex Gröbner basis is used, and the quotient of the initial ideal by the last variable is computed combinatorially. This set of monomial is then lifted back to a set of generators for the quotient.<p/> For further information see for example Exercise 15.41 in Eisenbud's Commutative Algebra with a View Towards Algebraic Geometry.<p/> The following examples show timings for the different strategies.<p/> <tt>Strategy=>Iterate</tt> is sometimes faster for ideals with a small number of generators:<table class="examples"><tr><td><pre>i1 : n = 6 o1 = 6</pre> </td></tr> <tr><td><pre>i2 : S = ZZ/101[vars(0..n-1)];</pre> </td></tr> <tr><td><pre>i3 : i1 = monomialCurveIdeal(S, 1..n-1) 2 2 o3 = ideal (e - d*f, d*e - c*f, c*e - b*f, b*e - a*f, d - b*f, c*d - a*f, ------------------------------------------------------------------------ 2 2 b*d - a*e, c - a*e, b*c - a*d, b - a*c) o3 : Ideal of S</pre> </td></tr> <tr><td><pre>i4 : i2 = monomialCurveIdeal(S, 1..n-1) 2 2 o4 = ideal (e - d*f, d*e - c*f, c*e - b*f, b*e - a*f, d - b*f, c*d - a*f, ------------------------------------------------------------------------ 2 2 b*d - a*e, c - a*e, b*c - a*d, b - a*c) o4 : Ideal of S</pre> </td></tr> <tr><td><pre>i5 : j1 = ideal(map(S^1,S^n, (p,q)->S_q^5)) 5 5 5 5 5 5 o5 = ideal (a , b , c , d , e , f ) o5 : Ideal of S</pre> </td></tr> <tr><td><pre>i6 : j2 = ideal(map(S^1,S^n, (p,q)->S_q^5)) 5 5 5 5 5 5 o6 = ideal (a , b , c , d , e , f ) o6 : Ideal of S</pre> </td></tr> <tr><td><pre>i7 : time quotient(i1^3,j1^2,Strategy=>Iterate); -- used 0.470928 seconds o7 : Ideal of S</pre> </td></tr> <tr><td><pre>i8 : time quotient(i2^3,j2^2,Strategy=>Quotient); -- used 0.834873 seconds o8 : Ideal of S</pre> </td></tr> </table> <tt>Strategy=>Quotient</tt> is faster in other cases:<table class="examples"><tr><td><pre>i9 : S =ZZ/101[vars(0..4)];</pre> </td></tr> <tr><td><pre>i10 : i =ideal vars S; o10 : Ideal of S</pre> </td></tr> <tr><td><pre>i11 : j =ideal vars S; o11 : Ideal of S</pre> </td></tr> <tr><td><pre>i12 : i3 = i^3; i5 = i^5; o12 : Ideal of S o13 : Ideal of S</pre> </td></tr> <tr><td><pre>i14 : j3 = j^3; j5 = j^5; o14 : Ideal of S o15 : Ideal of S</pre> </td></tr> <tr><td><pre>i16 : time quotient(i5,i3,Strategy=>Iterate); -- used 0.018997 seconds o16 : Ideal of S</pre> </td></tr> <tr><td><pre>i17 : time quotient(j5,j3,Strategy=>Quotient); -- used 0.006999 seconds o17 : Ideal of S</pre> </td></tr> </table> </div> </div> <h2>Further information</h2> <ul><li><span>Default value: <a href="___Iterate.html" title="a Strategy option value for saturate">Iterate</a></span></li> <li><span>Function: <span><a href="_quotient.html" title="quotient or division">quotient</a> -- quotient or division</span></span></li> <li><span>Option name: <span><a href="___Strategy.html" title="name for an optional argument">Strategy</a> -- name for an optional argument</span></span></li> </ul> </div> </body> </html>