Sophie

Sophie

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

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 (Wedderga) - Chapter 5: Crossed products</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="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>

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

<p><a id="X7FB21779832CE1CB" name="X7FB21779832CE1CB"></a></p>
<div class="ChapSects"><a href="chap5.html#X7FB21779832CE1CB">5 <span class="Heading">Crossed products</span></a>
<div class="ContSect"><span class="nocss">&nbsp;</span><a href="chap5.html#X79122C7F877430A7">5.1 <span class="Heading">Construction of crossed products</span></a>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap5.html#X797F31EF7B51A4DF">5.1-1 CrossedProduct</a></span>
</div>
<div class="ContSect"><span class="nocss">&nbsp;</span><a href="chap5.html#X8560A2F37B608A9F">5.2 <span class="Heading">Crossed product elements and their properties</span></a>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap5.html#X7D2313AA82F1D5CC">5.2-1 ElementOfCrossedProduct</a></span>
</div>
</div>

<h3>5 <span class="Heading">Crossed products</span></h3>

<p>The package <strong class="pkg">Wedderga</strong> provides functions to construct crossed products over a group with coefficients in an associative ring with identity, and with the multiplication determined by a given action and twisting (see <a href="chap7.html#X7FB21779832CE1CB"><b>7.6</b></a> for definitions). This can be done using the function <code class="func">CrossedProduct</code> (<a href="chap5.html#X797F31EF7B51A4DF"><b>5.1-1</b></a>).</p>

<p>Note that this function does not check the associativity conditions, so in fact it is the NC-version of itself, and its output will be always assumed to be associative. For all crossed products that appear in <strong class="pkg">Wedderga</strong> algorithms the associativity follows from theoretical arguments, so the usage of the NC-method in the package is safe. If the user will try to construct a crossed product with his own action and twisting, he/she should check the associativity conditions himself/herself to make sure that the result is correct.</p>

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

<h4>5.1 <span class="Heading">Construction of crossed products</span></h4>

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

<h5>5.1-1 CrossedProduct</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; CrossedProduct</code>( <var class="Arg">R, G, act, twist</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><b>Returns: </b>Ring in the category <code class="code">IsCrossedProduct</code>.</p>

<p>The input should be formed by:</p>

<p>* an associative ring <var class="Arg">R</var>,</p>

<p>* a group <var class="Arg">G</var>,</p>

<p>* a function <var class="Arg">act(RG,g)</var> of two arguments: the crossed product <var class="Arg">RG</var> and an element <var class="Arg">g</var> in G. It must return a mapping from <var class="Arg">R</var> to <var class="Arg">R</var> which can be applied via the "<code class="code">\^</code>" operation, and</p>

<p>* a function <var class="Arg">twist(RG,g,h)</var> of three arguments: the crossed product <var class="Arg">RG</var> and a pair of elements of <var class="Arg">G</var>. It must return an invertible element of <var class="Arg">R</var>.</p>

<p>Returns the crossed product of <var class="Arg">G</var> over the ring <var class="Arg">R</var> with action <var class="Arg">act</var> and twisting <var class="Arg">twist</var>.</p>

<p>The resulting crossed product belongs to the category <code class="code">IsCrossedProduct</code>, which is defined as a subcategory of <code class="code">IsFLMLORWithOne</code>.</p>

<p>An example of the trivial action:</p>


<table class="example">
<tr><td><pre> 
act := function(RG,a)
    return IdentityMapping( LeftActingDomain( RG ) );
end;
</pre></td></tr></table>

<p>and the trivial twisting:</p>


<table class="example">
<tr><td><pre>
twist := function( RG , g, h )
    return One( LeftActingDomain( RG ) );
end;
</pre></td></tr></table>

<p>Let n be a positive integer and xi_n an n-th complex primitive root of unity. The natural action of the group of units of ℤ_n, the ring of integers modulo n, on ℚ (xi_n) can be defined as follows:</p>


<table class="example">
<tr><td><pre> 
act := function(RG,a)
    return ANFAutomorhism( LeftActingDomain( RG ) , Int( a ) );
end;
</pre></td></tr></table>

<p>In the following example one constructs the Hamiltonian quaternion algebra over the rationals as a crossed product of the group of units of the cyclic group of order 2 over ℚ (i)=GaussianRationals. One realizes the cyclic group of order 2 as the group of units of ℤ / 4 ℤ and one uses the natural isomorphism ℤ / 4 ℤ -&gt; Gal( ℚ (i)/ ℚ ) to describe the action.</p>


<table class="example">
<tr><td><pre>

gap&gt; R := GaussianRationals;
GaussianRationals
gap&gt; G := Units( ZmodnZ(4) );
&lt;group with 1 generators&gt;
gap&gt; act := function(RG,g)
&gt; return ANFAutomorphism( LeftActingDomain(RG), Int(g) );
&gt; end;
function( RG, g ) ... end
gap&gt; twist1 := function( RG, g, h )
&gt; if IsOne(g) or IsOne(h) then
&gt;    return One(LeftActingDomain(RG));
&gt; else
&gt;    return -One(LeftActingDomain(RG));
&gt; fi;
&gt; end;
function( RG, g, h ) ... end
gap&gt; RG := CrossedProduct( R, G, act, twist1 );
&lt;crossed product over GaussianRationals of a group of size 2&gt;
gap&gt; i := E(4) * One(G)^Embedding(G,RG); 
(ZmodnZObj( 1, 4 ))*(E(4))
gap&gt; j := ZmodnZObj(3,4)^Embedding(G,RG); 
(ZmodnZObj( 3, 4 ))*(1)
gap&gt; i^2;
(ZmodnZObj( 1, 4 ))*(-1)
gap&gt; j^2;
(ZmodnZObj( 1, 4 ))*(-1)
gap&gt; i*j+j*i;  
&lt;zero&gt; of ...

</pre></td></tr></table>

<p>One can construct the following generalized quaternion algebra with the same action and a different twisting</p>

<p class="pcenter">
ℚ (i,j|i^2=-1,j^2=-3,ji=-ij)
</p>


<table class="example">
<tr><td><pre>

gap&gt; twist2:=function(RG,g,h)
&gt; if IsOne(g) or IsOne(h) then
&gt;     return One(LeftActingDomain( RG ));
&gt; else
&gt;     return -3*One(LeftActingDomain( RG ));
&gt; fi;
&gt; end;
function( RG, g, h ) ... end
gap&gt; RG := CrossedProduct( R, G, act, twist2 );  
&lt;crossed product over GaussianRationals of a group of size 2&gt;
gap&gt; i := E(4) * One(G)^Embedding(G,RG); 
(ZmodnZObj( 1, 4 ))*(E(4))
gap&gt; j := ZmodnZObj(3,4)^Embedding(G,RG);  
(ZmodnZObj( 3, 4 ))*(1)
gap&gt; i^2;                           
(ZmodnZObj( 1, 4 ))*(-1)
gap&gt; j^2;                                
(ZmodnZObj( 1, 4 ))*(-3)
gap&gt; i*j+j*i;                       
&lt;zero&gt; of ...

</pre></td></tr></table>

<p>The following example shows how to construct the Hamiltonian quaternion algebra over the rationals using the rationals as coefficient ring and the Klein group as the underlying group.</p>


<table class="example">
<tr><td><pre>

gap&gt; C2 := CyclicGroup(2);
&lt;pc group of size 2 with 1 generators&gt;
gap&gt; G := DirectProduct(C2,C2);
&lt;pc group of size 4 with 2 generators&gt;
gap&gt; act := function(RG,a)
&gt;     return IdentityMapping( LeftActingDomain(RG));
&gt; end;
function( RG, a ) ... end
gap&gt; twist := function( RG, g , h )
&gt; local one,g1,g2,h1,h2,G;
&gt; G := UnderlyingMagma( RG );
&gt; one := One( C2 );
&gt; g1 := Image( Projection(G,1), g );
&gt; g2 := Image( Projection(G,2), g );
&gt; h1 := Image( Projection(G,1), h );
&gt; h2 := Image( Projection(G,2), h );
&gt; if g = One( G ) or h = One( G ) then return 1;
&gt;   elif IsOne(g1) and not IsOne(g2) and not IsOne(h1) and not IsOne(h2)
&gt;     then return 1;
&gt;   elif not IsOne(g1) and IsOne(g2) and IsOne(h1) and not IsOne(h2)
&gt;     then return 1;
&gt;   elif not IsOne(g1) and not IsOne(g2) and not IsOne(h1) and IsOne(h2)
&gt;     then return 1;
&gt;   else return -1;
&gt; fi;
&gt; end;
function( RG, g, h ) ... end
gap&gt; HQ := CrossedProduct( Rationals, G, act, twist );
&lt;crossed product over Rationals of a group of size 4&gt;

</pre></td></tr></table>

<p>Changing the rationals by the integers as coefficient ring one can construct the Hamiltonian quaternion ring.</p>


<table class="example">
<tr><td><pre>

gap&gt; HZ := CrossedProduct( Integers, G, act, twist );
&lt;crossed product over Integers of a group of size 4&gt;
gap&gt; i := GeneratorsOfGroup(G)[1]^Embedding(G,HZ); 
(f1)*(1)
gap&gt; j := GeneratorsOfGroup(G)[2]^Embedding(G,HZ);
(f2)*(1)
gap&gt; i^2;
(&lt;identity&gt; of ...)*(-1)
gap&gt; j^2; 
(&lt;identity&gt; of ...)*(-1)
gap&gt; i*j+j*i;                                      
&lt;zero&gt; of ...

</pre></td></tr></table>

<p>One can extract the arguments used for the construction of the crossed product using the following attributes:</p>

<p>* <code class="code">LeftActingDomain</code> for the coefficient ring.</p>

<p>* <code class="code">UnderlyingMagma</code> for the underlying group.</p>

<p>* <code class="code">ActionForCrossedProduct</code> for the action.</p>

<p>* <code class="code">TwistingForCrossedProduct</code> for the twisting.</p>


<table class="example">
<tr><td><pre>
  
gap&gt; LeftActingDomain(HZ);
Integers
gap&gt; G:=UnderlyingMagma(HZ);
&lt;pc group of size 4 with 2 generators&gt;
gap&gt; ac := ActionForCrossedProduct(HZ);
function( RG, a ) ... end
gap&gt; List( G , x -&gt; ac( HZ, x ) );
[ IdentityMapping( Integers ), IdentityMapping( Integers ),
  IdentityMapping( Integers ), IdentityMapping( Integers ) ]
gap&gt; tw := TwistingForCrossedProduct( HZ );
function( RG, g, h ) ... end
gap&gt; List( G, x -&gt; List( G , y -&gt; tw( HZ, x, y ) ) );
[ [ 1, 1, 1, 1 ], [ 1, -1, -1, 1 ], [ 1, 1, -1, -1 ], [ 1, -1, 1, -1 ] ]  

</pre></td></tr></table>

<p>Some more examples of crossed products arise from the <em>Wedderburn decomposition</em> (<a href="chap7.html#X87273420791F220E"><b>7.3</b></a>) of group algebras.</p>


<table class="example">
<tr><td><pre>

gap&gt; G := SmallGroup(32,50);
&lt;pc group of size 32 with 5 generators&gt;
gap&gt; A := SimpleAlgebraByCharacter( GroupRing(Rationals,G), Irr(G)[17]) ;
( &lt;crossed product with center Rationals over GaussianRationals of a group of \
size 2&gt;^[ 2, 2 ] )
gap&gt; SimpleAlgebraByCharacterInfo( GroupRing(Rationals,G), Irr(G)[17]) ;
[ 2, Rationals, 4, [ 2, 3, 2 ] ]
gap&gt; B := LeftActingDomain(A);
&lt;crossed product with center Rationals over GaussianRationals of a group of si\
ze 2&gt;
gap&gt; L := LeftActingDomain(B);
GaussianRationals
gap&gt; H := UnderlyingMagma( B );
&lt;group of size 2 with 2 generators&gt;
gap&gt; Elements(H);
[ ZmodnZObj( 1, 4 ), ZmodnZObj( 3, 4 ) ]
gap&gt; i := E(4) * One(H)^Embedding(H,B);
(ZmodnZObj( 1, 4 ))*(E(4))
gap&gt; j := ZmodnZObj(3,4)^Embedding(H,B);
(ZmodnZObj( 3, 4 ))*(1)
gap&gt; i^2;
(ZmodnZObj( 1, 4 ))*(-1)
gap&gt; j^2;
(ZmodnZObj( 1, 4 ))*(-1)
gap&gt; i*j+j*i;
&lt;zero&gt; of ...
gap&gt; ac := ActionForCrossedProduct( B );
function( RG, a ) ... end
gap&gt; tw := TwistingForCrossedProduct( B );
function( RG, a, b ) ... end
gap&gt; List( H , x -&gt; ac( B, x ) );
[ IdentityMapping( GaussianRationals ), ANFAutomorphism( GaussianRationals,
    3 ) ]
gap&gt; List( H , x -&gt; List( H , y -&gt; tw( B, x, y ) ) );
[ [ 1, 1 ], [ 1, -1 ] ]

</pre></td></tr></table>


<table class="example">
<tr><td><pre>

gap&gt; QG:=GroupRing( Rationals, SmallGroup(24,3) );;
gap&gt; WedderburnDecomposition(QG);
[ Rationals, CF(3), ( Rationals^[ 3, 3 ] ),
  &lt;crossed product with center Rationals over GaussianRationals of a group of \
size 2&gt;, &lt;crossed product with center CF(3) over AsField( CF(3), CF(
    12) ) of a group of size 2&gt; ]
gap&gt; R:=WedderburnDecomposition( QG )[4];
&lt;crossed product with center Rationals over GaussianRationals of a group of si\
ze 2&gt;
gap&gt; IsCrossedProduct(R);
true
gap&gt; IsAlgebra(R);
true
gap&gt; IsRing(R);       
true
gap&gt; LeftActingDomain( R );
GaussianRationals
gap&gt; AsList( UnderlyingMagma( R ) );
[ ZmodnZObj( 1, 4 ), ZmodnZObj( 3, 4 ) ]
gap&gt; Print( ActionForCrossedProduct( R ) ); Print("\n");
function ( RG, a )
    local  cond, redu;
    cond := OperationRecord( RG ).cond;
    redu := OperationRecord( RG ).redu;
    return
     ANFAutomorphism( CF( cond ), Int( PreImagesRepresentative( redu, a ) ) );
end
gap&gt; Print( TwistingForCrossedProduct( R ) ); Print("\n");                     
function ( RG, a, b )
    local  orderroot, cocycle;
    orderroot := OperationRecord( RG ).orderroot;
    cocycle := OperationRecord( RG ).cocycle;
    return E( orderroot ) ^ Int( cocycle( a, b ) );
end
gap&gt; IsAssociative(R);
true
gap&gt; IsFinite(R);           
false
gap&gt; IsFiniteDimensional(R);
true
gap&gt; AsList(Basis(R));
[ (ZmodnZObj( 1, 4 ))*(1), (ZmodnZObj( 3, 4 ))*(1) ] 
gap&gt; GeneratorsOfLeftOperatorRingWithOne(R);
[ (ZmodnZObj( 1, 4 ))*(1), (ZmodnZObj( 3, 4 ))*(1) ]
gap&gt; One(R);
(ZmodnZObj( 1, 4 ))*(1)
gap&gt; Zero(R);
&lt;zero&gt; of ...
gap&gt; Characteristic(R);
0
gap&gt; CenterOfCrossedProduct(R);
Rationals

</pre></td></tr></table>

<p>The next example shows how one can use <code class="func">CrossedProduct</code> to produce generalized quaternion algebras. Note that one can construct quaternion algebras using the <strong class="pkg">GAP</strong> function <code class="code">QuaternionAlgebra</code>.</p>


<table class="example">
<tr><td><pre>

gap&gt; Quat := function(R,a,b)
&gt;
&gt; local G,act,twist;
&gt;
&gt; if not(a in R and b in R and a &lt;&gt; Zero(R) and b &lt;&gt; Zero(R) ) then
&gt; Error("&lt;a&gt;  and &lt;b&gt; must be non zero elements of &lt;R&gt;!!!");
&gt; fi;
&gt;
&gt; G := SmallGroup(4,2);
&gt;
&gt; act := function(RG,a)
&gt;     return IdentityMapping( LeftActingDomain(RG));
&gt; end;
&gt;
&gt; twist := function( RG, g , h )
&gt; local one,g1,g2;
&gt; one := One(G);
&gt; g1 := G.1;
&gt; g2 := G.2;
&gt; if   g = one or h = one then
&gt;   return One(R);
&gt; elif g = g1 then
&gt;   if h = g2 then
&gt;     return One(R);
&gt;   else
&gt;     return a;
&gt;   fi;
&gt; elif g = g2 then
&gt;   if h = g1 then
&gt;     return -One(R);
&gt;   elif h=g2 then
&gt;     return b;
&gt;   else
&gt;     return -b;
&gt;   fi;
&gt; else
&gt;   if h = g1 then
&gt;     return -b;
&gt;   elif h=g2 then
&gt;     return b;
&gt;   else
&gt;     return -a*b;
&gt;   fi;
&gt; fi;
&gt; end;
&gt; return CrossedProduct(R,G,act,twist);
&gt; end;
function( R, a, b ) ... end
gap&gt; HQ := Quat(Rationals,2,3);
&lt;crossed product over Rationals of a group of size 4&gt;
gap&gt; G := UnderlyingMagma(HQ);
&lt;pc group of size 4 with 2 generators&gt;
gap&gt; tw := TwistingForCrossedProduct( HQ );
function( RG, g, h ) ... end
gap&gt; List( G, x -&gt; List( G, y -&gt; tw( HQ, x, y ) ) );
[ [ 1, 1, 1, 1 ], [ 1, 3, -1, -3 ], [ 1, 1, 2, 2 ], [ 1, 3, -3, -6 ] ]

</pre></td></tr></table>

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

<h4>5.2 <span class="Heading">Crossed product elements and their properties</span></h4>

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

<h5>5.2-1 ElementOfCrossedProduct</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; ElementOfCrossedProduct</code>( <var class="Arg">Fam, zerocoeff, coeffs, elts</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns the element m_1*c_1 + ... + m_n*c_n of a crossed product, where <var class="Arg">elts</var> = [ m_1, m_2, ..., m_n ] is a list of magma elements, <var class="Arg">coeffs</var> = [ c_1, c_2, ..., c_n ] is a list of coefficients. The output belongs to the crossed product whose elements lie in the family <var class="Arg">Fam</var>. The second argument <var class="Arg">zerocoeff</var> must be the zero element of the coefficient ring containing coefficients c_i, and will be stored in the attribute <code class="code">ZeroCoefficient</code> of the crossed product element.</p>

<p>The output will be in the category <code class="code">IsElementOfCrossedProduct</code>, which is a subcategory of <code class="code">IsRingElementWithInverse</code>. It will have the presentation <code class="code">IsCrossedProductObjDefaultRep</code>.</p>

<p>Similarly to magma rings, one can obtain the list of coefficients and elements with <code class="code">CoefficientsAndMagmaElements</code> .</p>

<p>Also note from the example below and several other examples in this chapter that instead of <code class="code">ElementOfCrossedProduct</code> one can use <code class="code">Embedding</code> to embed elements of the coefficient ring and of the underlying magma into the crossed product.</p>


<table class="example">
<tr><td><pre>

gap&gt; QG := GroupRing( Rationals, SmallGroup(24,3) );
&lt;algebra-with-one over Rationals, with 4 generators&gt;
gap&gt; R := WedderburnDecomposition( QG )[4];
&lt;crossed product with center Rationals over GaussianRationals of a group of si\
ze 2&gt;
gap&gt; H := UnderlyingMagma( R );;
gap&gt; fam := ElementsFamily( FamilyObj( R ) );;
gap&gt; g := ElementOfCrossedProduct( fam, 0, [ 1, E(4) ], AsList(H) );
(ZmodnZObj( 1, 4 ))*(1)+(ZmodnZObj( 3, 4 ))*(E(4))
gap&gt; CoefficientsAndMagmaElements( g );    
[ ZmodnZObj( 1, 4 ), 1, ZmodnZObj( 3, 4 ), E(4) ]
gap&gt; t := List( H, x -&gt; x^Embedding( H, R ) );
[ (ZmodnZObj( 1, 4 ))*(1), (ZmodnZObj( 3, 4 ))*(1) ]
gap&gt; t[1] + t[2]*E(4);  
(ZmodnZObj( 1, 4 ))*(1)+(ZmodnZObj( 3, 4 ))*(E(4))
gap&gt; g = t[1] + E(4)*t[2];
false
gap&gt; g = t[1] + t[2]*E(4);
true
gap&gt; h := ElementOfCrossedProduct( fam, 0, [ E(4), 1 ], AsList(H) );     
(ZmodnZObj( 1, 4 ))*(E(4))+(ZmodnZObj( 3, 4 ))*(1)
gap&gt; g+h;
(ZmodnZObj( 1, 4 ))*(1+E(4))+(ZmodnZObj( 3, 4 ))*(1+E(4))
gap&gt; g*E(4);
(ZmodnZObj( 1, 4 ))*(E(4))+(ZmodnZObj( 3, 4 ))*(-1)
gap&gt; E(4)*g;     
(ZmodnZObj( 1, 4 ))*(E(4))+(ZmodnZObj( 3, 4 ))*(1)
gap&gt; g*h;
(ZmodnZObj( 1, 4 ))*(2*E(4))

</pre></td></tr></table>


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