Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

11 Racks and quandles
 11.1 Testing properties of racks and quandles
 11.2 Constructors for racks
 11.3 Constructors for quandles
 11.4 Rack envelopes and quandle envelopes: The Joyce-Blackburn representation
 11.5 Subracks and subquandles
 11.6 Isomorphisms and isotopisms of racks and quandles
 11.7 Groups associated with racks and quandles

11 Racks and quandles

A rack is a right quasigroup satisfying the right self-distributive law \((x*y)*z = (x*z)*(y*z)\). A quandle is an idempotent rack.

A rack \(Q\) is homogeneous if its automorphism group acts transitively on \(Q\).

A rack \(Q\) is connected if its right multiplication group acts transitively on \(Q\).

A rack is latin if it is a quasigroup. A latin rack is automatically a (latin) quandle.

A latin rack is connected and a connected rack is homogeneous.

Constructors of RightQuasigroups declare racks and quandles as right quasigroups or, in the latin case, as quasigroups. If a rack/quandle is declared as a right quasigroup, it is displayed as <rack...> or <quandle...>, while if it is declared as a quasigroup, it is displayed as <latin rack...> or <latin quandle...>.

11.1 Testing properties of racks and quandles

11.1-1 IsRack and IsQuandle
‣ IsRack( Q )( property )
‣ IsQuandle( Q )( property )

Returns: true if the right quasigroup Q is a rack/quandle, else returns false.

11.1-2 IsHomogeneousRack and IsHomogeneousQuandle
‣ IsHomogeneousRack( Q )( property )
‣ IsHomogeneousQuandle( Q )( property )

Returns: true if the right quasigroup Q is a homogeneous rack/quandle, that is, a rack/quandle on which the automorphism group acts transitively.

11.1-3 IsConnectedRack and IsConnectedQuandle
‣ IsConnectedRack( Q )( property )
‣ IsConnectedQuandle( Q )( property )

Returns: true if the right quasigroup Q is a connected rack/quandle, that is, a rack/quandle on which the right multiplication group acts transitively.

11.1-4 IsLatinRack and IsLatinQuandle
‣ IsLatinRack( Q )( property )
‣ IsLatinQuandle( Q )( property )

Returns: true if the right quasigroup Q is a latin rack/quandle, else returns false.

11.1-5 IsProjectionRack and IsProjectionQuandle
‣ IsProjectionRack( Q )( property )
‣ IsProjectionQuandle( Q )( property )

Returns: true if the right quasigroup Q is a projection rack/quandle, that is, a rack/quandle satisfying \(x*y=x\).

11.1-6 IsPermutationalRack and IsPermutationalQuandle
‣ IsPermutationalRack( Q )( property )
‣ IsPermutationalQuandle( Q )( property )

Returns: true if the right quasigroup Q is a permutational rack/quandle, that is, a rack/quandle satisfying \(x*y=f(x)\) for some permutation \(f\) of Q.

11.1-7 IsFaithfulRack and IsFaithfulQuandle
‣ IsFaithfulRack( Q )( property )
‣ IsFaithfulQuandle( Q )( property )

Returns: true if the right quasigroup Q is a faithful rack/quandle, that is, a rack/quandle with \(x\mapsto R_x\) injective on Q.

11.2 Constructors for racks

The projection right quasigroup is automatically a quandle. We support ProjectionRack and ProjectionQuandle as a synonym of ProjectionRightQuasigroup.

11.2-1 PermutationalRack
‣ PermutationalRack( n, f[, constructorStyle] )( operation )

Returns: the permutational rack on [1..n] via the permutation f, that is, the rack on [1..n] with multiplication x*y = x^f. The permutation f must restrict to [1..n].

Note that for index based right quasigroups it is possible to change the underlying set via ChangeUnderlyingSet, cf. Section 1.4.

gap> PermutationalRack( 10, (3,4,5) );
<rack of size 10>
gap> Q := PermutationalRack( 100000, (1,100000), ConstructorStyle( false, true ) );
<rack of size 100000>
gap> Q[1]*Q[2];
r100000

11.2-2 CyclicRack
‣ CyclicRack( n[, constructorStyle] )( operation )

Returns: the cyclic rack on [1..n], that is, the rack on [1..n] with multiplication x*y = x+1, where the addition is with wraparound. This is the same as permutational rack via the n-cycle (1,2,...,n).

A rack is affine if it is an affine right quasigroup over an abelian group (that happens to be a rack). See Section 9.4 for affine right quasigroups and their arithmetic forms. For affine racks, we allow only arithmetic forms (n,f,g,c), (F,f,g,c) and (G,f,g,c).

If \(G\) is an (additive) abelian group, \(f\) an automorphism of \(G\), \(g\) an endomorphism of \(G\) and \(c\in G\), then the affine right quasigroup on \(G\) with arithmetic form \((G,f,g,c)\) and multiplication \(x*y = f(x)+g(y)+c\) is a rack iff \(g(c)=0\), \(fg = gf\) and \(g(f+g-I)\) is the zero mapping, where \(I\) is the identity mapping on \(G\).

In particular, if \(n\) is a positive integer, \(f\) is an integer relatively prime to \(n\), and \(g\), \(c\) are integers, then the affine right quasigroup on \([0..n-1]\) with arithmetic form \((n,f,g,c)\) and multiplication \(x*y = (f*x+g*y+c)\ \mathrm{mod}\ n\) is a rack iff \(gc\equiv 0\pmod n\) and \(g(f+g-1)\equiv 0\pmod n\).

11.2-3 IsAffineRackArithmeticForm
‣ IsAffineRackArithmeticForm( arg )( operation )

Returns: true if arg is an arithmetic form of an affine rack. See above for allowed arithmetic forms.

11.2-4 AffineRack
‣ AffineRack( arg[, constructorStyle] )( function )

Returns: the affine rack with arithmetic form arg. See above for allowed arithmetic forms.

gap> # affine rack on [0..11]
gap> [ IsAffineRackArithmeticForm( 12, 5, 2, 6 ), AffineRack( 12, 5, 2, 6 ) ];
[ true, <rack of size 12> ]
gap> # affine rack on GF(9)
gap> F := GF(9);; f := 2*Z(9);; g := Z(9)+One(F);; c := Zero(F);;
gap> [ IsAffineRackArithmeticForm( F, f, g, c ), AffineRack( F, f, g, c ) ]; # latin racks are quandles
[ true, <latin quandle of size 9> ]
gap> # affine rack on cyclic group of order 4
gap> x := (1,2,3,4);; G := Group( x );;
gap> f := GroupHomomorphismByImages( G, G, [x], [x^-1] );;
gap> g := GroupHomomorphismByImages( G, G, [x], [x^2] );;
gap> c := x^2;;
gap> [ IsAffineRackArithmeticForm( G, f, g, c ), AffineRack( G, f, g, c ) ];
[ true, <rack of size 4> ]

11.3 Constructors for quandles

A quandle is affine if it is an affine right quasigroup over an abelian group (that happens to be a quandle). See Section 9.4 for affine right quasigroups and their arithmetic forms.

If \(G\) is an (additive) abelian group, \(f\) an automorphism of \(G\), \(g\) an endomorphism of \(G\) and \(c\in G\), then the affine right quasigroup on \(G\) with arithmetic form \((G,f,g,c)\) and multiplication \(x*y = f(x)+g(y)+c\) is a quandle iff \(c=0\) and \(g=I-f\), where \(I\) is the identity mapping on \(G\). Therefore, for affine quandles, we allow only "shortened" arithmetic forms (n,f), (F,f) and (G,f).

11.3-1 IsAffineQuandleArithmeticForm
‣ IsAffineQuandleArithmeticForm( arg )( operation )

Returns: true if arg is an arithmetic form of an affine quandle. See above for allowed arithmetic forms.

11.3-2 AffineQuandle
‣ AffineQuandle( arg[, constructorStyle] )( function )

Returns: the affine quande with arithmetic form arg. See above for allowed arithmetic forms. The synonym AlexanderQuandle is also supported.

gap> # affine quandle on [0..9]
gap> [ IsAffineQuandleArithmeticForm( 10, 3 ), AffineQuandle( 10, 3 ) ];
[ true, <quandle of size 10> ]
gap> # affine quandle on GF(9)
gap> [ IsAffineQuandleArithmeticForm( GF(9), 2*Z(9) ), AffineQuandle( GF(9), 2*Z(9) ) ];
[ true, <latin quandle of size 9> ]
gap> # affine quandle on cyclic group of order 5
gap> G := CyclicGroup(5);; f := Elements( AutomorphismGroup( G ) )[2];
[ f1 ] -> [ f1^2 ]
gap> [ IsAffineQuandleArithmeticForm( G, f ), AffineQuandle( G, f ) ];
[ true, <latin quandle of size 5> ]

11.3-3 DihedralQuandle
‣ DihedralQuandle( n[, constructorstyle] )( operation )

Returns: the dihedral quandle of size n, that is, the quandle on [0..n-1] with multiplication x*y = (-x+2y) mod n.

11.3-4 CoreOfGroup
‣ CoreOfGroup( G[, constructorStyle] )( operation )

Returns: the core of the group (resp. additive group) G defined by \(x*y = (yx^{-1})y\) (resp. \(x*y=y-x+y\)). The core is always a quandle.

Note: The value of constructorStyle.checkArguments of the optional argument constructorStyle does not come into play and need not be specified.

11.3-5 CoreOfRightBolLoop
‣ CoreOfRightBolLoop( Q[, constructorStyle] )( operation )

Returns: the core of the right Bol loop Q defined by \(x*y = (yx^{-1})y\). The core is always a quandle.

Note: The value of constructorStyle.checkArguments of the optional argument constructorStyle does not come into play and need not be specified.

gap> G := AlternatingGroup( 5 );;
gap> Q := CoreOfGroup( G );
<quandle of size 60>
gap> Q[(1,2,3)]*Q[(1,2,3,4,5)] = Q[(1,2,3)*(1,2,3,4,5)^(-1)*(1,2,3)];
true
gap> CoreOfRightBolLoop( RightBolLoop(8,1) );
<quandle of size 8>

Given a group \(G\), subgroup \(H\) and an automorphism \(f\) of \(G\) that centralizes \(H\), the Galkin quandle (aka coset quandle or homogeneous quandle) is defined on the right cosets \(\{Hx:x\in G\}\) by \(Hx*Hy = H f(xy^{-1})y\).

11.3-6 GalkinQuandle and HomogeneousQuandle
‣ GalkinQuandle( G, H, f[, constructorStyle] )( operation )

Returns: the Galkin quandle constructed from the group G, subgroup H and automorphism f of G that centralizes H. The synonym HomogeneousQuandle is also supported.

gap> G := SymmetricGroup( 4 );; H := Subgroup( G, [(1,2)] );;
gap> f := Filtered( AutomorphismGroup( G ), g -> (1,2)^g = (1,2) )[3];
^(3,4)
gap> Q := GalkinQuandle( G, H, f );
<quandle of size 12>

11.3-7 ConjugationQuandle
‣ ConjugationQuandle( G[, m[, constructorStyle]] )( function )

Returns: the conjugation quandle on G defined by \(x*y = y^{-m}*x*y^m\). The argument G can either be a group or a collection of group elements closed under the above operation. If the optional argument m is omitted, the multiplication is given by \(x*y=y^{-1}*x*y\).

gap> G := SymmetricGroup( 3 );; 
gap> ConjugationQuandle( G ); # y^-1*x*y on G
<quandle of size 6>
gap> ConjugationQuandle( ConjugacyClass( G, (1,2,3) ) ); # y^-1*x*y on [ (1,2,3), (1,3,2) ]
<quandle of size 2>
gap> ConjugationQuandle( G, 2 ); # y^-2*x*y^2 on G
<quandle of size 6>

11.4 Rack envelopes and quandle envelopes: The Joyce-Blackburn representation

The triple \((G,S,R)\) is a rack envelope if \(G\) is a (permutation) group, \(S\) is a set of orbit representatives of \(G\), and \(R=(r_x:x\in S)\) is a collection of elements of \(G\) such that \(r_x\in C_G(G_x)\) for every \(x\in S\), and \(\langle \bigcup_{x\in S}r_x^G\rangle = G\). Here \(r_x^G\) is the conjugacy class of \(r_x\) in \(G\).

The triple \((G,S,R)\) is a quandle envelope if it is a rack envelope and \(r_x(x)=x\) (that is, \(r_x\in Z(G_x)\)) for every \(x\in S\).

There is a one-to-one correspondence between racks (quandles) and rack envelopes (quandle envelopes) on a given set. This is sometimes called the Joyce-Blackburn representation of racks (quandles). Given a rack/quandle \((Q,\cdot)\), let \(G=\mathrm{Mlt}_r(Q)\) be the right multiplication group of \(Q\), \(S\) a set of orbit representatives of \(G\) on \(Q\), and \(R=(R_x:x\in S)\) (a collection of right transversals). Then \((G,S,R)\) is a rack/quandle envelope. Conversely, given a rack/quandle envelope \((G,S,R)\) on a set \(Q\) with \(R=(r_x:x\in S)\), we can define right translations \(R_y = r_x^{g_y} = g_y^{-1}r_xg_y\), where \(g_y\) is any element of \(G\) such that \(g_y(x)=y\). Then \((Q,\cdot)\) with multiplication \(x\cdot y = R_y(x)\) is a rack/quandle.

In RightQuasigroups, a rack/quandle envelope is represented as a list [G,S,R], where G is a permutation group, S is a list of points (orbit representatives) and R is a list of elements of G, one for each x in S. Functions that use rack/quandle envelopes accept either a single argument [G,S,R] or three arguments G, S, R.

11.4-1 IsRackEnvelope and IsQuandleEnvelope
‣ IsRackEnvelope( G, reps, perms )( operation )
‣ IsQuandleEnvelope( G, reps, perms )( operation )

Returns: true if G, reps, perms is a rack envelope (resp. quandle envelope). For the method to apply, G must be a group and reps, perms must be lists. To return true, G must be a permutation group with orbit representatives reps and perms[i] must be an element of \(C_G(G_x)\) (resp. \(Z(G_x)\)), where x=reps[i], and the union of the conjugacy classes of the permutations in perms must generate G. A version with a single argument [G,reps,perms] is also supported.

11.4-2 RackEnvelope and QuandleEnvelope
‣ RackEnvelope( Q )( operation )
‣ QuandleEnvelope( Q )( operation )

Returns: the rack envelope (quandle envelope) of the rack (quandle) as a list [G,reps,perms].

11.4-3 RackByRackEnvelope
‣ RackByRackEnvelope( G, reps, perms[, constructorStyle] )( operation )
‣ QuandleByQuandleEnvelope( G, reps, perms[, constructorStyle] )( operation )

Returns: the rack (quandle) corresponding to the rack envelope (quandle envelope) [G,reps,perms]. The underlying set will be the union of the orbits of G on the representatives reps. The resulting rack (quandle) is connected if G has a single orbit. A version with a single non-optional argument [G,reps,perms] is also supported.

gap> Q := SmallQuandle( 10, 1000 );
SmallQuandle( 10, 1000 )
gap> env := QuandleEnvelope( Q );
[ Group([ (1,3,2)(7,8) ]), [ 1, 4, 5, 6, 7, 9, 10 ], 
  [ (), (), (1,2,3), (1,3,2)(7,8), (1,2,3), (1,3,2)(7,8), 
      (1,3,2)(7,8) ] ]
gap> Q2 := QuandleByQuandleEnvelope( env );
<quandle of size 10>
gap> IsomorphismQuandles( Q, Q2 );
MappingByFunction( SmallQuandle( 10, 1000 ), <quandle of size 10>, fun\
ction( x ) ... end )
gap> AsParentTransformation( last );
IdentityTransformation
gap> QuandleByQuandleEnvelope( env[1], env[2], env[3] ); # separate arguments also supported for envelopes
<quandle of size 10>

11.5 Subracks and subquandles

11.5-1 Testing subracks and subquandles
‣ IsSubrack( Q, S )( operation )
‣ IsSubquandle( Q, S )( operation )

Returns: true if S is a subrack (subquandle) of the rack (quandle) Q, else returns false.

11.5-2 Creating subracks and subquandles
‣ Subrack( Q, gens )( operation )
‣ Subquandle( Q, gens )( operation )

Returns: the subrack (subquandle) of a rack (quandle) Q generated by the list of elements gens. We allow gens to consist of elements of Q or of elements of the underlying set of Q. The resulting subalgebra will be index based (cf. Section 1.8) iff Q is index based.

gap> Q := AffineRack( 12, 5, 2, 6 );;
gap> S := Subrack( Q, [ Q[2] ] );
<rack of size 2>
gap> IsSubrack( Q, S );
true

11.5-3 All subracks and subquandles
‣ AllSubracks( Q )( operation )
‣ AllSubquandles( Q )( operation )

Returns: a list of all subracks (subquandles) of a rack (quandle) Q.

gap> Q := ConjugationQuandle( SymmetricGroup( 3 ) );;
gap> List( AllSubquandles( Q ), Size );
[ 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 5, 2, 4, 6, 3 ]

11.5-4 Racks and quandles by generators
‣ Rack( gens... )( function )
‣ Quandle( gens... )( function )
‣ RackByGenerators( gens... )( function )
‣ QuandleByGenerators( gens... )( function )
‣ RackWithGenerators( gens... )( function )
‣ QuandleWithGenerators( gens... )( function )

These functions are analogous to those described in Section 3.5

gap> Q := ConjugationQuandle( SymmetricGroup( 3 ) );;
gap> S := QuandleWithGenerators( [ Q[(1,2)], Q[(1,2,3)] ] );
<quandle of size 5>
gap> GeneratorsOfMagma( S );
[ r(1,2), r(1,2,3) ]

11.6 Isomorphisms and isotopisms of racks and quandles

11.6-1 IsomorphismRacks, IsomorphismQuandles
‣ IsomorphismRacks( Q1, Q2 )( operation )
‣ IsomorphismQuandles( Q1, Q2 )( operation )

Returns: an isomorphism between the racks (quandles) Q1 and Q2, if one exists, else returns fail. If an isomorphism from Q1 to Q2 exists, it is returned as a permutation of \([1..n]\), where \(n\) is the size of Q1 (and hence also the size of Q2).

11.6-2 Racks and quandles up to isomorphism
‣ RacksUpToIsomorphism( ls )( operation )
‣ QuandlesUpToIsomorphism( ls )( operation )

Returns: a sublist of ls consisting of all racks (quandles) in ls up to isomorphism.

11.7 Groups associated with racks and quandles

11.7-1 AdjointGroup
‣ AdjointGroup( Q )( attribute )

Returns: the adjoint group associated with the rack Q, that is, the free group on Q with relations \(b^{-1}ab = a*b\), where \(a*b\) is the product in the rack Q. The generators inherit names from the elements of Q.

gap> g := AdjointGroup( DihedralQuandle( 3 ) );
<fp group on the generators [ q0, q1 ]>
gap> GeneratorsOfGroup( g );
[ q0, q1 ]
gap> RelatorsOfFpGroup( g );
[ q0^-1*q1^2*q0^-1, (q1^-1*q0)^3 ]
gap> Size( g );
infinity
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 Bib Ind

generated by GAPDoc2HTML