\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. The 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 `LOOPS_my_library_data'.

In most cases, the array `my_library_data' consists of three lists
\beginlist%unordered
\item{$\circ$}
    `LOOPS_my_library_data[ 1 ]' is a list of orders for which there is at
    least one loop in the library,
\item{$\circ$}
    `LOOPS_my_library_data[ 2 ][ k ]' is the number of loops of order
    `LOOPS_my_library_data[ 1 ][ k ]' in the library,
\item{$\circ$}
    `LOOPS_my_library_data[ 3 ][ s ]' contains data necessary to produce the
    $s$th loop in the library.
\endlist
The format of `LOOPS_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
`LOOPS_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{Mo}. 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{Moufang loops}

The library named <Moufang> contains all nonassociative Moufang loops of order
$n\le 64$ and $n\in\{81,243\}$.

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{Go}. The classification of Moufang loops of order $64$ and $81$ was
carried out in \cite{NaVo2007}. The classification of Moufang loops of order $243$
was carried out by Slattery and Zenisek \cite{SlZe2011}.

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&243\cr
    {\rm loops\ in\ the\ libary}&1 &5 &1 &5 &1 &71&4 &5 &1 &1 &51&1 &2 &4 &5 &4262& 5 &72
}
$$

The <octonion loop>\index{octonion loop}\index{loop!octonion} 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 )'.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Code loops}

The library named <code> contains all nonassociative code loops of order less
than $65$. There are $5$ such loops of order $16$, $16$ of order $32$, and $80$
of order $64$, all Moufang. The library merely points to the corresponding
Moufang loops. See \cite{NaVo2007} for a classification of small code loops.

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

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\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{CoRo}.

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

By results of Kunen \cite{Ku}, for every odd prime $p$ there are precisely 3
nonassociative conjugacy closed loops\index{conjugacy closed
loop}\index{loop!conjugacy closed} of order $p^2$. Cs\accent127org\H{o} and
Dr\'apal \cite{CsDr} 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{Wi} constructed a nonassociative CC-loop of order $2p$
for every odd prime p, and Kunen \cite{Ku} 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}\index{loop!Paige} 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{Nilpotent loops}

The library named <nilpotent> contains all nonassociative nilpotent loops of
order less than $12$, up to isomorphism. There are $2$ nonassociative nilpotent
loops of order $6$, $134$ of order $8$, $8$ of order $9$ and $1043$ of order
$10$. They are obtained as usual with

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

See \cite{DaVo} for more on enumeration of nilpotent loops. For instance, there
are $2623755$ nilpotent loops of order $12$, and $123794003928541545927226368$
nilpotent loops of order $22$.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Automorphic loops}

The library named <automorphic> contains all nonassociative automorphic loops of order
less that $16$, up to isomorphism. There is $1$ such loop of order $6$, $7$ of
order $8$, $3$ of order $10$, $2$ of order $12$, $5$ of order $14$, and $2$ of order $15$.
They are obtained as usual with

\>AutomorphicLoop( <n>, <m> ) 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{sedenion
loop}\index{loop!sedenion} of order $32$ (sedenions generalize octonions).

The loops are obtained with

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

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

For the library <small> we also provide the corresponding library of loops up
to isotopism.

In general, given a library named <lib>, the corresponding library up to
isotopism is named <itp lib>, and the loops can be retrieved by the template
function `ItpLibLoop( n, m )'. Thus we have

\>ItpSmallLoop( n, m ) O

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
