<?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"> <a href="chap0.html">Top of Book</a> <a href="chap4.html">Previous Chapter</a> <a href="chap6.html">Next Chapter</a> </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"> </span><a href="chap5.html#X79122C7F877430A7">5.1 <span class="Heading">Construction of crossed products</span></a> <span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X797F31EF7B51A4DF">5.1-1 CrossedProduct</a></span> </div> <div class="ContSect"><span class="nocss"> </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"> </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">> 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 ℤ -> Gal( ℚ (i)/ ℚ ) to describe the action.</p> <table class="example"> <tr><td><pre> gap> R := GaussianRationals; GaussianRationals gap> G := Units( ZmodnZ(4) ); <group with 1 generators> gap> act := function(RG,g) > return ANFAutomorphism( LeftActingDomain(RG), Int(g) ); > end; function( RG, g ) ... end gap> twist1 := function( RG, g, h ) > if IsOne(g) or IsOne(h) then > return One(LeftActingDomain(RG)); > else > return -One(LeftActingDomain(RG)); > fi; > end; function( RG, g, h ) ... end gap> RG := CrossedProduct( R, G, act, twist1 ); <crossed product over GaussianRationals of a group of size 2> gap> i := E(4) * One(G)^Embedding(G,RG); (ZmodnZObj( 1, 4 ))*(E(4)) gap> j := ZmodnZObj(3,4)^Embedding(G,RG); (ZmodnZObj( 3, 4 ))*(1) gap> i^2; (ZmodnZObj( 1, 4 ))*(-1) gap> j^2; (ZmodnZObj( 1, 4 ))*(-1) gap> i*j+j*i; <zero> 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> twist2:=function(RG,g,h) > if IsOne(g) or IsOne(h) then > return One(LeftActingDomain( RG )); > else > return -3*One(LeftActingDomain( RG )); > fi; > end; function( RG, g, h ) ... end gap> RG := CrossedProduct( R, G, act, twist2 ); <crossed product over GaussianRationals of a group of size 2> gap> i := E(4) * One(G)^Embedding(G,RG); (ZmodnZObj( 1, 4 ))*(E(4)) gap> j := ZmodnZObj(3,4)^Embedding(G,RG); (ZmodnZObj( 3, 4 ))*(1) gap> i^2; (ZmodnZObj( 1, 4 ))*(-1) gap> j^2; (ZmodnZObj( 1, 4 ))*(-3) gap> i*j+j*i; <zero> 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> C2 := CyclicGroup(2); <pc group of size 2 with 1 generators> gap> G := DirectProduct(C2,C2); <pc group of size 4 with 2 generators> gap> act := function(RG,a) > return IdentityMapping( LeftActingDomain(RG)); > end; function( RG, a ) ... end gap> twist := function( RG, g , h ) > local one,g1,g2,h1,h2,G; > G := UnderlyingMagma( RG ); > one := One( C2 ); > g1 := Image( Projection(G,1), g ); > g2 := Image( Projection(G,2), g ); > h1 := Image( Projection(G,1), h ); > h2 := Image( Projection(G,2), h ); > if g = One( G ) or h = One( G ) then return 1; > elif IsOne(g1) and not IsOne(g2) and not IsOne(h1) and not IsOne(h2) > then return 1; > elif not IsOne(g1) and IsOne(g2) and IsOne(h1) and not IsOne(h2) > then return 1; > elif not IsOne(g1) and not IsOne(g2) and not IsOne(h1) and IsOne(h2) > then return 1; > else return -1; > fi; > end; function( RG, g, h ) ... end gap> HQ := CrossedProduct( Rationals, G, act, twist ); <crossed product over Rationals of a group of size 4> </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> HZ := CrossedProduct( Integers, G, act, twist ); <crossed product over Integers of a group of size 4> gap> i := GeneratorsOfGroup(G)[1]^Embedding(G,HZ); (f1)*(1) gap> j := GeneratorsOfGroup(G)[2]^Embedding(G,HZ); (f2)*(1) gap> i^2; (<identity> of ...)*(-1) gap> j^2; (<identity> of ...)*(-1) gap> i*j+j*i; <zero> 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> LeftActingDomain(HZ); Integers gap> G:=UnderlyingMagma(HZ); <pc group of size 4 with 2 generators> gap> ac := ActionForCrossedProduct(HZ); function( RG, a ) ... end gap> List( G , x -> ac( HZ, x ) ); [ IdentityMapping( Integers ), IdentityMapping( Integers ), IdentityMapping( Integers ), IdentityMapping( Integers ) ] gap> tw := TwistingForCrossedProduct( HZ ); function( RG, g, h ) ... end gap> List( G, x -> List( G , y -> 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> G := SmallGroup(32,50); <pc group of size 32 with 5 generators> gap> A := SimpleAlgebraByCharacter( GroupRing(Rationals,G), Irr(G)[17]) ; ( <crossed product with center Rationals over GaussianRationals of a group of \ size 2>^[ 2, 2 ] ) gap> SimpleAlgebraByCharacterInfo( GroupRing(Rationals,G), Irr(G)[17]) ; [ 2, Rationals, 4, [ 2, 3, 2 ] ] gap> B := LeftActingDomain(A); <crossed product with center Rationals over GaussianRationals of a group of si\ ze 2> gap> L := LeftActingDomain(B); GaussianRationals gap> H := UnderlyingMagma( B ); <group of size 2 with 2 generators> gap> Elements(H); [ ZmodnZObj( 1, 4 ), ZmodnZObj( 3, 4 ) ] gap> i := E(4) * One(H)^Embedding(H,B); (ZmodnZObj( 1, 4 ))*(E(4)) gap> j := ZmodnZObj(3,4)^Embedding(H,B); (ZmodnZObj( 3, 4 ))*(1) gap> i^2; (ZmodnZObj( 1, 4 ))*(-1) gap> j^2; (ZmodnZObj( 1, 4 ))*(-1) gap> i*j+j*i; <zero> of ... gap> ac := ActionForCrossedProduct( B ); function( RG, a ) ... end gap> tw := TwistingForCrossedProduct( B ); function( RG, a, b ) ... end gap> List( H , x -> ac( B, x ) ); [ IdentityMapping( GaussianRationals ), ANFAutomorphism( GaussianRationals, 3 ) ] gap> List( H , x -> List( H , y -> tw( B, x, y ) ) ); [ [ 1, 1 ], [ 1, -1 ] ] </pre></td></tr></table> <table class="example"> <tr><td><pre> gap> QG:=GroupRing( Rationals, SmallGroup(24,3) );; gap> WedderburnDecomposition(QG); [ Rationals, CF(3), ( Rationals^[ 3, 3 ] ), <crossed product with center Rationals over GaussianRationals of a group of \ size 2>, <crossed product with center CF(3) over AsField( CF(3), CF( 12) ) of a group of size 2> ] gap> R:=WedderburnDecomposition( QG )[4]; <crossed product with center Rationals over GaussianRationals of a group of si\ ze 2> gap> IsCrossedProduct(R); true gap> IsAlgebra(R); true gap> IsRing(R); true gap> LeftActingDomain( R ); GaussianRationals gap> AsList( UnderlyingMagma( R ) ); [ ZmodnZObj( 1, 4 ), ZmodnZObj( 3, 4 ) ] gap> 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> 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> IsAssociative(R); true gap> IsFinite(R); false gap> IsFiniteDimensional(R); true gap> AsList(Basis(R)); [ (ZmodnZObj( 1, 4 ))*(1), (ZmodnZObj( 3, 4 ))*(1) ] gap> GeneratorsOfLeftOperatorRingWithOne(R); [ (ZmodnZObj( 1, 4 ))*(1), (ZmodnZObj( 3, 4 ))*(1) ] gap> One(R); (ZmodnZObj( 1, 4 ))*(1) gap> Zero(R); <zero> of ... gap> Characteristic(R); 0 gap> 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> Quat := function(R,a,b) > > local G,act,twist; > > if not(a in R and b in R and a <> Zero(R) and b <> Zero(R) ) then > Error("<a> and <b> must be non zero elements of <R>!!!"); > fi; > > G := SmallGroup(4,2); > > act := function(RG,a) > return IdentityMapping( LeftActingDomain(RG)); > end; > > twist := function( RG, g , h ) > local one,g1,g2; > one := One(G); > g1 := G.1; > g2 := G.2; > if g = one or h = one then > return One(R); > elif g = g1 then > if h = g2 then > return One(R); > else > return a; > fi; > elif g = g2 then > if h = g1 then > return -One(R); > elif h=g2 then > return b; > else > return -b; > fi; > else > if h = g1 then > return -b; > elif h=g2 then > return b; > else > return -a*b; > fi; > fi; > end; > return CrossedProduct(R,G,act,twist); > end; function( R, a, b ) ... end gap> HQ := Quat(Rationals,2,3); <crossed product over Rationals of a group of size 4> gap> G := UnderlyingMagma(HQ); <pc group of size 4 with 2 generators> gap> tw := TwistingForCrossedProduct( HQ ); function( RG, g, h ) ... end gap> List( G, x -> List( G, y -> 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">> 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> QG := GroupRing( Rationals, SmallGroup(24,3) ); <algebra-with-one over Rationals, with 4 generators> gap> R := WedderburnDecomposition( QG )[4]; <crossed product with center Rationals over GaussianRationals of a group of si\ ze 2> gap> H := UnderlyingMagma( R );; gap> fam := ElementsFamily( FamilyObj( R ) );; gap> g := ElementOfCrossedProduct( fam, 0, [ 1, E(4) ], AsList(H) ); (ZmodnZObj( 1, 4 ))*(1)+(ZmodnZObj( 3, 4 ))*(E(4)) gap> CoefficientsAndMagmaElements( g ); [ ZmodnZObj( 1, 4 ), 1, ZmodnZObj( 3, 4 ), E(4) ] gap> t := List( H, x -> x^Embedding( H, R ) ); [ (ZmodnZObj( 1, 4 ))*(1), (ZmodnZObj( 3, 4 ))*(1) ] gap> t[1] + t[2]*E(4); (ZmodnZObj( 1, 4 ))*(1)+(ZmodnZObj( 3, 4 ))*(E(4)) gap> g = t[1] + E(4)*t[2]; false gap> g = t[1] + t[2]*E(4); true gap> h := ElementOfCrossedProduct( fam, 0, [ E(4), 1 ], AsList(H) ); (ZmodnZObj( 1, 4 ))*(E(4))+(ZmodnZObj( 3, 4 ))*(1) gap> g+h; (ZmodnZObj( 1, 4 ))*(1+E(4))+(ZmodnZObj( 3, 4 ))*(1+E(4)) gap> g*E(4); (ZmodnZObj( 1, 4 ))*(E(4))+(ZmodnZObj( 3, 4 ))*(-1) gap> E(4)*g; (ZmodnZObj( 1, 4 ))*(E(4))+(ZmodnZObj( 3, 4 ))*(1) gap> g*h; (ZmodnZObj( 1, 4 ))*(2*E(4)) </pre></td></tr></table> <div class="chlinkprevnextbot"> <a href="chap0.html">Top of Book</a> <a href="chap4.html">Previous Chapter</a> <a href="chap6.html">Next Chapter</a> </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>