Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 5e1854624d3bc613bdd0dd13d1ef9ac7 > files > 1827

gap-system-4.4.12-5mdv2010.0.i586.rpm

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (HAPprime Datatypes) - Chapter 10: General Functions</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
</head>
<body>


<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chap8.html">8</a>  <a href="chap9.html">9</a>  <a href="chap10.html">10</a>  <a href="chapInd.html">Ind</a>  </div>

<div class="chlinkprevnexttop">&nbsp;<a href="chap0.html">Top of Book</a>&nbsp;  &nbsp;<a href="chap9.html">Previous Chapter</a>&nbsp;  &nbsp;<a href="chapInd.html">Next Chapter</a>&nbsp;  </div>

<p><a id="X7B65E0C37AAB6066" name="X7B65E0C37AAB6066"></a></p>
<div class="ChapSects"><a href="chap10.html#X7B65E0C37AAB6066">10 <span class="Heading">General Functions</span></a>
<div class="ContSect"><span class="nocss">&nbsp;</span><a href="chap10.html#X812CCAB278643A59">10.1 <span class="Heading">Matrices</span></a>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X845EA1B28618D9A7">10.1-1 SumIntersectionMatDestructive</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X8359E68C7F38BA5F">10.1-2 SolutionMat</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X872D9F5D7ED6F4AA">10.1-3 IsSameSubspace</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X789478557955E1C3">10.1-4 PrintDimensionsMat</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X8080767383F9EF31">10.1-5 <span class="Heading">Example: matrices and vector spaces</span></a>
</span>
</div>
<div class="ContSect"><span class="nocss">&nbsp;</span><a href="chap10.html#X826D8334845549EC">10.2 <span class="Heading">Polynomials</span></a>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X7E8B84388516792D">10.2-1 TermsOfPolynomial</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X82862FA1817C7767">10.2-2 IsMonomial</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X7A603BCA83895309">10.2-3 UnivariateMonomialsOfMonomial</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X7DE6473B7AE6EC7F">10.2-4 IndeterminateAndExponentOfUnivariateMonomial</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X86FFC6697CAF53B8">10.2-5 IndeterminatesOfPolynomial</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X87DE84AC7B62DC5C">10.2-6 <span class="Heading">ReduceIdeal</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X84E9467E84243B77">10.2-7 ReducedPolynomialRingPresentation</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X7F8D0B27815DDA6B">10.2-8 <span class="Heading">Example: monomials, polynomials and ring presentations</span></a>
</span>
</div>
<div class="ContSect"><span class="nocss">&nbsp;</span><a href="chap10.html#X840A7A5D7AE407F2">10.3 <span class="Heading">Singular</span></a>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X783EE9057FE65731">10.3-1 SingularSetNormalFormIdeal</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X7E6A0D647D39110B">10.3-2 SingularPolynomialNormalForm</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X804568497F686594">10.3-3 SingularGroebnerBasis</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X7FB57C4F7D3164E6">10.3-4 SingularReducedGroebnerBasis</a></span>
</div>
<div class="ContSect"><span class="nocss">&nbsp;</span><a href="chap10.html#X8716635F7951801B">10.4 <span class="Heading">Groups</span></a>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap10.html#X7FD16926859DD49B">10.4-1 <span class="Heading">HallSeniorNumber</span></a>
</span>
</div>
</div>

<h3>10 <span class="Heading">General Functions</span></h3>

<p>Some of the functions provided by <strong class="pkg">HAPprime</strong> are not specifically aimed at homological algebra or extending the <strong class="pkg">HAP</strong> package. The functions in this chapter, which are used internally by <strong class="pkg">HAPprime</strong> extend some of the standard <strong class="pkg">GAP</strong> functions and datatypes.</p>

<p><a id="X812CCAB278643A59" name="X812CCAB278643A59"></a></p>

<h4>10.1 <span class="Heading">Matrices</span></h4>

<p>For details of the standard <strong class="pkg">GAP</strong> vector and matrix functions, see <a href="../../../../../gap4r4/doc/htm/tut/CHAP003.htm#SECT008"><b>Tutorial: matrices</b></a> and <a href="../../../../../gap4r4/doc/htm/ref/CHAP024.htm"><b>Reference: Matrices</b></a> in the <strong class="pkg">GAP</strong> tutorial and reference manuals. <strong class="pkg">HAPprime</strong> provides improved versions of a couple of standard matrix operations, and two small helper functions.</p>

<p><a id="X845EA1B28618D9A7" name="X845EA1B28618D9A7"></a></p>

<h5>10.1-1 SumIntersectionMatDestructive</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; SumIntersectionMatDestructive</code>( <var class="Arg">U, V</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; SumIntersectionMatDestructiveSE</code>( <var class="Arg">Ubasis, Uheads, Vbasis, Vheads</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns a list of length 2 with, at the first position, the sum of the vector spaces generated by the rows of <var class="Arg">U</var> and <var class="Arg">V</var>, and, at the second position, the intersection of the spaces.</p>

<p>Like the <strong class="pkg">GAP</strong> core function <code class="func">SumIntersectionMat</code> (<a href="../../../../../gap4r4/doc/htm/ref/CHAP024.htm#SECT010"><b>Reference: SumIntersectionMat</b></a>), this performs Zassenhaus' algorithm to compute bases for the sum and the intersection. However, this version operates directly on the input matrices (thus corrupting them), and is rewritten to require only approximately 1.5 times the space of the original input matrices. By contrast, the original <strong class="pkg">GAP</strong> version uses three times the memory of the original matrices to perform the calculation, and since it doesn't modify the input matrices will require a total of four times the space of the original matrices.</p>

<p>The function <code class="keyw">SumIntersectionMatDestructiveSE</code> takes as arguments not a pair of generating matrices, but a pair of semi-echelon basis matrices and the corresponding head locations, such as is returned by a call to <code class="func">SemiEchelonMatDestructive</code> (<a href="../../../../../gap4r4/doc/htm/ref/CHAP024.htm#SECT009"><b>Reference: SemiEchelonMatDestructive</b></a>) (these arguments must all be mutable, so <code class="func">SemiEchelonMat</code> (<a href="../../../../../gap4r4/doc/htm/ref/CHAP024.htm#SECT009"><b>Reference: SemiEchelonMat</b></a>) cannot be used). This function is used internally by <code class="keyw">SumIntersectionMatDestructive</code>, and is provided for the occasions when the user might already have the semi-echelon versions available, in which case a small amount of time will be saved.</p>

<p><a id="X8359E68C7F38BA5F" name="X8359E68C7F38BA5F"></a></p>

<h5>10.1-2 SolutionMat</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; SolutionMat</code>( <var class="Arg">M, V</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; SolutionMatDestructive</code>( <var class="Arg">M, V</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Calculates, for each row vector v_i in the matrix <var class="Arg">V</var>, a solution to x_i x M = v_i, and returns these solutions in a matrix X, whose rows are the vectors x_i. If there is not a solution for a v_i, then <code class="keyw">fail</code> is returned for that row.</p>

<p>These functions are identical to the kernel functions <code class="func">SolutionMat</code> (<a href="../../../../../gap4r4/doc/htm/ref/CHAP024.htm#SECT006"><b>Reference: SolutionMat</b></a>) and <code class="func">SolutionMatDestructive</code> (<a href="../../../../../gap4r4/doc/htm/ref/CHAP024.htm#SECT006"><b>Reference: SolutionMatDestructive</b></a>), but are provided for cases where multiple solutions using the same matrix <var class="Arg">M</var> are required. In these cases, using this function is far faster, since the matrix is only decomposed once.</p>

<p>The <code class="code">Destructive</code> version corrupts both the input matrices, while the non-<code class="code">Destructive</code> version operates on copies of these.</p>

<p><a id="X872D9F5D7ED6F4AA" name="X872D9F5D7ED6F4AA"></a></p>

<h5>10.1-3 IsSameSubspace</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; IsSameSubspace</code>( <var class="Arg">U, V</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns <code class="keyw">true</code> if the subspaces spanned by the rows of <var class="Arg">U</var> and <var class="Arg">V</var> are the same, <code class="keyw">false</code> otherwise.</p>

<p>This function treats the rows of the two matrices as vectors from the same vector space (with the same basis), and tests whether the subspace spanned by the two sets of vectors is the same.</p>

<p><a id="X789478557955E1C3" name="X789478557955E1C3"></a></p>

<h5>10.1-4 PrintDimensionsMat</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; PrintDimensionsMat</code>( <var class="Arg">M</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns a string containing the dimensions of the matrix <var class="Arg">M</var> in the form <code class="code">"mxn"</code>, where <code class="keyw">m</code> is the number of rows and <code class="keyw">n</code> the number of columns. If the matrix is empty, the returned string is <code class="code">"empty"</code>.</p>

<p><a id="X8080767383F9EF31" name="X8080767383F9EF31"></a></p>

<h5>10.1-5 <span class="Heading">Example: matrices and vector spaces</span></h5>

<p><strong class="pkg">GAP</strong> uses rows of a matrix to represent basis vectors for a vector space. In this example we have two matrics U and V that we suspect represent the same subspace. Using <code class="func">SolutionMat</code> (<a href="chap10.html#X8359E68C7F38BA5F"><b>10.1-2</b></a>) we can see that V lies in U, but <code class="func">IsSameSubspace</code> (<a href="chap10.html#X872D9F5D7ED6F4AA"><b>10.1-3</b></a>) shows that they are the same subspace, as is confirmed by having identical sums and intersections.</p>


<table class="example">
<tr><td><pre>
gap&gt; U := [[1,2,3],[4,5,6]];;
gap&gt; V := [[3,3,3],[5,7,9]];;
gap&gt; SolutionMat(U, V);
[ [ -1, 1 ], [ 1, 1 ] ]
gap&gt; IsSameSubspace(U, V);
true
gap&gt; SumIntersectionMatDestructive(U, V);
[ [ [ 1, 2, 3 ], [ 0, 1, 2 ] ], [ [ 0, 1, 2 ], [ 1, 0, -1 ] ] ]
gap&gt; IsSameSubspace(last[1], last[2]);
true
gap&gt; PrintDimensionsMat(V);
"2x3"
</pre></td></tr></table>

<p><a id="X826D8334845549EC" name="X826D8334845549EC"></a></p>

<h4>10.2 <span class="Heading">Polynomials</span></h4>

<p><strong class="pkg">GAP</strong> provides some functions for manipulating polynomials and polynomial ideals - see <a href="../../../../../gap4r4/doc/htm/ref/CHAP064.htm"><b>Reference: Polynomials and Rational Functions</b></a>. The <strong class="pkg">HAPprime</strong> packages adds further functions to decompose polynomials into terms and monomials, and some functions for tidying up polynomial ideals.</p>

<p><a id="X7E8B84388516792D" name="X7E8B84388516792D"></a></p>

<h5>10.2-1 TermsOfPolynomial</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; TermsOfPolynomial</code>( <var class="Arg">poly</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>List of pairs</p>

<p>Returns a list of the terms in the polynomial. This list is a list of pairs of the form <code class="code">[mon, coeff]</code> where <code class="code">mon</code> is a monomial and <code class="code">coeff</code> is the coefficient of that monomial in the polynomial. The monomials are sorted according to the total degree/lexicographic order (the same as the in <code class="func">MonomialGrLexOrdering</code> (<a href="../../../../../gap4r4/doc/htm/ref/CHAP064.htm#SECT016"><b>Reference: MonomialGrlexOrdering</b></a>)).</p>

<p><a id="X82862FA1817C7767" name="X82862FA1817C7767"></a></p>

<h5>10.2-2 IsMonomial</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; IsMonomial</code>( <var class="Arg">poly</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>Boolean</p>

<p>Returns <code class="keyw">true</code> if <var class="Arg">poly</var> is a monomial, i.e. the polynomial contains only one term.</p>

<p><a id="X7A603BCA83895309" name="X7A603BCA83895309"></a></p>

<h5>10.2-3 UnivariateMonomialsOfMonomial</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; UnivariateMonomialsOfMonomial</code>( <var class="Arg">mon</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>List</p>

<p>Returns a list of the univariate monomials of the largest order whose product equals <var class="Arg">mon</var>. The univariate monomials are sorted according to their indeterminate number.</p>

<p><a id="X7DE6473B7AE6EC7F" name="X7DE6473B7AE6EC7F"></a></p>

<h5>10.2-4 IndeterminateAndExponentOfUnivariateMonomial</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; IndeterminateAndExponentOfUnivariateMonomial</code>( <var class="Arg">mon</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>List</p>

<p>Returns a list <code class="code">[indet, exp]</code> where <code class="code">indet</code> is the indeterminate of the univariate monomial <var class="Arg">mon</var> and <code class="code">exp</code> is the exponent of that indeterminate in the monomial. If <var class="Arg">mon</var> is an element in the coefficient ring (i.e. the monomial contains no indeterminates) then the first element will be <var class="Arg">mon</var> with an exponent of zero. If <var class="Arg">mon</var> is not a univariate monomial, then <code class="keyw">fail</code> is returned.</p>

<p><a id="X86FFC6697CAF53B8" name="X86FFC6697CAF53B8"></a></p>

<h5>10.2-5 IndeterminatesOfPolynomial</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; IndeterminatesOfPolynomial</code>( <var class="Arg">poly</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>List</p>

<p>Returns a list of the indeterminates used in the polynomial <var class="Arg">poly</var>.</p>

<p><a id="X87DE84AC7B62DC5C" name="X87DE84AC7B62DC5C"></a></p>

<h5>10.2-6 <span class="Heading">ReduceIdeal</span></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; ReduceIdeal</code>( <var class="Arg">I, O</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; ReduceIdeal</code>( <var class="Arg">rels, O</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>Ideal or list</p>

<p>For an ideal <var class="Arg">I</var> returns an ideal containing a reduced generating set for the ideal, i.e. one in which no monomial in a relation in <var class="Arg">I</var> is divisible by the leading term of another polynomial in <var class="Arg">I</var>. The monomial ordering to be used is specified by <var class="Arg">O</var> (see <a href="../../../../../gap4r4/doc/htm/ref/CHAP064.htm#SECT016"><b>Reference: Monomial Orderings</b></a>). The ideal can instead be specified by a list of relations <var class="Arg">rels</var>, in which case a reduced list of relations is returned.</p>

<p><a id="X84E9467E84243B77" name="X84E9467E84243B77"></a></p>

<h5>10.2-7 ReducedPolynomialRingPresentation</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; ReducedPolynomialRingPresentation</code>( <var class="Arg">R, I[, avoid]</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; ReducedPolynomialRingPresentationMap</code>( <var class="Arg">R, I[, avoid]</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>List</p>

<p>For a polynomial ring <var class="Arg">R</var> and a list of relations <var class="Arg">I</var> in that ring, returns a list <code class="code">[S, J]</code> representing a polynomial quotient ring S/J which is isomorphic to the ring R/I, but which involves the minimal number of ring indeterminates. The indeterminates in <code class="code">S</code> will be distinct from thise in <var class="Arg">R</var>, and an optional argument <var class="Arg">avoid</var> can be used to give a list of further indeterminates to avoid when creating the ring <code class="code">S</code>.</p>

<p>The extended version of this function, <code class="func">ReducedPolynomialRingPresentationMap</code>, returns an additional third element to the list, which contains two lists giving the mapping between the new ring indeterminates and the old ring indeterminates. The first list is of polynomials in the original indeterminates, the second the equivalent polynomials in the new ring indeterminates.</p>

<p><a id="X7F8D0B27815DDA6B" name="X7F8D0B27815DDA6B"></a></p>

<h5>10.2-8 <span class="Heading">Example: monomials, polynomials and ring presentations</span></h5>

<p>A monomial is some product of ring indeterminates. A polynomial is a sum of monomials, where each monomial may also be multiplied by an element from the field of the polynomial. It can be useful to decompose polynomials as follows:</p>


<ul>
<li><p>decompose a polynomial into its individual terms (where a term is a product of a monomial and a field element). The function <code class="func">TermsOfPolynomial</code> (<a href="chap10.html#X7E8B84388516792D"><b>10.2-1</b></a>) does this.</p>

</li>
<li><p>decompose a monomial into its component univariate monomials, each of which is some (power of) a single indeterminates. This operation is performed by <code class="func">UnivariateMonomialsOfMonomial</code> (<a href="chap10.html#X7A603BCA83895309"><b>10.2-3</b></a>).</p>

</li>
<li><p>decompose a univariate monomial into it the indeterminates and exponent (<code class="func">IndeterminateAndExponentOfUnivariateMonomial</code> (<a href="chap10.html#X7DE6473B7AE6EC7F"><b>10.2-4</b></a>)).</p>

</li>
</ul>
<p>In the example below, we decompose x + xy^2 + 3y^3 into its three terms, and then further decompose the xy^2 term.</p>


<table class="example">
<tr><td><pre>
gap&gt; R := PolynomialRing(Integers, 2);;
gap&gt; x := R.1;; y := R.2;;
gap&gt; poly := x + x*y^2 + 3*y^3;
x_1*x_2^2+3*x_2^3+x_1
gap&gt; terms := TermsOfPolynomial(poly);
[ [ x_1, 1 ], [ x_2^3, 3 ], [ x_1*x_2^2, 1 ] ]
gap&gt; UnivariateMonomialsOfMonomial(terms[3][1]);
[ x_1, x_2^2 ]
gap&gt; IndeterminateAndExponentOfUnivariateMonomial(last[2]);
[ x_2, 2 ]
</pre></td></tr></table>

<p><strong class="pkg">HAPprime</strong> also provides some functions to help the generation of ring presentations. In the following example we consider the polynomial ring Z[w,x,y,z] an an ideal I = &lt; w^2 + x, w^3 + x^3 &gt;. We first convert this ideal into reduced form (where no monomial in a polynomial is divisible by the leading term of any other polynomial). Then we calculate a reduced ring presentation for the quotient ring R/I, where we find that the indeterminate x is can be removed and a new ring S/J = Z[w,y,z]/&lt; w^6-w^3 &gt; is isomorphic to R/I</p>


<table class="example">
<tr><td><pre>
gap&gt; R := PolynomialRing(Integers, 4);;
gap&gt; w := R.1;; x := R.2;;
gap&gt; I := [w^2 + x, w^3 + x^3];
[ x_1^2+x_2, x_1^3+x_2^3 ]
gap&gt; ReduceIdeal(I, MonomialLexOrdering());
[ x_1^2+x_2, -x_2^3+x_1*x_2 ]
gap&gt; 
gap&gt; ReducedPolynomialRingPresentation(R, I);
[ Integers[x_5,x_6,x_7], [ x_5^6-x_5^3 ] ]
</pre></td></tr></table>

<p><a id="X840A7A5D7AE407F2" name="X840A7A5D7AE407F2"></a></p>

<h4>10.3 <span class="Heading">Singular</span></h4>

<p><a id="X783EE9057FE65731" name="X783EE9057FE65731"></a></p>

<h5>10.3-1 SingularSetNormalFormIdeal</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; SingularSetNormalFormIdeal</code>( <var class="Arg">I</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; SingularSetNormalFormIdealNC</code>( <var class="Arg">I</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>nothing</p>

<p>Sets the ideal to be used by singular for any subsequent calls to <code class="func">SingularPolynomialNormalForm</code> (<a href="chap10.html#X7E6A0D647D39110B"><b>10.3-2</b></a>) to be <var class="Arg">I</var>. After calling this function, the singular base ring and term ordering (see <code class="func">SingularBaseRing</code> (<a href="../../../../../gap4r4/pkg/singular/doc/chap1.html#s3ss6"><b>singular: SingularBaseRing</b></a>) and <code class="func">TermOrdering</code> (<a href="../../../../../gap4r4/pkg/singular/doc/chap1.html#s3ss5"><b>singular: TermOrdering</b></a>)) will be set to be that of the ring containing <var class="Arg">I</var>, so an additional call to <code class="func">SingularSetBaseRing</code> (<a href="../../../../../gap4r4/pkg/singular/doc/chap1.html#s3ss6"><b>singular: SingularSetBaseRing</b></a>) is not necessary.</p>

<p>The standard form of this function ensures that <var class="Arg">I</var> is a reduced Gröbner basis with respect to the value of <code class="func">TermOrdering</code> (<a href="../../../../../gap4r4/pkg/singular/doc/chap1.html#s3ss5"><b>singular: TermOrdering</b></a>) for the ring containing the ideal, while the <code class="code">NC</code> assumes that <var class="Arg">I</var> is already such a Gröbner basis.</p>

<p><a id="X7E6A0D647D39110B" name="X7E6A0D647D39110B"></a></p>

<h5>10.3-2 SingularPolynomialNormalForm</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; SingularPolynomialNormalForm</code>( <var class="Arg">poly[, I]</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>Polynomial</p>

<p>Returns the normal form of the polynomial <var class="Arg">poly</var> after reduction by the ideal <var class="Arg">I</var>. The ideal can either be passed to this function, in which case it is converted to a Gröbner basis (with respect to the term ordering of the ideal's ring - see <code class="func">TermOrdering</code> (<a href="../../../../../gap4r4/pkg/singular/doc/chap1.html#s3ss5"><b>singular: TermOrdering</b></a>)), or the ideal to use can be set first be calling <code class="func">SingularSetNormalFormIdeal</code> (<a href="chap10.html#X783EE9057FE65731"><b>10.3-1</b></a>), which is more efficient for repeated use of this function (the latter function also sets the base ring and term ordering).</p>

<p><a id="X804568497F686594" name="X804568497F686594"></a></p>

<h5>10.3-3 SingularGroebnerBasis</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; SingularGroebnerBasis</code>( <var class="Arg">I</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>List</p>

<p>Returns a list of relations which form a Gröbner basis for the ideal <var class="Arg">I</var> given the <code class="func">TermOrdering</code> (<a href="../../../../../gap4r4/pkg/singular/doc/chap1.html#s3ss5"><b>singular: TermOrdering</b></a>) associated with the ring containing <var class="Arg">I</var>. This function is the same as the <strong class="pkg">singular</strong> function <code class="func">GroebnerBasis</code> (<a href="../../../../../gap4r4/pkg/singular/doc/chap1.html#s5ss1"><b>singular: GroebnerBasis</b></a>), but fixes a bug in that package when using unusual term ordering.</p>

<p><a id="X7FB57C4F7D3164E6" name="X7FB57C4F7D3164E6"></a></p>

<h5>10.3-4 SingularReducedGroebnerBasis</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; SingularReducedGroebnerBasis</code>( <var class="Arg">I</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>List</p>

<p>Returns a list of relations which form a reduced Gröbner basis for the ideal <var class="Arg">I</var> given the <code class="func">TermOrdering</code> (<a href="../../../../../gap4r4/pkg/singular/doc/chap1.html#s3ss5"><b>singular: TermOrdering</b></a>) associated with the ring containing <var class="Arg">I</var>. This function is the equivalent of the <strong class="pkg">singular</strong> function <code class="func">GroebnerBasis</code> (<a href="../../../../../gap4r4/pkg/singular/doc/chap1.html#s5ss1"><b>singular: GroebnerBasis</b></a>) (and uses that function), but ensures that a reduced basis is returned.</p>

<p><a id="X8716635F7951801B" name="X8716635F7951801B"></a></p>

<h4>10.4 <span class="Heading">Groups</span></h4>

<p>Small groups in <strong class="pkg">GAP</strong> can be indexed by their small groups library number <a href="../../../../../gap4r4/doc/htm/ref/CHAP048.htm#SECT007"><b>Reference: Small Groups</b></a>. An alternative indexing scheme, the Hall-Senior number, is used by Jon Carlson to publish his cohomology ring calculations at <span class="URL"><a href="http://www.math.uga.edu/~lvalero/cohointro.html">http://www.math.uga.edu/~lvalero/cohointro.html</a></span>. To allow comparison with these results, we provide a function that converts from the <strong class="pkg">GAP</strong> small groups library numbers to Hall-Senior number for the groups of order 8, 16, 32 and 64.</p>

<p><a id="X7FD16926859DD49B" name="X7FD16926859DD49B"></a></p>

<h5>10.4-1 <span class="Heading">HallSeniorNumber</span></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; HallSeniorNumber</code>( <var class="Arg">order, i</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; HallSeniorNumber</code>( <var class="Arg">G</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>Integer</p>

<p>Returns the Hall-Senior number for a small group (of order 8, 16, 32 or 64). The group can be specified an <var class="Arg">order</var>, <var class="Arg">i</var> pair from the <strong class="pkg">GAP</strong> <a href="../../../../../gap4r4/doc/htm/ref/CHAP048.htm#SECT007"><b>Reference: Small Groups</b></a> library, or as a group <var class="Arg">G</var>, in which case <code class="func">IdSmallGroup</code> (<a href="../../../../../gap4r4/doc/htm/ref/CHAP048.htm#SECT007"><b>Reference: IdSmallGroup</b></a>) is used to identify the group.</p>


<table class="example">
<tr><td><pre>
gap&gt; HallSeniorNumber(32, 5);
20
gap&gt; HallSeniorNumber(SmallGroup(64, 1));
11
</pre></td></tr></table>


<div class="chlinkprevnextbot">&nbsp;<a href="chap0.html">Top of Book</a>&nbsp;  &nbsp;<a href="chap9.html">Previous Chapter</a>&nbsp;  &nbsp;<a href="chapInd.html">Next Chapter</a>&nbsp;  </div>


<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chap8.html">8</a>  <a href="chap9.html">9</a>  <a href="chap10.html">10</a>  <a href="chapInd.html">Ind</a>  </div>

<hr />
<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>