<!-- HAPPRIME - derivation.xml.in Function documentation template file for HAPprime Paul Smith Copyright (C) 2007-2009 Paul Smith National University of Ireland Galway $Id: functions.xml.in 200 2008-02-05 14:29:47Z pas $ --> <!-- ********************************************************** --> <Chapter Label="RingHomomorphism"> <Heading>Ring homomorphisms</Heading> A ring homomorphism is a linear function <M>f: R \to S</M> that maps between two rings <M>R</M> and <M>S</M> and which preserves the operations of multiplication and addition: <Alt Only="LaTeX"> <Display> \begin{align*} f(a + b) &= f(a) + f(b) \\ f(ab) &= f(a)f(b) \\ f(1) &= 1 \end{align*} </Display> </Alt> <Alt Not="LaTeX"> <Display><![CDATA[ f(a + b) = f(a) + f(b) f(ab) = f(a)f(b) f(1) = 1 ]]></Display> </Alt> <Section> <Heading>The <K>HAPRingHomomorphism</K> datatype</Heading> The <K>HAPRingHomomorphism</K> 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 <Alt Only="LaTeX"> <Display> \frac{R}{I} \to \frac{S}{J} </Display> </Alt> <Alt Not="LaTeX"> <Display><![CDATA[ R/I -> S/J ]]></Display> </Alt> where <M>R = k[x_1, \ldots, x_n]</M> and <M>S = k[y_1, \ldots, x_m]</M> and <M>I</M> and <M>J</M> are ideals in <M>R</M> and <M>S</M> respectively. <P/> Such a ring homomorphism may be specified by the following information <List> <Item>a polynomial ring <M>R</M></Item> <Item>a list of polynomials in <M>R</M> that generate the ideal <M>I</M></Item> <Item>a list <M>Q = [q_1, ..., q_n]</M> where each <M>q_i \in S/J</M> is the image of the indeterminate <M>x_i</M> in <M>R</M> under the homomorphism.</Item> </List> The target ideal <M>J</M> is assumed to be the image of <M>I</M> under the homomorphism. <Subsection> <Heading>Implementation details</Heading> Various different internal representations are used for ring homomorphisms in &HAPprime;, depending on the source and target ring. The user need not be concerned with the different representations, which correspond to the five constructors <Ref Func="HAPRingToSubringHomomorphism"/>, <Ref Func="HAPSubringToRingHomomorphism" Label="for relations defined at source"/>, <Ref Func="HAPRingHomomorphismByIndeterminateMap"/>, <Ref Func="HAPRingReductionHomomorphism" Label="for ring presentation"/> and <Ref Func="HAPZeroRingHomomorphism"/>, and which are hopefully largely self-explanatory. <P/> Most of the provided representations of ring homomorphisms use Gröbner bases and polynomial reduction to perform the mapping. This uses the <Package>singular</Package> package <Ref Chap="singular" BookName="singular"/> which gives good speed and access to improved monomial orderings. This datatype cannot be used without the <Package>singular</Package> package. </Subsection> <Subsection Label="RingHomEliminationOrdering"> <Heading>Elimination orderings</Heading> Using Gröbner bases to map from one polynomial ring <M>R</M> to another polynomial ring <M>S</M> relies on applying a global ordering to the joint ring <M>R \cup S</M>. For all polynomials <M>p \in R</M> and <M>q \in S</M>, this ordering must give <M>p > q</M>, so that terms involving elements of <M>R</M> will be replaced by those in <M>S</M>. A straightforward solution is to use a lexicographic term ordering which orders the indeterminates of <M>R</M> before those of <M>S</M>. 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 &GAP; options stack <Ref Chap="Options Stack" BookName="ref"/>, and setting the options <C>EliminationIndexOrder</C> and <C>EliminationBlockOrdering</C> as described below. <P/> The option <C>EliminationIndexOrder</C> determines the indeterminate ordering to use. Possible values are the following strings: <List> <Item><C>"Forward"</C> (default) Indeterminates are ordered as in the definition of <M>R</M> and <M>S</M>: <M>p_1 > p_2 > \ldots > p_n > q_1 > q_2 > \ldots > q_m</M>.</Item> <Item><C>"Reverse"</C> Lexicographic ordering in reverse order to that in the definition of <M>R</M> and <M>S</M>: <M>p_n > p_{n-1} > \ldots > p_1 > q_m > q_{m-1} > \ldots > q_1</M>.</Item> <Item><C>"Shuffle"</C> Lexicographic ordering using a random shuffle of the indeterminates in <M>R</M> and <M>S</M>.</Item> <Item><C>"ShuffleNN"</C> where <C>NN</C> is some non-negative integer. This is the same as <C>Shuffle</C>, but using the value of <C>NN</C> as the random seed (and hence is deterministic).</Item> </List> <P/> When comparing two monomials, the elimination ordering ensures that the parts of the two monomials involving the indeterminates from <M>R</M> are compared first, and then in the event of a tie, the part involving those from <M>S</M> are compared. The option <C>EliminationBlockOrdering</C> 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 <C>"LexGrlex"</C> which means lexicographic ordering over the indeterminates of <M>R</M>, and graded lexicographic over the indeterminates of <M>S</M>. <List> <Item><C>"Lex"</C> Lexicographic ordering, the equivalent of the &GAP; ordering <Ref Func="MonomialLexOrdering" BookName="ref"/>).</Item> <Item><C>"Grlex"</C> Graded lexicographic ordering, the equivalent of <Ref Func="MonomialGrlexOrdering" BookName="ref"/>.</Item> <Item><C>"Grevlex"</C> Graded reverse lexicographic ordering, the equivalent of <Ref Func="MonomialGrevlexOrdering" BookName="ref"/>.</Item> </List> </Subsection> </Section> <Section> <Heading>Construction functions</Heading> <#Include Label="HAPRingToSubringHomomorphism_DTmanRingHomomorphism_Con"> <#Include Label="HAPSubringToRingHomomorphism_DTmanRingHomomorphism_Con"> <#Include Label="HAPRingHomomorphismByIndeterminateMap_DTmanRingHomomorphism_Con"> <#Include Label="HAPRingReductionHomomorphism_DTmanRingHomomorphism_Con"> <#Include Label="PartialCompositionRingHomomorphism_DTmanRingHomomorphism_Con"> <#Include Label="HAPZeroRingHomomorphism_DTmanRingHomomorphism_Con"> <#Include Label="InverseRingHomomorphism_DTmanRingHomomorphism_Con"> <#Include Label="CompositionRingHomomorphism_DTmanRingHomomorphism_Con"> </Section> <Section> <Heading>Data access functions</Heading> <#Include Label="SourceGenerators_DTmanRingHomomorphism_Dat"> <#Include Label="SourceRelations_DTmanRingHomomorphism_Dat"> <#Include Label="SourcePolynomialRing_DTmanRingHomomorphism_Dat"> <#Include Label="ImageGenerators_DTmanRingHomomorphism_Dat"> <#Include Label="ImageRelations_DTmanRingHomomorphism_Dat"> <#Include Label="ImagePolynomialRing_DTmanRingHomomorphism_Dat"> </Section> <Section> <Heading>General functions</Heading> <#Include Label="ImageOfRingHomomorphism_DTmanRingHomomorphism_Gen"> <#Include Label="PreimageOfRingHomomorphism_DTmanRingHomomorphism_Gen"> </Section> <Section Label="RingHomomorphismExample"> <Heading>Example: Constructing and using a <K>HAPRingHomomorphism</K></Heading> As an initial example, we shall construct a ring homomorphism <M>\phi: k[x_1, x_2] \to k[x_3, x_4]</M> (i.e. ideal) with the mapping <M>x_1 \mapsto x_3</M> and <M>x_2 \mapsto x_3 + x_4</M>. In all these examples, we shall take <M>k</M> 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. <!-- gap> R := PolynomialRing(GF(2), 2);; gap> S := PolynomialRing(GF(2), 2, IndeterminatesOfPolynomialRing(R));; gap> phi := HAPRingToSubringHomomorphism(R, [], [S.1, S.1+S.2]); gap> p := ImageOfRingHomomorphism(phi, R.1^3+R.1*R.2+R.2); gap> PreimageOfRingHomomorphism(phi, p); --> <Example><![CDATA[ gap> R := PolynomialRing(GF(2), 2);; gap> S := PolynomialRing(GF(2), 2, IndeterminatesOfPolynomialRing(R));; gap> phi := HAPRingToSubringHomomorphism(R, [], [S.1, S.1+S.2]); <Ring homomorphism> gap> 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> PreimageOfRingHomomorphism(phi, p); x_1^3+x_1*x_2+x_2 ]]></Example> <P/> Some ring presentations are not in minimal form: there is an isomorphic ring in fewer indeterminates. The <Ref Func="HAPRingReductionHomomorphism" Label="for ring presentation"/> function can find and return an isomorphism that maps to this reduced ring. For example, the ring <M>k[x_1, x_2, x_3]/(x_1^2 + x_2^3, x_2^2 + x_3)</M> has an isomorphic presentation in only two indeterminates, as this computation shows: <!-- gap> R := PolynomialRing(GF(2), 3);; gap> I := [R.1^2+R.2^3, R.2^2+R.3]; gap> phi := HAPRingReductionHomomorphism(R, I); gap> ImagePolynomialRing(phi); gap> ImageRelations(phi); --> <!-- This should be an Example, but the autoloaded ResClasses package modifies Print for PolynomialRings, so the output differs if this package is available --> <Log><![CDATA[ gap> R := PolynomialRing(GF(2), 3);; gap> I := [R.1^2+R.2^3, R.2^2+R.3]; [ x_2^3+x_1^2, x_2^2+x_3 ] gap> phi := HAPRingReductionHomomorphism(R, I); <Ring homomorphism> gap> ImagePolynomialRing(phi); GF(2)[x_4,x_5] gap> ImageRelations(phi); [ x_5^3+x_4^2 ] ]]></Log> <P/> The source and target of <C>HAPRingHomomorphism</C>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 <M>R/I</M> where <M>R = k[x_1, x_2, x_3]</M> and <M>I = x_1^3+x_3</M> and the subring generated by <M>(x_1, x_2, x_3^2)</M>. If we wish to specify the homomorphism <M>\phi: R/I \to S/J</M> where <M>S = k[x_4, x_5, x_6]</M> with the natural map from the generators of <M>R</M> to those of <M>S</M> then we only need specify the original ideal <M>I</M>, even though it is not in the subring. The intersection between <M>I</M> and the subring is found to be <M>x_1^4+x_3^2</M>, and it is this ideal that is used in the homomorphism, as this example shows: <!-- gap> R := PolynomialRing(GF(2), 3);; gap> I := [R.1^2+R.3]; gap> S := PolynomialRing(GF(2), 3, IndeterminatesOfPolynomialRing(R));; gap> phi := HAPSubringToRingHomomorphism([R.1, R.2, R.3^2], I, S); gap> Display(phi); gap> Display(InverseRingHomomorphism(phi)); --> <Example><![CDATA[ gap> R := PolynomialRing(GF(2), 3);; gap> I := [R.1^2+R.3]; [ x_1^2+x_3 ] gap> S := PolynomialRing(GF(2), 3, IndeterminatesOfPolynomialRing(R));; gap> phi := HAPSubringToRingHomomorphism([R.1, R.2, R.3^2], I, S); <Ring homomorphism> gap> Display(phi); Ring homomorphism x_1 -> x_4 x_2 -> x_5 x_3^2 -> x_6 with relations [ x_1^2+x_3 ] and [ x_4^4+x_6 ] gap> Display(InverseRingHomomorphism(phi)); Ring homomorphism x_4 -> x_1 x_5 -> x_2 x_6 -> x_3^2 with relations [ x_4^4+x_6 ] and [ x_1^4+x_3^2 ] ]]></Example> <P/> Ring homomorphisms can also be composed with each other. For example, we can take the <Ref Func="HAPSubringToRingHomomorphism" Label="for relations defined at image"/> above and change the target indeterminates by composing this with a <Ref Func="HAPRingHomomorphismByIndeterminateMap"/>: <!-- gap> R := PolynomialRing(GF(2), 3);; gap> I := [R.1^2+R.3]; gap> S := PolynomialRing(GF(2), 3, IndeterminatesOfPolynomialRing(R));; gap> phi := HAPSubringToRingHomomorphism([R.1, R.2, R.3^2], I, S); gap> # gap> T := PolynomialRing(GF(2), 3, [R.1, R.2, R.3, S.1, S.2, S.3]);; gap> phi2 := HAPRingHomomorphismByIndeterminateMap( ImagePolynomialRing(phi), ImageRelations(phi), T); gap> Display(CompositionRingHomomorphism(phi, phi2)); --> <Example><![CDATA[ gap> R := PolynomialRing(GF(2), 3);; gap> I := [R.1^2+R.3]; [ x_1^2+x_3 ] gap> S := PolynomialRing(GF(2), 3, IndeterminatesOfPolynomialRing(R));; gap> phi := HAPSubringToRingHomomorphism([R.1, R.2, R.3^2], I, S); <Ring homomorphism> gap> # gap> T := PolynomialRing(GF(2), 3, [R.1, R.2, R.3, S.1, S.2, S.3]);; gap> phi2 := HAPRingHomomorphismByIndeterminateMap( > ImagePolynomialRing(phi), ImageRelations(phi), T); <Ring homomorphism> gap> Display(CompositionRingHomomorphism(phi, phi2)); Ring homomorphism x_1 -> x_7 x_2 -> x_8 x_3^2 -> x_9 with relations [ x_1^2+x_3 ] and [ x_7^4+x_9 ] ]]></Example> </Section> </Chapter>