\Chapter{Libraries of small loops}

\label{lib} Libraries of small loops form an integral part of {\LOOPS}. Loops
in libraries are stored up to isomorphism or up to isotopism. Then name of a
library up to isotopism starts with <itp>.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{A typical library}

A library named <my Library> is stored in file `data/mylibrary.tbl', and the
corresponding data structure is named `my_library_data'.

The array `my_library_data' consists of three lists
\beginlist%unordered
\item{$\circ$}
    `my_library_data[ 1 ]' is a list of orders for which there is at
    least one loop in the library,
\item{$\circ$}
    `my_library_data[ 2 ][ k ]' is the number of loops of order
    `my_library_data[ 1 ][ k ]' in the library,
\item{$\circ$}
    `my_library_data[ 3 ][ s ]' contains data necessary to produce the
    $s$th loop in the library.
\endlist
The format of `my_library_data[ 3 ]' depends on the particular library and is
not standardized in any way.

The user can retrieve the $m$th loop of order $n$ from library named <my
Library> according to the template

\>MyLibraryLoop( <n>, <m> ) F

It is also possible to obtain the same loop with

\>LibraryLoop( <name>, <n>, <m> ) F

where <name> is the name of the library.

For example, when the library is called <left Bol>, the corresponding data file
is called `data/leftbol.tbl', the corresponding data structure is named
`left_bol_data', and the $m$th left Bol loop of order $n$ is obtained via

\){LeftBolLoop( <n>, <m> )}

or via

\){LibraryLoop(\"left Bol\", <n>, <m> )}

We are now going to describe the individual libraries in detail. A brief
information about the library named <name> can also be obtained in {\LOOPS}
with

\>DisplayLibraryInfo( <name> ) F

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Left Bol loops}

The library named <left Bol> contains all nonassociative left Bol loops of
order less than $17$, including Moufang loops. There are $6$ such loops of
order $8$, $1$ of order $12$, $2$ of order $15$, and $2038$ of order $16$. (The
classification of left Bol loops of order $16$ was first accomplished by
Moorhouse \cite{Moorhouse}. Our library was generated independently, and agrees
with Moorhouse's results.)

Following the general pattern, the $m$th nonassociative left Bol loop of order
$n$ is obtained by

\>LeftBolLoop( <n>, <m> ) F

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Small Moufang loops}

The library named <Moufang> contains all nonassociative Moufang loops of order
$n\le 64$ and $n=81$.

The $m$th nonassociative Moufang loop of order $n$ is obtained by

\>MoufangLoop( <n>, <m> ) F

For $n\le 63$, our catalog numbers coincide with those of Goodaire et al.
\cite{Goodaire}. The classification of Moufang loops of order $64$ and $81$ was
carried in \cite{NagyVojtM64}.

The extent of the library is summarized below:

$$
\matrix{
    {\rm order}&12&16&20&24&28&32&36&40&42&44&48&52&54&56&60&64&81\cr
    {\rm loops\ in\ the\ libary}&1 &5 &1 &5 &1 &71&4 &5 &1 &1 &51&1 &2 &4 &5 &4262& 5
}
$$

The <octonion loop>
%
\index{octonion loop}
%
\index{octonions} of order $16$ (i.e., the
multiplication loop of the $\pm$ basis elements in the $8$-dimensional standard
real octonion algebra) is `MoufangLoop( 16, 3 )'.

Although the classification of Moufang loops of order $64$ is now completed, we
still support

\>IsomorphismTypeOfMoufangLoop( <L> ) O

If $L$ is a Moufang loop of order at most $64$, cataloged in {\LOOPS} as the
$m$th Moufang loop of order $n$, the function returns $[[n,m],p]$, where $p$ is
a permutation of $[1,\dots,n]$ that is an isomorphism from $L$ to the cataloged
copy of $L$.

In order to speed up the function `IsomorphismTypeOfMoufangLoop', we have
precalculated and stored in the data file `data\\moufang_discriminators.tbl' the
discriminators of all Moufang loops in the library. The file is rather large
(850 KB), and took about 20 minutes to precalculate. You can delete the file if
you will not use `IsomorphismTypeOfMoufangLoop'.

We expect to reorganize the Moufang libraries and probably depreciate the
operation `IsomorphismTypeOfMoufangLoop' in the near future.

\beginexample
gap> D := DirectProduct( MoufangLoop( 16, 2 ), CyclicGroup( 2 ) );
<loop of order 32>
gap> IsomorphismTypeOfMoufangLoop( D );
[ [ 32, 2 ], (2,3,12,20,11,29,23,13,30,31,28,27,22,15,32,18,10,19,16,24,14,
    25,21,8,7,6,9,17,5) ]
\endexample

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Steiner loops}

Here is how the libary <Steiner> is described within {\LOOPS}:

\beginexample
gap> DisplayLibraryInfo( "Steiner" );
The library contains all nonassociative Steiner loops of order less or equal to 16.
It also contains the associative Steiner loops of order 4 and 8.
------
Extent of the library:
   1 loop of order 4
   1 loop of order 8
   1 loop of order 10
   2 loops of order 14
   80 loops of order 16
true
\endexample

The $m$th Steiner loop of order $n$ is obtained by

\>SteinerLoop( <n>, <m> ) F

Our catalog numbers coincide with those of Colbourn and Rosa \cite{CR}.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{CC-loops}

By results of Kunen \cite{Kunen}, for every odd prime $p$ there are
precisely 3 nonassociative conjugacy closed loops\index{conjugacy closed loop}
of order $p^2$. Cs\accent127org\H{o} and Dr\'apal \cite{CD} described these 3 loops
by multiplicative formulas on $\Z_{p^2}$ and $\Z_p \times \Z_p$.

*Case $m = 1$:* Let $k$ be the smallest positive integer relatively prime to $p$
and such that $k$ is a square modulo $p$ (i.e., $k=1$). Define multiplication
on $\Z_{p^2}$ by $x\cdot y = x + y + kpx^2y$.

*Case $m = 2$:* Let $k$ be the smallest positive integer relatively prime to $p$
and such that $k$ is not a square modulo $p$. Define multiplication on
$\Z_{p^2}$ by $x\cdot y = x + y + kpx^2y$.

*Case $m = 3$:* Define multiplication on $\Z_p \times \Z_p$ by
$(x,a)(y,b) = (x+y, a+b+x^2y )$.

Moreover, Wilson \cite{Wilson} constructed a nonassociative CC-loop of order
$2p$ for every odd prime p, and Kunen \cite{Kunen} showed that there are no
other nonassociative CC-loops of this order. Here is the construction:

Let $N$ be an additive cyclic group of order $n>2$, $N = \langle 1\rangle$.
Let $G$ be the additive cyclic group of order $2$. Define multiplication on
$L = G \times N$ as follows:
$$
\matrix{
    (0,m)(0,n) = ( 0, m + n ),&(0,m)(1,n) = ( 1, -m + n ),\cr
    (1,m)(0,n) = ( 1, m + n ),&(1,m)(1,n) = ( 0, 1 - m + n ).
}
$$

The CC-loops described above can be obtained by

\>CCLoop( <n>, <m> ) F

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Small loops}

The library named <small> contains all nonassociative loops of order 5 and 6.
There are 5 and 107 such loops, respectively. The loops are obtained by

\>SmallLoop( <n>, <m> ) F

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Paige loops}

<Paige loops>\index{Paige loop} are nonassociative finite simple
Moufang loops. By \cite{Li}, there is precisely one Paige loop for every finite
field ${\rm{GF}}(q)$.

The library named <Paige> contains the smallest nonassociative simple Moufang
loop

\>PaigeLoop( <2> ) F

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Interesting loops}

The library named <interesting> contains some loops that are
illustrative for the theory of loops. At this point, the library contains a
nonassociative loop of order $5$, a nonassociative nilpotent loop of order $6$,
a nonMoufang left Bol loop of order $16$, and the loop of
sedenions\index{sedenions} of order $32$ (sedenions generalize octonions).

The loops are obtained with

\>InterestingLoop( <n>, <m> ) F

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Libraries of loops up to isotopism}

For some of the above libraries we also provide the corresponding library of
loops up to isotopism. Given a library named <lib>, the corresponding library
up to isotopism is name <itp lib>, and the loops can be retrieved by the
template function `ItpLibLoop( n, m )'. Here is an example:

\beginexample
gap> SmallLoop( 6, 14 );
<small loop 6/14>
gap> ItpSmallLoop( 6, 14 );
<small loop 6/42>
gap> LibraryLoop( "itp small", 6, 14 );
<small loop 6/42>
\endexample

Note that loops up to isotopism form a subset of the corresponding library of
loops up to isomorphism. For instance, the above example shows that the $14$th
small loop of order $6$ up to isotopism is in fact the $42$nd small loop of
order $6$ up to isomorphism.

Here is the list of all supported libraries up to isotopism and their extent,
as displayed by \LOOPS:

\beginexample
gap> DisplayLibraryInfo("itp small");
The library contains all nonassociative loops of order less than 7 up to
isotopism.
------
Extent of the library:
   1 loop of order 5
   20 loops of order 6
\endexample

And here are the corresponding retrieving functions:

\>ItpSmallLoop( n, m ) O
