8 Specific Methods This chapter describes methods of LOOPS that apply to specific classes of loops, mostly Bol and Moufang loops. 8.1 Core Methods for Bol Loops 8.1-1 AssociatedLeftBruckLoop and AssociatedRightBruckLoop AssociatedLeftBruckLoop( Q )  attribute AssociatedRightBruckLoop( Q )  attribute Returns: The left (resp. right) Bruck loop associated with a uniquely 2-divisible left (resp. right) Bol loop Q. Let Q be a left Bol loop such that the mapping x↦ x^2 is a permutation of Q. Define a new operation * on Q by x*y =(x(y^2x))^1/2. Then (Q,*) is a left Bruck loop, called the associated left Bruck loop. (In fact, Bruck used the isomorphic operation x*y = x^1/2(yx^1/2) instead. Our approach is more natural in the sense that the left Bruck loop associated with a left Bruck loop is identical to the original loop.) Associated right Bruck loops are defined dually. 8.1-2 IsExactGroupFactorization IsExactGroupFactorization( G, H1, H2 )  operation Returns: true if (G, H1, H2) is an exact group factorization. Many right Bol loops can be constructed from exact group factorizations. The triple (G,H_1,H_2) is an exact group factorization if H_1, H_2 are subgroups of G such that H_1H_2=G and H_1∩ H_2=1. 8.1-3 RightBolLoopByExactGroupFactorization If (G,H_1,H_2) is an exact group factorization then (G× G, H_1× H_2, T) with T={(x,x^-1)| x∈ G} is a loop folder that gives rise to a right Bol loop. RightBolLoopByExactGroupFactorization( arg )  function Returns: The right Bol loop constructed from an exact group factorization. The argument arg can either be an exact group factorization [G,H1,H2], or the tuple [G,H], where H is a regular subgroup of G. We also allow arg to be separate entries rather than a list of entries. 8.2 Moufang Modifications Drápal [Drá03] described two prominent families of extensions of Moufang loops. It turns out that these extensions suffice to obtain all nonassociative Moufang loops of order at most 64 if one starts with so-called Chein loops. We call the two constructions Moufang modifications. The library of Moufang loops included in LOOPS is based on Moufang modifications. See [DV06] for details. 8.2-1 LoopByCyclicModification LoopByCyclicModification( Q, S, a, h )  function Returns: The cyclic modification of a Moufang loop Q obtained from S, a=α and h described below. Assume that Q is a Moufang loop with a normal subloop S such that Q/S is a cyclic group of order 2m. Let h∈ S∩ Z(L). Let α be a generator of Q/S and write Q = ⋃_i∈ M α^i, where M={-m+1, dots, m}. Let σ:Z-> M be defined by σ(i)=0 if i∈ M, σ(i)=1 if i>m, and σ(i)=-1 if i<-m+1. Introduce a new multiplication * on Q by x*y = xyh^σ(i+j), where x∈ α^i, y∈α^j, i∈ M and j∈ M. Then (Q,*) is a Moufang loop, a cyclic modification of Q. 8.2-2 LoopByDihedralModification LoopByDihedralModification( Q, S, e, f, h )  function Returns: The dihedral modification of a Moufang loop Q obtained from S, e, f and h as described below. Let Q be a Moufang loop with a normal subloop S such that Q/S is a dihedral group of order 4m, with mge 1. Let M and σ be defined as in the cyclic case. Let β, γ be two involutions of Q/S such that α=βγ generates a cyclic subgroup of Q/S of order 2m. Let e∈β and f∈γ be arbitrary. Then Q can be written as a disjoint union Q=⋃_i∈ M(α^i∪ eα^i), and also Q=⋃_i∈ M(α^i∪ α^if). Let G_0=⋃_i∈ Mα^i, and G_1=L∖ G_0. Let h∈ S∩ N(L)∩ Z(G_0). Introduce a new multiplication * on Q by x*y = xyh^(-1)^rσ(i+j), where x∈α^i∪ eα^i, y∈α^j∪ α^jf, i∈ M, j∈ M, y∈ G_r and r∈{0,1}. Then (Q,*) is a Moufang loop, a dihedral modification of Q. 8.2-3 LoopMG2 LoopMG2( G )  function Returns: The Chein loop constructed from a group G. Let G be a group. Let overlineG={overlineg|g∈ G} be a disjoint copy of elements of G. Define multiplication * on Q=G∪ overlineG by g*h = gh, g*overlineh=overlinehg, overlineg*h = overlinegh^-1} and overlineg*overlineh=h^-1g, where g, h∈ G. Then (Q,*)=M(G,2) is a so-called Chein loop, which is always a Moufang loop, and it is associative if and only if G is commutative. 8.3 Triality for Moufang Loops Let G be a group and σ, ρ be automorphisms of G satisfying σ^2 = ρ^3 = (σ ρ)^2 = 1. Below we write automorphisms as exponents and [g,σ] for g^-1g^σ. We say that the triple (G,ρ,σ) is a group with triality if [g, σ] [g,σ]^ρ [g,σ]^ρ^2 =1 holds for all g ∈ G. It is known that one can associate a group with triality (G,ρ,σ) in a canonical way with a Moufang loop Q. See [NV03] for more details. For any Moufang loop Q, we can calculate the triality group as a permutation group acting on 3|Q| points. If the multiplication group of Q is polycyclic, then we can also represent the triality group as a pc group. In both cases, the automorphisms σ and ρ are in the same family as the elements of G. 8.3-1 TrialityPermGroup TrialityPermGroup( Q )  function Returns: A record with components G, rho, sigma, where G is the canonical group with triality associated with a Moufang loop Q, and rho, sigma are the corresponding triality automorphisms. 8.3-2 TrialityPcGroup TrialityPcGroup( Q )  function This is a variation of TrialityPermGroup in which G is returned as a pc group. 8.4 Realizing Groups as Multiplication Groups of Loops It is difficult to determine which groups can occur as multiplication groups of loops. The following operations search for loops whose multiplication groups are contained within a specified transitive permutation group G. In all these operations, one can speed up the search by increasing the optional argument depth, the price being a much higher memory consumption. The argument depth is optimally chosen if in the permutation group G there are not many permutations fixing depth elements. It is safe to omit the argument or set it equal to 2. The optional argument infolevel determines the amount of information displayed during the search. With infolevel=0, no information is provided. With infolevel=1, you get some information on timing and hits. With infolevel=2, the results are printed as well. 8.4-1 AllLoopTablesInGroup AllLoopTablesInGroup( G[, depth[, infolevel]] )  operation Returns: All Cayley tables of loops whose multiplication group is contained in the transitive permutation group G. 8.4-2 AllProperLoopTablesInGroup AllProperLoopTablesInGroup( G[, depth[, infolevel]] )  operation Returns: All Cayley tables of nonassociative loops whose multiplication group is contained in the transitive permutation group G. 8.4-3 OneLoopTableInGroup OneLoopTableInGroup( G[, depth[, infolevel]] )  operation Returns: A Cayley table of a loop whose multiplication group is contained in the transitive permutation group G. 8.4-4 OneProperLoopTableInGroup OneProperLoopTableInGroup( G[, depth[, infolevel]] )  operation Returns: A Cayley table of a nonassociative loop whose multiplication group is contained in the transitive permutation group G. 8.4-5 AllLoopsWithMltGroup AllLoopsWithMltGroup( G[, depth[, infolevel]] )  operation Returns: A list of all loops (given as sections) whose multiplication group is equal to the transitive permutation group G. 8.4-6 OneLoopWithMltGroup OneLoopWithMltGroup( G[, depth[, infolevel]] )  operation Returns: One loop (given as a section) whose multiplication group is equal to the transitive permutation group G.  Example  gap> g:=PGL(3,3);  Group([ (6,7)(8,11)(9,13)(10,12), (1,2,5,7,13,3,8,6,10,9,12,4,11) ])  gap> a:=AllLoopTablesInGroup(g,3,0);; Size(a);  56  gap> a:=AllLoopsWithMltGroup(g,3,0);; Size(a);  52