Sophie

Sophie

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

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 7: Ring homomorphisms</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="chap6.html">Previous Chapter</a>&nbsp;  &nbsp;<a href="chap8.html">Next Chapter</a>&nbsp;  </div>

<p><a id="X7E88C32A82E942DA" name="X7E88C32A82E942DA"></a></p>
<div class="ChapSects"><a href="chap7.html#X7E88C32A82E942DA">7 <span class="Heading">Ring homomorphisms</span></a>
<div class="ContSect"><span class="nocss">&nbsp;</span><a href="chap7.html#X7A0B792785E2AA8A">7.1 <span class="Heading">The <code class="keyw">HAPRingHomomorphism</code> datatype</span></a>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X7AB84A0B83B2C1F1">7.1-1 <span class="Heading">Implementation details</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X7AB0F3977DC63F54">7.1-2 <span class="Heading">Elimination orderings</span></a>
</span>
</div>
<div class="ContSect"><span class="nocss">&nbsp;</span><a href="chap7.html#X83D8009086035BCB">7.2 <span class="Heading">Construction functions</span></a>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X7A500F53808DDDA9">7.2-1 HAPRingToSubringHomomorphism</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X7A7E46337D6F47B6">7.2-2 <span class="Heading">HAPSubringToRingHomomorphism</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X7A77983F7D6E0AC7">7.2-3 HAPRingHomomorphismByIndeterminateMap</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X7E011BEB868B14B4">7.2-4 HAPRingReductionHomomorphism</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X87F4CEBD869C46A1">7.2-5 PartialCompositionRingHomomorphism</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X8288925E86054FE9">7.2-6 HAPZeroRingHomomorphism</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X78106D04821D02EC">7.2-7 InverseRingHomomorphism</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X7ABEFEFC8285FD48">7.2-8 CompositionRingHomomorphism</a></span>
</div>
<div class="ContSect"><span class="nocss">&nbsp;</span><a href="chap7.html#X7DE3278D7E5DEE03">7.3 <span class="Heading">Data access functions</span></a>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X7E44FAD67C045016">7.3-1 SourceGenerators</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X79FA0ADF7EA5B043">7.3-2 SourceRelations</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X7DDE043C789AEC3A">7.3-3 SourcePolynomialRing</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X838F30B3805177C1">7.3-4 ImageGenerators</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X7F50B38D87439BEE">7.3-5 ImageRelations</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X863B0F2978792F7F">7.3-6 ImagePolynomialRing</a></span>
</div>
<div class="ContSect"><span class="nocss">&nbsp;</span><a href="chap7.html#X7B65E0C37AAB6066">7.4 <span class="Heading">General functions</span></a>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X8680F51E82EA1939">7.4-1 <span class="Heading">ImageOfRingHomomorphism</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap7.html#X7B1B2C0980375531">7.4-2 <span class="Heading">PreimageOfRingHomomorphism</span></a>
</span>
</div>
<div class="ContSect"><span class="nocss">&nbsp;</span><a href="chap7.html#X7A00ADEE8679D3AD">7.5 <span class="Heading">Example: Constructing and using a <code class="keyw">HAPRingHomomorphism</code></span></a>
</div>
</div>

<h3>7 <span class="Heading">Ring homomorphisms</span></h3>

<p>A ring homomorphism is a linear function f: R -&gt; S that maps between two rings R and S and which preserves the operations of multiplication and addition:</p>

<p class="pcenter">
      f(a + b) = f(a) + f(b) 
      f(ab)    = f(a)f(b) 
      f(1)     = 1 
    </p>

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

<h4>7.1 <span class="Heading">The <code class="keyw">HAPRingHomomorphism</code> datatype</span></h4>

<p>The <code class="keyw">HAPRingHomomorphism</code> datatype represents a particular class of ring homomorphisms (in fact usually ring isomorphisms), namely those between rings presented as quotient rings of polynomial rings, where the source and target rings have the same coefficient ring. They represent the mapping</p>

<p class="pcenter">
      R/I  -&gt;  S/J
    </p>

<p>where R = k[x_1, ..., x_n] and S = k[y_1, ..., x_m] and I and J are ideals in R and S respectively.</p>

<p>Such a ring homomorphism may be specified by the following information</p>


<ul>
<li><p>a polynomial ring R</p>

</li>
<li><p>a list of polynomials in R that generate the ideal I</p>

</li>
<li><p>a list Q = [q_1, ..., q_n] where each q_i in S/J is the image of the indeterminate x_i in R under the homomorphism.</p>

</li>
</ul>
<p>The target ideal J is assumed to be the image of I under the homomorphism.</p>

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

<h5>7.1-1 <span class="Heading">Implementation details</span></h5>

<p>Various different internal representations are used for ring homomorphisms in <strong class="pkg">HAPprime</strong>, depending on the source and target ring. The user need not be concerned with the different representations, which correspond to the five constructors <code class="func">HAPRingToSubringHomomorphism</code> (<a href="chap7.html#X7A500F53808DDDA9"><b>7.2-1</b></a>), <code class="func">HAPSubringToRingHomomorphism</code> (<a href="chap7.html#X7A7E46337D6F47B6"><b>7.2-2</b></a>), <code class="func">HAPRingHomomorphismByIndeterminateMap</code> (<a href="chap7.html#X7A77983F7D6E0AC7"><b>7.2-3</b></a>), <code class="func">HAPRingReductionHomomorphism</code> (<a href="chap7.html#X7E011BEB868B14B4"><b>7.2-4</b></a>) and <code class="func">HAPZeroRingHomomorphism</code> (<a href="chap7.html#X8288925E86054FE9"><b>7.2-6</b></a>), and which are hopefully largely self-explanatory.</p>

<p>Most of the provided representations of ring homomorphisms use Gröbner bases and polynomial reduction to perform the mapping. This uses the <strong class="pkg">singular</strong> package <a href="../../../../../gap4r4/pkg/singular/doc/chap1.html#s0ss0"><b>singular: singular: the GAP interface to Singular</b></a> which gives good speed and access to improved monomial orderings. This datatype cannot be used without the <strong class="pkg">singular</strong> package.</p>

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

<h5>7.1-2 <span class="Heading">Elimination orderings</span></h5>

<p>Using Gröbner bases to map from one polynomial ring R to another polynomial ring S relies on applying a global ordering to the joint ring R cup S. For all polynomials p in R and q in S, this ordering must give p &gt; q, so that terms involving elements of R will be replaced by those in S. A straightforward solution is to use a lexicographic term ordering which orders the indeterminates of R before those of S. However, computing Gröbner bases using a lexicographic ordering can be much more expensive that with other orderings, or sometimes even a change of the order of indeterminates is enough change the order of the computation. A range of different ordering can be requested by using the <strong class="pkg">GAP</strong> options stack <a href="../../../../../gap4r4/doc/htm/ref/CHAP008.htm"><b>Reference: Options Stack</b></a>, and setting the options <code class="code">EliminationIndexOrder</code> and <code class="code">EliminationBlockOrdering</code> as described below.</p>

<p>The option <code class="code">EliminationIndexOrder</code> determines the indeterminate ordering to use. Possible values are the following strings:</p>


<ul>
<li><p><code class="code">"Forward"</code> (default) Indeterminates are ordered as in the definition of R and S: p_1 &gt; p_2 &gt; ... &gt; p_n &gt; q_1 &gt; q_2 &gt; ... &gt; q_m.</p>

</li>
<li><p><code class="code">"Reverse"</code> Lexicographic ordering in reverse order to that in the definition of R and S: p_n &gt; p_n-1 &gt; ... &gt; p_1 &gt; q_m &gt; q_m-1 &gt; ... &gt; q_1.</p>

</li>
<li><p><code class="code">"Shuffle"</code> Lexicographic ordering using a random shuffle of the indeterminates in R and S.</p>

</li>
<li><p><code class="code">"ShuffleNN"</code> where <code class="code">NN</code> is some non-negative integer. This is the same as <code class="code">Shuffle</code>, but using the value of <code class="code">NN</code> as the random seed (and hence is deterministic).</p>

</li>
</ul>
<p>When comparing two monomials, the elimination ordering ensures that the parts of the two monomials involving the indeterminates from R are compared first, and then in the event of a tie, the part involving those from S are compared. The option <code class="code">EliminationBlockOrdering</code> determines the monomial ordering to use for each of these two comparisons. This is given as a string which is the concatenation of the two required orderings. For example, the default ordering is <code class="code">"LexGrlex"</code> which means lexicographic ordering over the indeterminates of R, and graded lexicographic over the indeterminates of S.</p>


<ul>
<li><p><code class="code">"Lex"</code> Lexicographic ordering, the equivalent of the <strong class="pkg">GAP</strong> ordering <code class="func">MonomialLexOrdering</code> (<a href="../../../../../gap4r4/doc/htm/ref/CHAP064.htm#SECT016"><b>Reference: MonomialLexOrdering</b></a>)).</p>

</li>
<li><p><code class="code">"Grlex"</code> Graded lexicographic ordering, the equivalent of <code class="func">MonomialGrlexOrdering</code> (<a href="../../../../../gap4r4/doc/htm/ref/CHAP064.htm#SECT016"><b>Reference: MonomialGrlexOrdering</b></a>).</p>

</li>
<li><p><code class="code">"Grevlex"</code> Graded reverse lexicographic ordering, the equivalent of <code class="func">MonomialGrevlexOrdering</code> (<a href="../../../../../gap4r4/doc/htm/ref/CHAP064.htm#SECT016"><b>Reference: MonomialGrevlexOrdering</b></a>).</p>

</li>
</ul>
<p><a id="X83D8009086035BCB" name="X83D8009086035BCB"></a></p>

<h4>7.2 <span class="Heading">Construction functions</span></h4>

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

<h5>7.2-1 HAPRingToSubringHomomorphism</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; HAPRingToSubringHomomorphism</code>( <var class="Arg">Rring, Rrels, Simages</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b><code class="keyw">HAPRingHomomorphism</code></p>

<p>Creates a <code class="keyw">HAPRingHomomorphism</code> which represents the mapping R/I -&gt; S/J. In this form, <var class="Arg">Rring</var> a polynomial ring R and <var class="Arg">Rrels</var> an ideal I in that ring. The image of the indeterminates of <var class="Arg">R</var> under this mapping are given in <var class="Arg">Simages</var> and generate the ring S, while the relations <var class="Arg">Rrels</var> are mapped to generate J. The ring S may be a subring of the full polynomial ring in its indeterminates.</p>

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

<h5>7.2-2 <span class="Heading">HAPSubringToRingHomomorphism</span></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; HAPSubringToRingHomomorphism</code>( <var class="Arg">Rgens, Rrels, Sring</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; HAPSubringToRingHomomorphism</code>( <var class="Arg">Rgens, Sring, Srels</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b><code class="keyw">HAPRingHomomorphism</code></p>

<p>Creates a <code class="keyw">HAPRingHomomorphism</code> which represents the mapping R/I -&gt; S/J. The ring R is generated by a set of polynomials <var class="Arg">Rgens</var> (so R may be a subring of the full polynomial ring in its indeterminates). The images of <var class="Arg">Rgens</var> under the mapping are the indeterminates of the polynomial ring given in <var class="Arg">Sring</var>. The ideals can be specified either as a set of relations <var class="Arg">Srels</var> in the target ring S, or as a set of relations <var class="Arg">Rrels</var> in the source ring. In this second case, <var class="Arg">Rrels</var> can be polynomials in the full polynomial ring, in which case the ideal I is the intersection of the ideal they generate in the full ring with the subring generated by <var class="Arg">Rgens</var>. In both cases, the specified ideal is mapped with the homomorphism (or its inverse) to find the corresponding ideal in the other ring.</p>

<p>This ring homomorphism uses Gröbner bases to perform the mapping, and the time taken to calculate the basis in this function can be influenced by the choice of monomial ordering. See <a href="chap7.html#X7AB0F3977DC63F54"><b>7.1-2</b></a> for more details.</p>

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

<h5>7.2-3 HAPRingHomomorphismByIndeterminateMap</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; HAPRingHomomorphismByIndeterminateMap</code>( <var class="Arg">R, Rrels, S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b><code class="keyw">HAPRingHomomorphism</code></p>

<p>Creates a <code class="keyw">HAPRingHomomorphism</code> which represents the map R/I -&gt; S/J which is a simple relabelling of indeterminates: the image of the ith indeterminate of <var class="Arg">R</var> under the mapping is taken to be the ith indeterminate of <var class="Arg">S</var>. The ideal I is generated by <var class="Arg">Rrels</var> and are mapped using the homomorphism to generate J.</p>

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

<h5>7.2-4 HAPRingReductionHomomorphism</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; HAPRingReductionHomomorphism</code>( <var class="Arg">R, Rrels[, 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; HAPRingReductionHomomorphism</code>( <var class="Arg">phi[, avoid]</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b><code class="keyw">HAPRingHomomorphism</code></p>

<p>For a polynomial ring <var class="Arg">R</var> and ideal I generated by <var class="Arg">Rrels</var>, this function finds an isomorphic ring in fewer indeterminates (or the same number, if this is not possible). This new ring will avoid the indeterminates of <var class="Arg">R</var> and any further indeterminates listed in <var class="Arg">avoid</var>. The function returns the map between R/I and the new ring.</p>

<p>In the second form, this function reduces the target ring of the ring homomorphism <var class="Arg">phi</var> and returns the map between this and the reduced ring. This map will also avoid the indeterminates in the source ring of <var class="Arg">phi</var>.</p>

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

<h5>7.2-5 PartialCompositionRingHomomorphism</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; PartialCompositionRingHomomorphism</code>( <var class="Arg">M, N</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b><code class="keyw">HAPRingHomomorphism</code></p>

<p>Creates a <code class="keyw">HAPRingHomomorphism</code> which represents the composition of the <code class="keyw">HAPRingHomomorphism</code> maps <var class="Arg">M</var> followed by <var class="Arg">N</var>. The source of <var class="Arg">N</var> may be a subring of the target of <var class="Arg">M</var>.</p>

<p>Note that, unlike the other <code class="code">HAPRingHomomorphism</code> representations, the generators listed by <code class="func">SourceGenerators</code> (<a href="chap7.html#X7E44FAD67C045016"><b>7.3-1</b></a>) and <code class="func">ImageGenerators</code> (<a href="chap7.html#X838F30B3805177C1"><b>7.3-4</b></a>) are not in correspondance. Also, this is not an isomorphism, so the relations reported by <code class="func">SourceRelations</code> (<a href="chap7.html#X79FA0ADF7EA5B043"><b>7.3-2</b></a>) and <code class="func">ImageRelations</code> (<a href="chap7.html#X7F50B38D87439BEE"><b>7.3-5</b></a>) are simply the relations of the source and image rings, and are not the same ideal. Because this is not an isomorphism, <code class="func">InverseRingHomomorphism</code> (<a href="chap7.html#X78106D04821D02EC"><b>7.2-7</b></a>) will return <code class="keyw">fail</code>, although <code class="func">PreimageOfRingHomomorphism</code> (<a href="chap7.html#X7B1B2C0980375531"><b>7.4-2</b></a>) can be used (and will return <code class="keyw">fail</code> if no preimage exists).</p>

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

<h5>7.2-6 HAPZeroRingHomomorphism</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; HAPZeroRingHomomorphism</code>( <var class="Arg">R, Rrels</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b><code class="keyw">HAPRingHomomorphism</code></p>

<p>Creates a <code class="keyw">HAPRingHomomorphism</code> which maps from the ring R, with an ideal generated by <var class="Arg">Rrels</var>, into the trival ring generated by zero.</p>

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

<h5>7.2-7 InverseRingHomomorphism</h5>

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

<p>Returns (as a ring homomorphism) the inverse of the ring homomorphism <var class="Arg">phi</var>.</p>

<p>If the inverse homomorphism requires an elimination Gröbner basis to perform the mapping (for example when computing the inverse of a <code class="keyw">HAPRingHomomorphism</code> constructed with <code class="func">HAPRingToSubringHomomorphism</code> (<a href="chap7.html#X7A500F53808DDDA9"><b>7.2-1</b></a>)) then the ordering can be specified using the options stack. See <a href="chap7.html#X7AB0F3977DC63F54"><b>7.1-2</b></a> for more details.</p>

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

<h5>7.2-8 CompositionRingHomomorphism</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; CompositionRingHomomorphism</code>( <var class="Arg">phiA, phiB</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b><code class="keyw">HAPRingHomomorphism</code></p>

<p>Returns the ring homomorphism that is the composition of the ring homomorphisms <var class="Arg">phiA</var> and <var class="Arg">phiB</var>. The source ring of <var class="Arg">phiB</var> must be in the image ring of <var class="Arg">phiA</var>.</p>

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

<h4>7.3 <span class="Heading">Data access functions</span></h4>

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

<h5>7.3-1 SourceGenerators</h5>

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

<p>A list of generators for the source ring R/I of the ring homomorphism. <var class="Arg">phi</var>.</p>

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

<h5>7.3-2 SourceRelations</h5>

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

<p>A list of the relations that generate the ideal I of in the source ring of the ring homomorphism <var class="Arg">phi</var>.</p>

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

<h5>7.3-3 SourcePolynomialRing</h5>

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

<p>Returns the polynomial ring which contains the source ring of the ring homomorphism <var class="Arg">phi</var>. Polynomials to be mapped by <var class="Arg">phi</var> must be in this ring.</p>

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

<h5>7.3-4 ImageGenerators</h5>

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

<p>A list of generators for the image ring S/J of the ring homomorphism <var class="Arg">phi</var>.</p>

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

<h5>7.3-5 ImageRelations</h5>

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

<p>A list of the relations that generate the ideal J of in the image ring of the ring homomorphism <var class="Arg">phi</var>.</p>

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

<h5>7.3-6 ImagePolynomialRing</h5>

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

<p>Returns the polynomial ring which contains the image of the ring homomorphism <var class="Arg">phi&gt;</var>. All polynomials mapped by <var class="Arg">phi</var> will be in this ring.</p>

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

<h4>7.4 <span class="Heading">General functions</span></h4>

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

<h5>7.4-1 <span class="Heading">ImageOfRingHomomorphism</span></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; ImageOfRingHomomorphism</code>( <var class="Arg">phi, poly</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; ImageOfRingHomomorphism</code>( <var class="Arg">phi, coll</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>Polynomial or list</p>

<p>Returns the image of the polynomial <var class="Arg">poly</var> under the ring homomorphism <var class="Arg">phi</var>. The input must be an element(s) of the source ring of <var class="Arg">phi</var> (see <code class="func">SourcePolynomialRing</code> (<a href="chap7.html#X7DDE043C789AEC3A"><b>7.3-3</b></a>)).</p>

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

<h5>7.4-2 <span class="Heading">PreimageOfRingHomomorphism</span></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; PreimageOfRingHomomorphism</code>( <var class="Arg">phi, poly</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; PreimageOfRingHomomorphism</code>( <var class="Arg">phi, coll</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><b>Returns: </b>Polynomial or list</p>

<p>Returns the preimage of the polynomial <var class="Arg">poly</var> under the ring homomorphism <var class="Arg">phi</var>. The input must be an element(s) of the image ring of <var class="Arg">phi</var> (see <code class="func">ImagePolynomialRing</code> (<a href="chap7.html#X863B0F2978792F7F"><b>7.3-6</b></a>)). This function is a synonym for <code class="code">ImageOfRingHomomorphism(InverseRingHomomorphism(phi), poly)</code>.</p>

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

<h4>7.5 <span class="Heading">Example: Constructing and using a <code class="keyw">HAPRingHomomorphism</code></span></h4>

<p>As an initial example, we shall construct a ring homomorphism phi: k[x_1, x_2] -&gt; k[x_3, x_4] (i.e. ideal) with the mapping x_1 -&gt; x_3 and x_2 -&gt; x_3 + x_4. In all these examples, we shall take k to be the field of two elements, GF(2). We demonstrate that this is an isomorphism by mapping a polynomial from the source ring to the target and back again.</p>


<table class="example">
<tr><td><pre>
gap&gt; R := PolynomialRing(GF(2), 2);;
gap&gt; S := PolynomialRing(GF(2), 2, IndeterminatesOfPolynomialRing(R));;
gap&gt; phi := HAPRingToSubringHomomorphism(R, [], [S.1, S.1+S.2]);
&lt;Ring homomorphism&gt;
gap&gt; p := ImageOfRingHomomorphism(phi, R.1^3+R.1*R.2+R.2);
x_3^3+x_3^2+x_3*x_4+x_3+x_4
gap&gt; PreimageOfRingHomomorphism(phi, p);
x_1^3+x_1*x_2+x_2
</pre></td></tr></table>

<p>Some ring presentations are not in minimal form: there is an isomorphic ring in fewer indeterminates. The <code class="func">HAPRingReductionHomomorphism</code> (<a href="chap7.html#X7E011BEB868B14B4"><b>7.2-4</b></a>) function can find and return an isomorphism that maps to this reduced ring. For example, the ring k[x_1, x_2, x_3]/(x_1^2 + x_2^3, x_2^2 + x_3) has an isomorphic presentation in only two indeterminates, as this computation shows:</p>


<table class="example">
<tr><td><pre>
gap&gt; R := PolynomialRing(GF(2), 3);;
gap&gt; I := [R.1^2+R.2^3, R.2^2+R.3];
[ x_2^3+x_1^2, x_2^2+x_3 ]
gap&gt; phi := HAPRingReductionHomomorphism(R, I);
&lt;Ring homomorphism&gt;
gap&gt; ImagePolynomialRing(phi);
GF(2)[x_4,x_5]
gap&gt; ImageRelations(phi);
[ x_5^3+x_4^2 ]
</pre></td></tr></table>

<p>The source and target of <code class="code">HAPRingHomomorphism</code>s can be quotient rings, and any relations can be specified at the source of target. When mapping from a subring to a full ring, the source relations do not necessarily need to be specified in the source ring, but could instead be given in its containing ring. For example, consider the ring R/I where R = k[x_1, x_2, x_3] and I = x_1^3+x_3 and the subring generated by (x_1, x_2, x_3^2). If we wish to specify the homomorphism phi: R/I -&gt; S/J where S = k[x_4, x_5, x_6] with the natural map from the generators of R to those of S then we only need specify the original ideal I, even though it is not in the subring. The intersection between I and the subring is found to be x_1^4+x_3^2, and it is this ideal that is used in the homomorphism, as this example shows:</p>


<table class="example">
<tr><td><pre>
gap&gt; R := PolynomialRing(GF(2), 3);;
gap&gt; I := [R.1^2+R.3];
[ x_1^2+x_3 ]
gap&gt; S := PolynomialRing(GF(2), 3, IndeterminatesOfPolynomialRing(R));;
gap&gt; phi := HAPSubringToRingHomomorphism([R.1, R.2, R.3^2], I, S);
&lt;Ring homomorphism&gt;
gap&gt; Display(phi);
Ring homomorphism
  x_1 -&gt; x_4
  x_2 -&gt; x_5
  x_3^2 -&gt; x_6
with relations
  [ x_1^2+x_3 ]
and
  [ x_4^4+x_6 ]
gap&gt; Display(InverseRingHomomorphism(phi));
Ring homomorphism
  x_4 -&gt; x_1
  x_5 -&gt; x_2
  x_6 -&gt; x_3^2
with relations
  [ x_4^4+x_6 ]
and
  [ x_1^4+x_3^2 ]
</pre></td></tr></table>

<p>Ring homomorphisms can also be composed with each other. For example, we can take the <code class="func">HAPSubringToRingHomomorphism</code> (<a href="chap7.html#X7A7E46337D6F47B6"><b>7.2-2</b></a>) above and change the target indeterminates by composing this with a <code class="func">HAPRingHomomorphismByIndeterminateMap</code> (<a href="chap7.html#X7A77983F7D6E0AC7"><b>7.2-3</b></a>):</p>


<table class="example">
<tr><td><pre>
gap&gt; R := PolynomialRing(GF(2), 3);;
gap&gt; I := [R.1^2+R.3];
[ x_1^2+x_3 ]
gap&gt; S := PolynomialRing(GF(2), 3, IndeterminatesOfPolynomialRing(R));;
gap&gt; phi := HAPSubringToRingHomomorphism([R.1, R.2, R.3^2], I, S);
&lt;Ring homomorphism&gt;
gap&gt; #
gap&gt; T := PolynomialRing(GF(2), 3, [R.1, R.2, R.3, S.1, S.2, S.3]);;
gap&gt; phi2 := HAPRingHomomorphismByIndeterminateMap(
&gt;   ImagePolynomialRing(phi), ImageRelations(phi), T);
&lt;Ring homomorphism&gt;
gap&gt; Display(CompositionRingHomomorphism(phi, phi2));
Ring homomorphism
  x_1 -&gt; x_7
  x_2 -&gt; x_8
  x_3^2 -&gt; x_9
with relations
  [ x_1^2+x_3 ]
and
  [ x_7^4+x_9 ]
</pre></td></tr></table>


<div class="chlinkprevnextbot">&nbsp;<a href="chap0.html">Top of Book</a>&nbsp;  &nbsp;<a href="chap6.html">Previous Chapter</a>&nbsp;  &nbsp;<a href="chap8.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>