Chapter 3: Libraries

  • Libraries
  • Random right quasigroups
  • Exotic constructors

Databases

  • automorphic loops
  • CC loops / LCC loops / RCC loops
  • Moufang loops / Paige loops / code loops
  • left Bol loops / right Bol loops / left Bruck loops / right Bruck loops
  • Steiner loops
  • nilpotent loops
  • small loops / small loops up to isotopism / interesting loops
  • small quandles / small racks / connected quandles

DisplayLibraryInfo

for libname in [
        "automorphic loops", 
        "CC loops", "LCC loops", "RCC loops", 
        "Moufang loops", "Paige loops", "code loops", 
        "left Bol loops", "left Bruck loops", 
        "right Bol loops", "right Bruck loops", 
        "Steiner loops", "nilpotent loops", 
        "small loops", "itp small loops", "interesting loops", 
        "small quandles", "small racks", "connected quandles"
    ] do
    Print( "\n### Library \"", libname, "\" ###\n" );
    DisplayLibraryInfo( libname ); 
od;

Library of code loops

Definition Code loops are Moufang loops containing a central subloop of order 2 such that is an elementary abelian 2-group

gap> DisplayLibraryInfo( "code loops" );
The library contains all code loops of order less than 512.
------
Extent of the library:
   1 algebra of order 2
   2 algebras of order 4
   4 algebras of order 8
   10 algebras of order 16
   23 algebras of order 32
   88 algebras of order 64
   767 algebras of order 128
   80826 algebras of order 256
true

Properties of library right quasigroups

  • Library right quasigroups are always index based
    gap> L:=CodeLoop(16,10);
    CodeLoop( 16, 10 )
    gap> IsIndexBased(L);
    true
    
  • Many properties are preset
    gap> KnownTruePropertiesOfObject(L);
    [ "IsNonTrivial", "IsFinite", "IsDuplicateFree",  ...  
    "IsMiddleNuclearSquareLoop", "IsMoufangLoop", "IsRCLoop", 
    "IsRightBolLoop", ... ]
    
  • The UnderlyingSet reflects the construction method
    gap> UnderlyingSet(L);
    [ [ 0, [ 0, 0, 0 ] ], [ 0, [ 0, 0, 1 ] ], ... , [ 1, [ 1, 1, 1 ] ] ]
    

Random (right) quasigroups

  • Random magmas are trivial: generate each cell of the Cayley table uniformly at random
  • Random right quasigroups are easy: generate each row of the multiplication table as an independent random permutation
  • Random quasigroups are the same as random latin squares
  • This hard problem has been solved in the seminal paper

    M. T. Jacobson and P. Matthews, Generating uniformly distributed random Latin squares, J. Combinatorial Design 4 (1996), 405-437

  • Random loops can be obtained from random quasigroups by normalization (principal isotope)

The Jacobson-Matthews method

  • We fix and consider tables
  • Let be the set of proper latin squares
  • Introduce the concept of improper latin squares
  • Let be the set of all proper and improper latin squares
  • Make into a graph by defining "moves" on the elements
  • Difficult:

    Theorem 1 The graph is connected with diameter at most .
    Theorem 2 The average distance between proper latin squares is at most .

  • Random walks in this graph give a Monte Carlo algorithm to generate latin squares uniformly at random
  • Question: How to know when to stop?

Improper latin squares

  • The symbols are variables
  • We introduce the concept of an improper LS:

  • An improper LS has a unique entry of the form
  • All rows and columns sum up to
  • The symbol (the one with the negative sign) has exactly two further occurences in the row and column of the improper entry

The Jacobson-Matthews move for a proper LS

  • The move modifies a subsquare

  • There are such subsquares

The Jacobson-Matthews move for an improper LS

  • The move modifies a "improper" subsquare

  • There are 8 such subsquares
  • The result is proper if and only if
  • Important: No more than one improper entry

Time complexity of RandomQuasigroup

  • Number of iterations =

Random nilpotent loops

  • Nilpotent loops have an efficient construction method using factor sets
  • Random central extensions are generated by random factor sets
  • Random nilpotent loops are given by the list of the composition factors
    gap> L := RandomNilpotentLoop( [ Group((1,2)), ElementaryAbelianGroup(32) ] ); time;
    <loop of size 64>
    39
    gap> Size( AutomorphismGroup( L ) ); time;
    32
    1774
    
  • Compare this with random loops:
    gap> L := RandomLoop( 64 ); time;
    <loop of size 64>
    7205
    gap> Size( AutomorphismGroup( L ) ); time;
    1
    151
    

Exotic constructors: Loops by (right) loop folders

Definition (Aschbacher) Let be a group, a subgroup and a subset such that and for each conjugate of , is a set of right coset representatives. Then is called a loop folder.

  • For define

    where .
  • Then is the loop associated with the loop folder
  • An almost trivial example:
    gap> G := SymmetricGroup( 3 );; H := TrivialSubgroup( G );;
    gap> LoopByRightFolder( G, H, Elements( G ) );
    <loop of size 6>
    gap> IsAssociative( last );
    true
    

Exotic constructors: Right Bol loops by exact factorizations

  • Right Bol loop: Loop with the rigth Bol identity


  • Twisted subgroup: such that and for all
  • The anti-diagonal is a twisted subgroup in
  • The loop folder is a Bol loop folder, if is a twisted subgroup in
  • Exact factorization: subgroups of s. t. and
  • Example: Let be a transitive permutation group, and a regular subgroup. Let be the stabilizer of an element in . Then is an exact factorization

Exotic constructors: Right Bol loops by exact factorizations

Theorem (GN 2007): Let be an exact factorization. Let be the anti-diagonal in . Then is a Bol loop folder.

gap> G:=SymmetricGroup(4); 
Sym( [ 1 .. 4 ] )
gap> A:=Group((1,2,3,4)); B:=Stabilizer(G,1);
Group([ (1,2,3,4) ])
Sym( [ 2 .. 4 ] )
gap> L:=RightBolLoopByExactGroupFactorization(G,A,B);
<right Bol loop of size 24>
gap> IsSimple(L);
true

The same by loop folders

gap> GxG:=DirectProduct(G,G);
Group([ (1,2,3,4), (1,2), (5,6,7,8), (5,6) ])
gap> Ax:=Image(Embedding(GxG,1),A);
Group([ (1,2,3,4) ])
gap> Bx:=Image(Embedding(GxG,2),B);
Group([ (6,7,8), (6,7) ])
gap> AxB:=ClosureGroup(Ax,Bx);
Group([ (1,2,3,4), (6,7,8), (6,7) ])
gap> K:=Set(G,x->Image(Embedding(GxG,1),x)*Image(Embedding(GxG,2),x^-1));;
gap> M:=LoopByRightFolder(GxG,AxB,K);
<loop of size 24>
gap> IsomorphismLoops(L,M);
MappingByFunction( <right Bol loop of size 24>, <loop of size 24>, 
>function( x ) ... end )

-- End of Chapter 3 --