3931 lines
197 KiB
TeX
3931 lines
197 KiB
TeX
|
% generated by GAPDoc2LaTeX from XML source (Frank Luebeck)
|
||
|
\documentclass[a4paper,11pt]{report}
|
||
|
|
||
|
\usepackage{a4wide}
|
||
|
\sloppy
|
||
|
\pagestyle{myheadings}
|
||
|
\usepackage{amssymb}
|
||
|
\usepackage[latin1]{inputenc}
|
||
|
\usepackage{makeidx}
|
||
|
\makeindex
|
||
|
\usepackage{color}
|
||
|
\definecolor{FireBrick}{rgb}{0.5812,0.0074,0.0083}
|
||
|
\definecolor{RoyalBlue}{rgb}{0.0236,0.0894,0.6179}
|
||
|
\definecolor{RoyalGreen}{rgb}{0.0236,0.6179,0.0894}
|
||
|
\definecolor{RoyalRed}{rgb}{0.6179,0.0236,0.0894}
|
||
|
\definecolor{LightBlue}{rgb}{0.8544,0.9511,1.0000}
|
||
|
\definecolor{Black}{rgb}{0.0,0.0,0.0}
|
||
|
|
||
|
\definecolor{linkColor}{rgb}{0.0,0.0,0.554}
|
||
|
\definecolor{citeColor}{rgb}{0.0,0.0,0.554}
|
||
|
\definecolor{fileColor}{rgb}{0.0,0.0,0.554}
|
||
|
\definecolor{urlColor}{rgb}{0.0,0.0,0.554}
|
||
|
\definecolor{promptColor}{rgb}{0.0,0.0,0.589}
|
||
|
\definecolor{brkpromptColor}{rgb}{0.589,0.0,0.0}
|
||
|
\definecolor{gapinputColor}{rgb}{0.589,0.0,0.0}
|
||
|
\definecolor{gapoutputColor}{rgb}{0.0,0.0,0.0}
|
||
|
|
||
|
%% for a long time these were red and blue by default,
|
||
|
%% now black, but keep variables to overwrite
|
||
|
\definecolor{FuncColor}{rgb}{0.0,0.0,0.0}
|
||
|
%% strange name because of pdflatex bug:
|
||
|
\definecolor{Chapter }{rgb}{0.0,0.0,0.0}
|
||
|
\definecolor{DarkOlive}{rgb}{0.1047,0.2412,0.0064}
|
||
|
|
||
|
|
||
|
\usepackage{fancyvrb}
|
||
|
|
||
|
\usepackage{mathptmx,helvet}
|
||
|
\usepackage[T1]{fontenc}
|
||
|
\usepackage{textcomp}
|
||
|
|
||
|
|
||
|
\usepackage[
|
||
|
pdftex=true,
|
||
|
bookmarks=true,
|
||
|
a4paper=true,
|
||
|
pdftitle={Written with GAPDoc},
|
||
|
pdfcreator={LaTeX with hyperref package / GAPDoc},
|
||
|
colorlinks=true,
|
||
|
backref=page,
|
||
|
breaklinks=true,
|
||
|
linkcolor=linkColor,
|
||
|
citecolor=citeColor,
|
||
|
filecolor=fileColor,
|
||
|
urlcolor=urlColor,
|
||
|
pdfpagemode={UseNone},
|
||
|
]{hyperref}
|
||
|
|
||
|
\newcommand{\maintitlesize}{\fontsize{50}{55}\selectfont}
|
||
|
|
||
|
% write page numbers to a .pnr log file for online help
|
||
|
\newwrite\pagenrlog
|
||
|
\immediate\openout\pagenrlog =\jobname.pnr
|
||
|
\immediate\write\pagenrlog{PAGENRS := [}
|
||
|
\newcommand{\logpage}[1]{\protect\write\pagenrlog{#1, \thepage,}}
|
||
|
%% were never documented, give conflicts with some additional packages
|
||
|
|
||
|
\newcommand{\GAP}{\textsf{GAP}}
|
||
|
|
||
|
%% nicer description environments, allows long labels
|
||
|
\usepackage{enumitem}
|
||
|
\setdescription{style=nextline}
|
||
|
|
||
|
%% depth of toc
|
||
|
\setcounter{tocdepth}{1}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
%% command for ColorPrompt style examples
|
||
|
\newcommand{\gapprompt}[1]{\color{promptColor}{\bfseries #1}}
|
||
|
\newcommand{\gapbrkprompt}[1]{\color{brkpromptColor}{\bfseries #1}}
|
||
|
\newcommand{\gapinput}[1]{\color{gapinputColor}{#1}}
|
||
|
|
||
|
|
||
|
\begin{document}
|
||
|
|
||
|
\logpage{[ 0, 0, 0 ]}
|
||
|
\begin{titlepage}
|
||
|
\mbox{}\vfill
|
||
|
|
||
|
\begin{center}{\maintitlesize \textbf{The \textsf{LOOPS} Package\mbox{}}}\\
|
||
|
\vfill
|
||
|
|
||
|
\hypersetup{pdftitle=The \textsf{LOOPS} Package}
|
||
|
\markright{\scriptsize \mbox{}\hfill The \textsf{LOOPS} Package \hfill\mbox{}}
|
||
|
{\Huge \textbf{Computing with quasigroups and loops in \textsf{GAP}\mbox{}}}\\
|
||
|
\vfill
|
||
|
|
||
|
{\Huge Version 3.3.0\mbox{}}\\[1cm]
|
||
|
\mbox{}\\[2cm]
|
||
|
{\Large \textbf{G{\a'a}bor P. Nagy \mbox{}}}\\
|
||
|
{\Large \textbf{Petr Vojt{\v e}chovsk{\a'y} \mbox{}}}\\
|
||
|
\hypersetup{pdfauthor=G{\a'a}bor P. Nagy ; Petr Vojt{\v e}chovsk{\a'y} }
|
||
|
\end{center}\vfill
|
||
|
|
||
|
\mbox{}\\
|
||
|
{\mbox{}\\
|
||
|
\small \noindent \textbf{G{\a'a}bor P. Nagy } Email: \href{mailto://nagyg@math.u-szeged.hu} {\texttt{nagyg@math.u-szeged.hu}}\\
|
||
|
Address: \begin{minipage}[t]{8cm}\noindent
|
||
|
Department of Mathematics, University of Szeged\end{minipage}
|
||
|
}\\
|
||
|
{\mbox{}\\
|
||
|
\small \noindent \textbf{Petr Vojt{\v e}chovsk{\a'y} } Email: \href{mailto://petr@math.du.edu} {\texttt{petr@math.du.edu}}\\
|
||
|
Address: \begin{minipage}[t]{8cm}\noindent
|
||
|
Department of Mathematics, University of Denver\end{minipage}
|
||
|
}\\
|
||
|
\end{titlepage}
|
||
|
|
||
|
\newpage\setcounter{page}{2}
|
||
|
{\small
|
||
|
\section*{Copyright}
|
||
|
\logpage{[ 0, 0, 1 ]}
|
||
|
{\copyright} 2016 G{\a'a}bor P. Nagy and Petr Vojt{\v e}chovsk{\a'y}. \mbox{}}\\[1cm]
|
||
|
\newpage
|
||
|
|
||
|
\def\contentsname{Contents\logpage{[ 0, 0, 2 ]}}
|
||
|
|
||
|
\tableofcontents
|
||
|
\newpage
|
||
|
|
||
|
|
||
|
\chapter{\textcolor{Chapter }{Introduction}}\label{Chap:Introduction}
|
||
|
\logpage{[ 1, 0, 0 ]}
|
||
|
\hyperdef{L}{X7DFB63A97E67C0A1}{}
|
||
|
{
|
||
|
\textsf{LOOPS} is a package for \textsf{GAP4} whose purpose is to:
|
||
|
\begin{itemize}
|
||
|
\item provide researchers in nonassociative algebra with a powerful computational
|
||
|
tool concerning finite loops and quasigroups,
|
||
|
\item extend \textsf{GAP} toward the realm of nonassociative structures.
|
||
|
\end{itemize}
|
||
|
\textsf{LOOPS} has been accepted as an official package of \textsf{GAP} in May 2015.
|
||
|
\section{\textcolor{Chapter }{License}}\label{Sec:License}
|
||
|
\logpage{[ 1, 1, 0 ]}
|
||
|
\hyperdef{L}{X861E5DF986F89AE2}{}
|
||
|
{
|
||
|
\textsf{LOOPS} is free software. You can redistribute it and/or modify it under the terms of
|
||
|
the GNU General Public License version 3 as published by the Free Software
|
||
|
Foundation. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Installation}}\label{Sec:Installation}
|
||
|
\logpage{[ 1, 2, 0 ]}
|
||
|
\hyperdef{L}{X8360C04082558A12}{}
|
||
|
{
|
||
|
Have \textsf{GAP 4.7} or newer installed on your computer.
|
||
|
|
||
|
If you do not see the subfolder \texttt{pkg/loops} in the main directory of \textsf{GAP} then download the \textsf{LOOPS} package from the distribution website \href{http://www.math.du.edu/loops} {\texttt{http://www.math.du.edu/loops}} and unpack the downloaded file into the \texttt{pkg} subfolder.
|
||
|
|
||
|
The package \textsf{LOOPS} can then be loaded to \textsf{GAP} anytime by calling \texttt{LoadPackage("loops");}.
|
||
|
|
||
|
If you wish to load \textsf{LOOPS} automatically while starting \textsf{GAP}, start \textsf{GAP}, execute the following commands,
|
||
|
\begin{verbatim}
|
||
|
gap> pref := UserPreference( "PackagesToLoad " );;
|
||
|
gap> Add( pref, "loops" );;
|
||
|
gap> SetUserPreference( "PackagesToLoad", pref );;
|
||
|
gap> WriteGapIniFile();;
|
||
|
\end{verbatim}
|
||
|
quit \textsf{GAP} and restart it. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Documentation}}\label{Sec:Documentation}
|
||
|
\logpage{[ 1, 3, 0 ]}
|
||
|
\hyperdef{L}{X7F4F8D6F7CD6B765}{}
|
||
|
{
|
||
|
The documentation has been prepared with the \textsf{GAPDoc} package and is therefore available in several formats: {\LaTeX}, pdf, ps, html, and as an inline help in \textsf{GAP}. All these formats have been obtained directly from the master XML
|
||
|
documentation file. Consequently, the different formats of the documentation
|
||
|
differ only in their appearance, not in content.
|
||
|
|
||
|
The preferred format of the documentation is html with MathJax turned on.
|
||
|
|
||
|
All formats of the documentation can be found in the \texttt{doc} folder of \textsf{LOOPS}. You can also download the documentation from the \textsf{LOOPS} distribution website.
|
||
|
|
||
|
The inline \textsf{GAP} help is available upon installing \textsf{LOOPS} and can be accessed in the usual way, i.e., upon typing \texttt{?command}, \textsf{GAP} displays the section of the \textsf{LOOPS} manual containing information about \texttt{command}. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Test Files}}\label{Sec:TestFiles}
|
||
|
\logpage{[ 1, 4, 0 ]}
|
||
|
\hyperdef{L}{X801051CC86594630}{}
|
||
|
{
|
||
|
Test files conforming to \textsf{GAP} standards are provided for \textsf{LOOPS} and can be found in the folder \texttt{tst}. The command \texttt{ReadPackage("loops","tst/testall.g")} runs all tests for \textsf{LOOPS}. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Memory Management}}\label{Sec:MemoryManagement}
|
||
|
\logpage{[ 1, 5, 0 ]}
|
||
|
\hyperdef{L}{X79342B4E7E55FD0F}{}
|
||
|
{
|
||
|
Some libraries of loops are loaded only upon explicit demand and can occupy a
|
||
|
lot of memory. For instance, the library or RCC loops occupies close to 100 MB
|
||
|
of memory when fully loaded. The command \texttt{LOOPS{\textunderscore}FreeMemory();} will attempt to free memory by unbinding on-demand library data loaded by \textsf{LOOPS}. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Feedback}}\label{Sec:Feedback}
|
||
|
\logpage{[ 1, 6, 0 ]}
|
||
|
\hyperdef{L}{X80D704CC7EBFDF7A}{}
|
||
|
{
|
||
|
We welcome all comments and suggestions on \textsf{LOOPS}, especially those concerning the future development of the package. You can
|
||
|
contact us by e-mail. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Acknowledgment}}\label{Sec:Acknowledgment}
|
||
|
\logpage{[ 1, 7, 0 ]}
|
||
|
\hyperdef{L}{X811B08C07BD79486}{}
|
||
|
{
|
||
|
We thank the following people for sending us remarks and comments, and for
|
||
|
suggesting new functionality of the package: Muniru Asiru, Bjoern Assmann,
|
||
|
Andreas Distler, Ale{\v s} Dr{\a'a}pal, Steve Flammia, Kenneth W. Johnson,
|
||
|
Michael K. Kinyon, Alexander Konovalov, Frank L{\"u}beck and Jonathan D.H.
|
||
|
Smith.
|
||
|
|
||
|
The library of Moufang loops of order 243 was generated from data provided by
|
||
|
Michael C. Slattery and Ashley L. Zenisek. The library of right conjugacy
|
||
|
closed loops of order less than 28 was generated from data provided by
|
||
|
Katharina Artic. The library of commutative automorphic loops of order 27, 81
|
||
|
and 243 was obtained jointly with Izabella Stuhl.
|
||
|
|
||
|
G{\a'a}bor P. Nagy was supported by OTKA grants F042959 and T043758, and Petr
|
||
|
Vojt{\v e}chovsk{\a'y} was supported by the 2006 and 2016 University of Denver
|
||
|
PROF grants and the Simons Foundation Collaboration Grant 210176. }
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\chapter{\textcolor{Chapter }{Mathematical Background}}\label{Chap:MathematicalBackground}
|
||
|
\logpage{[ 2, 0, 0 ]}
|
||
|
\hyperdef{L}{X7EF1B6708069B0C7}{}
|
||
|
{
|
||
|
We assume that you are familiar with the theory of quasigroups and loops, for
|
||
|
instance with the textbook of Bruck \cite{Br} or Pflugfelder \cite{Pf}. Nevertheless, we did include definitions and results in this manual in order
|
||
|
to unify terminology and improve legibility of the text. Some general concepts
|
||
|
of quasigroups and loops can be found in this chapter. More special concepts
|
||
|
are defined throughout the text as needed.
|
||
|
\section{\textcolor{Chapter }{Quasigroups and Loops}}\label{Sec:QuasigroupsAndLoops}
|
||
|
\logpage{[ 2, 1, 0 ]}
|
||
|
\hyperdef{L}{X80243DE5826583B8}{}
|
||
|
{
|
||
|
A set with one binary operation (denoted $\cdot$ here) is called \index{groupoid}\emph{groupoid} or \index{magma}\emph{magma}, the latter name being used in \textsf{GAP}.
|
||
|
|
||
|
An element $1$ of a groupoid $G$ is a \index{neutral element}\emph{neutral element} or an \index{identity!element}\emph{identity element} if $1\cdot x = x\cdot 1 = x$ for every $x$ in $G$.
|
||
|
|
||
|
Let $G$ be a groupoid with neutral element $1$. Then an element $x^{-1}$ is called a \index{inverse!two-sided}\emph{two-sided inverse} of $x$ in $G$ if $ x\cdot x^{-1} = x^{-1}\cdot x = 1$.
|
||
|
|
||
|
Recall that \index{group}groups are associative groupoids with an identity element and two-sided
|
||
|
inverses. Groups can be reached in another way from groupoids, namely via
|
||
|
quasigroups and loops.
|
||
|
|
||
|
A \index{quasigroup}\emph{quasigroup} $Q$ is a groupoid such that the equation $x\cdot y=z$ has a unique solution in $Q$ whenever two of the three elements $x$, $y$, $z$ of $Q$ are specified. Note that multiplication tables of finite quasigroups are
|
||
|
precisely \index{latin square}\emph{latin squares}, i.e., square arrays with symbols arranged so that each symbol occurs in each
|
||
|
row and in each column exactly once. A \index{loop}\emph{loop} $L$ is a quasigroup with a neutral element.
|
||
|
|
||
|
Groups are clearly loops. Conversely, it is not hard to show that associative
|
||
|
quasigroups are groups. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Translations}}\label{Sec:Translations}
|
||
|
\logpage{[ 2, 2, 0 ]}
|
||
|
\hyperdef{L}{X7EC01B437CC2B2C9}{}
|
||
|
{
|
||
|
Given an element $x$ of a quasigroup $Q$, we can associative two permutations of $Q$ with it: the \index{translation!left}\emph{left translation} $L_x:Q\to Q$ defined by $y\mapsto x\cdot y$, and the \index{translation!right}\emph{right translation} $R_x:Q\to Q$ defined by $y\mapsto y\cdot x$.
|
||
|
|
||
|
The binary operation $x\backslash y = L_x^{-1}(y)$ is called the \index{division!left}\emph{left division}, and $x/y = R_y^{-1}(x)$ is called the \index{division!right}\emph{right division}.
|
||
|
|
||
|
Although it is possible to compose two left (right) translations of a
|
||
|
quasigroup, the resulting permutation is not necessarily a left (right)
|
||
|
translation. The set $\{L_x|x\in Q\}$ is called the \index{section!left}\emph{left section} of $Q$, and $\{R_x|x\in Q\}$ is the \index{section!right}\emph{right section} of $Q$.
|
||
|
|
||
|
Let $S_Q$ be the symmetric group on $Q$. Then the subgroup ${\rm Mlt}_{\lambda}(Q)=\langle L_x|x\in Q\rangle$ of $S_Q$ generated by all left translations is the \index{multiplication group!left}\emph{left multiplication group} of $Q$. Similarly, ${\rm Mlt}_{\rho}(Q)= \langle R_x|x\in Q\rangle$ is the \index{multiplication group!right}\emph{right multiplication group} of $Q$. The smallest group containing both ${\rm Mlt}_{\lambda}(Q)$ and ${\rm Mlt}_{\rho}(Q)$ is called the \index{multiplication group}\emph{multiplication group} of $Q$ and is denoted by ${\rm Mlt}(Q)$.
|
||
|
|
||
|
For a loop $Q$, the \index{inner mapping group!left}\emph{left inner mapping group} ${\rm Inn}_{\lambda}(Q)$ is the stabilizer of $1$ in ${\rm Mlt}_{\lambda}(Q)$. The \index{inner mapping group!right}\emph{right inner mapping group} ${\rm Inn}_{\rho}(Q)$ is defined dually. The \index{inner mapping group}\emph{inner mapping group} ${\rm Inn}(Q)$ is the stabilizer of $1$ in $Q$. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Subquasigroups and Subloops}}\label{Sec:SubquasigroupsAndSubloops}
|
||
|
\logpage{[ 2, 3, 0 ]}
|
||
|
\hyperdef{L}{X83EDF04F7952143F}{}
|
||
|
{
|
||
|
A nonempty subset $S$ of a quasigroup $Q$ is a \index{subquasigroup}\emph{subquasigroup} if it is closed under multiplication and the left and right divisions. In the
|
||
|
finite case, it suffices for $S$ to be closed under multiplication. \index{subloop}\emph{Subloops} are defined analogously when $Q$ is a loop.
|
||
|
|
||
|
The \index{nucleus!left}\emph{left nucleus} ${\rm Nuc}_{\lambda}(Q)$ of $Q$ consists of all elements $x$ of $Q$ such that $x(yz) = (xy)z$ for every $y$, $z$ in $Q$. The \index{nucleus!middle}\emph{middle nucleus} ${\rm Nuc}_{\mu}(Q)$ and the \index{nucleus!right}\emph{right nucleus} ${\rm Nuc}_{\rho}(Q)$ are defined analogously. The \index{nucleus}\emph{nucleus} ${\rm Nuc}(Q)$ is the intersection of the left, middle and right nuclei.
|
||
|
|
||
|
The \index{commutant}\emph{commutant} $C(Q)$ of $Q$ consists of all elements $x$ of $Q$ that commute with all elements of $Q$. The \index{center}\emph{center} $Z(Q)$ of $Q$ is the intersection of ${\rm Nuc}(Q)$ with $C(Q)$.
|
||
|
|
||
|
A subloop $S$ of $Q$ is \index{subloop!normal}\emph{normal} in $Q$ if $f(S)=S$ for every inner mapping $f$ of $Q$. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Nilpotence and Solvability}}\label{Sec:NilpotenceAndSolvability}
|
||
|
\logpage{[ 2, 4, 0 ]}
|
||
|
\hyperdef{L}{X869CBCE381E2C422}{}
|
||
|
{
|
||
|
For a loop $Q$ define $Z_0(Q) = 1$ and let $Z_{i+1}(Q)$ be the preimage of the center of $Q/Z_i(Q)$ in $Q$. A loop $Q$ is \index{nilpotence class}\index{nilpotent loop}\index{loop!nilpotent}\emph{nilpotent of class} $n$ if $n$ is the least nonnegative integer such that $Z_n(Q)=Q$. In such case $Z_0(Q)\le Z_1(Q)\le \dots \le Z_n(Q)$ is the \emph{upper central series}\index{central series!upper}.
|
||
|
|
||
|
The \index{derived subloop}\emph{derived subloop} $Q'$ of $Q$ is the least normal subloop of $Q$ such that $Q/Q'$ is a commutative group. Define $Q^{(0)}=Q$ and let $Q^{(i+1)}$ be the derived subloop of $Q^{(i)}$. Then $Q$ is \index{solvability class}\index{solvable loop}\index{loop!solvable}\emph{solvable of class} $n$ if $n$ is the least nonnegative integer such that $Q^{(n)} = 1$. In such a case $Q^{(0)}\ge Q^{(1)}\ge \cdots \ge Q^{(n)}$ is the \emph{derived series}\index{derived series} of $Q$. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Associators and Commutators}}\label{Sec:AssociatorsAndCommutators}
|
||
|
\logpage{[ 2, 5, 0 ]}
|
||
|
\hyperdef{L}{X7E0849977869E53D}{}
|
||
|
{
|
||
|
Let $Q$ be a quasigroup and let $x$, $y$, $z$ be elements of $Q$. Then the \index{commutator}\emph{commutator} of $x$, $y$ is the unique element $[x,y]$ of $Q$ such that $xy = [x,y](yx)$, and the \index{associator}\emph{associator} of $x$, $y$, $z$ is the unique element $[x,y,z]$ of $Q$ such that $(xy)z = [x,y,z](x(yz))$.
|
||
|
|
||
|
The \index{associator subloop}\emph{associator subloop} $A(Q)$ of $Q$ is the least normal subloop of $Q$ such that $Q/A(Q)$ is a group.
|
||
|
|
||
|
It is not hard to see that $A(Q)$ is the least normal subloop of $Q$ containing all commutators, and $Q'$ is the least normal subloop of $Q$ containing all commutators and associators. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Homomorphism and Homotopisms}}\label{Sec:HomomorphismsAndHomotopisms}
|
||
|
\logpage{[ 2, 6, 0 ]}
|
||
|
\hyperdef{L}{X791066ED7DD9F254}{}
|
||
|
{
|
||
|
Let $K$, $H$ be two quasigroups. Then a map $f:K\to H$ is a \index{homomorphism}\emph{homomorphism} if $f(x)\cdot f(y)=f(x\cdot y)$ for every $x$, $y\in K$. If $f$ is also a bijection, we speak of an \index{isomorphism}\emph{isomorphism}, and the two quasigroups are called isomorphic.
|
||
|
|
||
|
An ordered triple $(\alpha,\beta,\gamma)$ of maps $\alpha$, $\beta$, $\gamma:K\to H$ is a \index{homotopism}\emph{homotopism} if $\alpha(x)\cdot\beta(y) = \gamma(x\cdot y)$ for every $x$, $y$ in $K$. If the three maps are bijections, then $(\alpha,\beta,\gamma)$ is an \index{isotopism}\emph{isotopism}, and the two quasigroups are isotopic.
|
||
|
|
||
|
Isotopic groups are necessarily isomorphic, but this is certainly not true for
|
||
|
nonassociative quasigroups or loops. In fact, every quasigroup is isotopic to
|
||
|
a loop.
|
||
|
|
||
|
Let $(K,\cdot)$, $(K,\circ)$ be two quasigroups defined on the same set $K$. Then an isotopism $(\alpha,\beta,{\rm id}_K)$ is called a \index{isotopism!principal}\emph{principal isotopism}. An important class of principal isotopisms is obtained as follows: Let $(K,\cdot)$ be a quasigroup, and let $f$, $g$ be elements of $K$. Define a new operation $\circ$ on $K$ by $x\circ y = R_g^{-1}(x)\cdot L_f^{-1}(y)$, where $R_g$, $L_f$ are translations. Then $(K,\circ)$ is a quasigroup isotopic to $(K,\cdot)$, in fact a loop with neutral element $f\cdot g$. We call $(K,\circ)$ a \index{loop isotope!principal}\emph{principal loop isotope} of $(K,\cdot)$. }
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\chapter{\textcolor{Chapter }{How the Package Works}}\label{Chap:HowThePackageWorks}
|
||
|
\logpage{[ 3, 0, 0 ]}
|
||
|
\hyperdef{L}{X7A6DF65E826B8CFF}{}
|
||
|
{
|
||
|
The package consists of three complementary components:
|
||
|
\begin{itemize}
|
||
|
\item the core algorithms for quasigroup theoretical notions (see Chapters \ref{Chap:CreatingQuasigroupsAndLoops}, \ref{Chap:BasicMethodsAndAttributes}, \ref{Chap:MethodsBasedOnPermutationGroups} and \ref{Chap:TestingPropertiesOfQuasigroupsAndLoops}),
|
||
|
\item algorithms for specific varieties of loops, mostly for Moufang loops (see
|
||
|
Chapter \ref{Chap:SpecificMethods}),
|
||
|
\item the library of small loops (see Chapter \ref{Chap:LibrariesOfLoops}).
|
||
|
\end{itemize}
|
||
|
Although we do not explain the algorithms in detail here, we describe the
|
||
|
general philosophy so that users can anticipate the capabilities and behavior
|
||
|
of \textsf{LOOPS}.
|
||
|
\section{\textcolor{Chapter }{Representing Quasigroups}}\label{Sec:RepresentingQuasigroups}
|
||
|
\logpage{[ 3, 1, 0 ]}
|
||
|
\hyperdef{L}{X86F02BBD87FEA1C6}{}
|
||
|
{
|
||
|
Since permutation representation in the usual sense is impossible for
|
||
|
nonassociative structures, and since the theory of nonassociative
|
||
|
presentations is not well understood, we resorted to multiplication tables to
|
||
|
represent quasigroups in \textsf{GAP}. (In order to save storage space, we sometimes use one multiplication table
|
||
|
to represent several quasigroups, for instance when a quasigroup is a
|
||
|
subquasigroup of another quasigroup. See Section \ref{Sec:AboutCayleyTables} for more details.)
|
||
|
|
||
|
Consequently, the package is intended primarily for quasigroups and loops of
|
||
|
small order, say up to 1000.
|
||
|
|
||
|
The \textsf{GAP} categories \index{IsQuasigroupElement}\texttt{IsQuasigroupElement}, \index{IsLoopElement}\texttt{IsLoopElement}, \index{IsQuasigroup}\texttt{IsQuasigroup} and \index{IsLoop}\texttt{IsLoop} are declared in \textsf{LOOPS} as follows:
|
||
|
\begin{verbatim}
|
||
|
DeclareCategory( "IsQuasigroupElement", IsMultiplicativeElement );
|
||
|
DeclareRepresentation( "IsQuasigroupElmRep",
|
||
|
IsPositionalObjectRep and IsMultiplicativeElement, [1] );
|
||
|
DeclareCategory( "IsLoopElement",
|
||
|
IsQuasigroupElement and IsMultiplicativeElementWithInverse );
|
||
|
DeclareRepresentation( "IsLoopElmRep",
|
||
|
IsPositionalObjectRep and IsMultiplicativeElementWithInverse, [1] );
|
||
|
## latin (auxiliary category for GAP to tell apart IsMagma and IsQuasigroup)
|
||
|
DeclareCategory( "IsLatin", IsObject );
|
||
|
DeclareCategory( "IsQuasigroup", IsMagma and IsLatin );
|
||
|
DeclareCategory( "IsLoop", IsQuasigroup and
|
||
|
IsMultiplicativeElementWithInverseCollection);
|
||
|
\end{verbatim}
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Conversions between magmas, quasigroups, loops and groups}}\label{Sec:ConversionsEtc}
|
||
|
\logpage{[ 3, 2, 0 ]}
|
||
|
\hyperdef{L}{X807D76EF81B9D061}{}
|
||
|
{
|
||
|
Whether an object is considered a magma, quasigroup, loop or group is a matter
|
||
|
of declaration in \textsf{LOOPS}. Loops are automatically quasigroups, and both groups and quasigroups are
|
||
|
automatically magmas. All standard \textsf{GAP} commands for magmas are therefore available for quasigroups and loops.
|
||
|
|
||
|
In \textsf{GAP}, functions of the type \texttt{AsSomething(\mbox{\texttt{\mdseries\slshape X}})} convert the domain \mbox{\texttt{\mdseries\slshape X}} into \texttt{Something}, if possible, without changing the underlying domain \mbox{\texttt{\mdseries\slshape X}}. For example, if \mbox{\texttt{\mdseries\slshape X}} is declared as magma but is associative and has neutral element and inverses, \texttt{AsGroup(\mbox{\texttt{\mdseries\slshape X}})} returns the corresponding group with the underlying domain \mbox{\texttt{\mdseries\slshape X}}.
|
||
|
|
||
|
We have opted for a more general kind of conversions in \textsf{LOOPS} (starting with version 2.1.0), using functions of the type \texttt{IntoSomething(\mbox{\texttt{\mdseries\slshape X}})}. The two main features that distinguish \texttt{IntoSomething} from \texttt{AsSomething} are:
|
||
|
\begin{itemize}
|
||
|
\item The function \texttt{IntoSomething(\mbox{\texttt{\mdseries\slshape X}})} does not necessarily return the same domain as \mbox{\texttt{\mdseries\slshape X}}. The reason is that \mbox{\texttt{\mdseries\slshape X}} can be a group, for instance, defined on one of many possible domains, while \texttt{IntoLoop(\mbox{\texttt{\mdseries\slshape X}})} must result in a loop, and hence be defined on a subset of some interval $1$, $\dots$, $n$ (see Section \ref{Sec:ParentOfAQuasigroup}).
|
||
|
\item In some special situations, the function \texttt{IntoSomething(\mbox{\texttt{\mdseries\slshape X}})} allows to convert \mbox{\texttt{\mdseries\slshape X}} into \texttt{Something} even though \mbox{\texttt{\mdseries\slshape X}} does not have all the properties of \texttt{Something}. For instance, every quasigroup is isotopic to a loop, so it makes sense to
|
||
|
allow the conversion \texttt{IntoLoop(\mbox{\texttt{\mdseries\slshape Q}})} even if the quasigroup \mbox{\texttt{\mdseries\slshape Q}} does not posses a neutral element.
|
||
|
\end{itemize}
|
||
|
Details of all conversions in \textsf{LOOPS} can be found in Section \ref{Sec:Conversions}. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Calculating with Quasigroups}}\label{Sec:CalculationWithQuasigroups}
|
||
|
\logpage{[ 3, 3, 0 ]}
|
||
|
\hyperdef{L}{X87E49ED884FA6DC4}{}
|
||
|
{
|
||
|
Although the quasigroups are ultimately represented by multiplication tables,
|
||
|
the algorithms are efficient because nearly all calculations are delegated to
|
||
|
groups. The connection between quasigroups and groups is facilitated via
|
||
|
translations (see Section \ref{Sec:Translations}), and we illustrate it with a few examples: \\
|
||
|
|
||
|
|
||
|
\textsc{Example:} This example shows how properties of quasigroups can be translated into
|
||
|
properties of translations in a straightforward way. Let $Q$ be a quasigroup. We ask if $Q$ is associative. We can either test if $(xy)z=x(yz)$ for every $x$, $y$, $z$ in $Q$, or we can ask if $L_{xy}=L_xL_y$ for every $x$, $y$ in $Q$. Note that since $L_{xy}$, $L_x$ and $L_y$ are elements of a permutation group, we do not have to refer directly to the
|
||
|
multiplication table once the left translations of $Q$ are known. \\
|
||
|
|
||
|
|
||
|
\textsc{Example:} This example shows how properties of loops can be translated into properties
|
||
|
of translations in a way that requires some theory. A \index{Bol loop!left}\index{loop!left Bol}\emph{left Bol loop} is a loop satisfying $x(y(xz)) = (x(yx))z$. We claim (without proof) that a loop $Q$ is left Bol if and only if $L_xL_yL_x$ is a left translation for every $x$, $y$ in $Q$. \\
|
||
|
|
||
|
|
||
|
\textsc{Example:} This example shows that many properties of loops become purely
|
||
|
group-theoretical once they are expressed in terms of translations. A loop is \index{simple loop}\index{loop!simple}\emph{simple} if it has no nontrivial congruences. It is possible to show that a loop is
|
||
|
simple if and only if its multiplication group is a primitive permutation
|
||
|
group. \\
|
||
|
|
||
|
|
||
|
The main idea of the package is therefore to:
|
||
|
\begin{itemize}
|
||
|
\item calculate the translations and the associated permutation groups when they are
|
||
|
needed,
|
||
|
\item store them as attributes,
|
||
|
\item use them in algorithms as often as possible.
|
||
|
\end{itemize}
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Naming, Viewing and Printing Quasigroups and their Elements}}\label{Sec:NamingEtc}
|
||
|
\logpage{[ 3, 4, 0 ]}
|
||
|
\hyperdef{L}{X7D75C7A6787AF72A}{}
|
||
|
{
|
||
|
\textsf{GAP} displays information about objects in two modes: the \texttt{View} mode (default, short), and the \texttt{Print} mode (longer). Moreover, when the name of an object is set, the name is always
|
||
|
shown, no matter which display mode is used.
|
||
|
|
||
|
Only loops contained in the libraries of \textsf{LOOPS} are named. For instance, the loop obtained via \texttt{MoufangLoop(32,4)}, the 4th Moufang loop of order 32, is named "Moufang loop 32/4'' and is shown
|
||
|
as \texttt{{\textless}Moufang loop 32/4{\textgreater}}.
|
||
|
|
||
|
A generic quasigroup of order $n$ is displayed as \texttt{{\textless}quasigroup of order n{\textgreater}}. Similarly, a loop of order $n$ appears as \texttt{{\textless}loop of order n{\textgreater}}.
|
||
|
|
||
|
The displayed information of a generic loop is enhanced if more information
|
||
|
about the loop becomes available. For instance, when it is established that a
|
||
|
loop of order 12 has the left alternative property, the loop will be shown as \texttt{{\textless}left alternative loop of order 12{\textgreater}} until a stronger property is obtained. Which property is diplayed is governed
|
||
|
by the filters built into \textsf{LOOPS} (see Appendix \ref{Apx:Filters}).
|
||
|
\subsection{\textcolor{Chapter }{SetQuasigroupElmName and SetLoopElmName}}\logpage{[ 3, 4, 1 ]}
|
||
|
\hyperdef{L}{X7A7EB1B579273D07}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{SetQuasigroupElmName({\mdseries\slshape Q, name})\index{SetQuasigroupElmName@\texttt{SetQuasigroupElmName}}
|
||
|
\label{SetQuasigroupElmName}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{SetLoopElmName({\mdseries\slshape Q, name})\index{SetLoopElmName@\texttt{SetLoopElmName}}
|
||
|
\label{SetLoopElmName}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
|
||
|
|
||
|
The above functions change the names of elements of a quasigroup (resp. loop) \mbox{\texttt{\mdseries\slshape Q}} to \mbox{\texttt{\mdseries\slshape name}}.
|
||
|
|
||
|
By default, elements of a quasigroup appear as \texttt{qi} and elements of a loop appear as \texttt{li} in both display modes, where \texttt{i} is a positive integer. The neutral element of a loop is always indexed by 1.\\
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
For quasigroups and loops in the \texttt{Print} mode, we display the multiplication table (if it is known), otherwise we
|
||
|
display the elements. \\
|
||
|
|
||
|
|
||
|
In the following example, \texttt{L} is a loop with two elements.
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@L;
|
|
||
|
<loop of order 2>
|
||
|
!gapprompt@gap>| !gapinput@Print( L );
|
|
||
|
<loop with multiplication table [ [ 1, 2 ], [ 2, 1 ] ]>
|
||
|
!gapprompt@gap>| !gapinput@Elements( L );
|
|
||
|
[ l1, l2 ]
|
||
|
!gapprompt@gap>| !gapinput@SetLoopElmName( L, "loop_element" );; Elements( L );
|
|
||
|
[ loop_element1, loop_element2 ]
|
||
|
\end{Verbatim}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\chapter{\textcolor{Chapter }{Creating Quasigroups and Loops}}\label{Chap:CreatingQuasigroupsAndLoops}
|
||
|
\logpage{[ 4, 0, 0 ]}
|
||
|
\hyperdef{L}{X7AA4B9C0877550ED}{}
|
||
|
{
|
||
|
In this chapter we describe several ways in which quasigroups and loops can be
|
||
|
created in \textsf{LOOPS}.
|
||
|
\section{\textcolor{Chapter }{About Cayley Tables}}\label{Sec:AboutCayleyTables}
|
||
|
\logpage{[ 4, 1, 0 ]}
|
||
|
\hyperdef{L}{X7DE8405B82BC36A9}{}
|
||
|
{
|
||
|
Let $X=\{x_1,\dots,x_n\}$ be a set and $\cdot$ a binary operation on $X$. Then an $n$ by $n$ array with rows and columns bordered by $x_1$, $\dots$, $x_n$, in this order, is a \index{Cayley table}\emph{Cayley table}, or a \index{multiplication table}\emph{multiplication table} of $\cdot$, if the entry in the row $x_i$ and column $x_j$ is $x_i\cdot x_j$.
|
||
|
|
||
|
A Cayley table is a \index{quasigroup table}\emph{quasigroup table} if it is a \index{latin square}latin square, i.e., if every entry $x_i$ appears in every column and every row exactly once.
|
||
|
|
||
|
An unfortunate feature of multiplication tables in practice is that they are
|
||
|
often not bordered, that is, it is up to the reader to figure out what is
|
||
|
meant. Throughout this manual and in \textsf{LOOPS}, we therefore make the following assumption: \emph{All distinct entries in a quasigroup table must be positive integers, say $x_1 < x_2 < \cdots < x_n$, and if no border is specified, we assume that the table is bordered by $x_1$, $\dots$, $x_n$, in this order.} Note that we do not assume that the distinct entries $x_1$, $\dots$, $x_n$ form the interval $1$, $\dots$, $n$. The significance of this observation will become clear in Chapter \ref{Chap:MethodsBasedOnPermutationGroups}.
|
||
|
|
||
|
Finally, we say that a quasigroup table is a \index{loop table}\emph{loop table} if the first row and the first column are the same, and if the entries in the
|
||
|
first row are ordered in an ascending fashion. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Testing Cayley Tables}}\label{Sec:TestingCayleyTables}
|
||
|
\logpage{[ 4, 2, 0 ]}
|
||
|
\hyperdef{L}{X7827BF877AA87246}{}
|
||
|
{
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsQuasigroupTable and IsQuasigroupCayleyTable}}\logpage{[ 4, 2, 1 ]}
|
||
|
\hyperdef{L}{X81179355869B9DFE}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsQuasigroupTable({\mdseries\slshape T})\index{IsQuasigroupTable@\texttt{IsQuasigroupTable}}
|
||
|
\label{IsQuasigroupTable}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsQuasigroupCayleyTable({\mdseries\slshape T})\index{IsQuasigroupCayleyTable@\texttt{IsQuasigroupCayleyTable}}
|
||
|
\label{IsQuasigroupCayleyTable}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape T}} is a quasigroup table as defined above, else \texttt{false}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsLoopTable and IsLoopCayleyTable}}\logpage{[ 4, 2, 2 ]}
|
||
|
\hyperdef{L}{X7AAE48507A471069}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLoopTable({\mdseries\slshape T})\index{IsLoopTable@\texttt{IsLoopTable}}
|
||
|
\label{IsLoopTable}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLoopCayleyTable({\mdseries\slshape T})\index{IsLoopCayleyTable@\texttt{IsLoopCayleyTable}}
|
||
|
\label{IsLoopCayleyTable}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape T}} is a loop table as defined above, else \texttt{false}.\\
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\textsc{Remark:}The package \textsf{GUAVA} also contains operations dealing with latin squares. In particular, \texttt{IsLatinSquare} is declared in \textsf{GUAVA}. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Canonical and Normalized Cayley Tables}}\label{Sec:CanonicalAndNormalizedCayleyTables}
|
||
|
\logpage{[ 4, 3, 0 ]}
|
||
|
\hyperdef{L}{X7BA749CA7DB4EA87}{}
|
||
|
{
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{CanonicalCayleyTable}}
|
||
|
\logpage{[ 4, 3, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7971CCB87DAFF7B9}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{CanonicalCayleyTable({\mdseries\slshape T})\index{CanonicalCayleyTable@\texttt{CanonicalCayleyTable}}
|
||
|
\label{CanonicalCayleyTable}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
Canonical Cayley table constructed from Cayley table \mbox{\texttt{\mdseries\slshape T}} by replacing entries $x_i$ with $i$.
|
||
|
|
||
|
|
||
|
|
||
|
A Cayley table is said to be \index{Cayley table!canonical}\emph{canonical} if it is based on elements $1$, $\dots$, $n$. Although we do not assume that every quasigroup table is canonical, it is
|
||
|
often desirable to present quasigroup tables in canonical way.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{CanonicalCopy}}
|
||
|
\logpage{[ 4, 3, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X7B816D887F46E6B7}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{CanonicalCopy({\mdseries\slshape Q})\index{CanonicalCopy@\texttt{CanonicalCopy}}
|
||
|
\label{CanonicalCopy}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A canonical copy of the quasigroup or loop \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
This is a shorthand for \texttt{QuasigroupByCayleyTable(CanonicalCayleyTable(\mbox{\texttt{\mdseries\slshape Q}})} when \mbox{\texttt{\mdseries\slshape Q}} is a declared quasigroup, and \texttt{LoopByCayleyTable(CanonicalCayleyTable(\mbox{\texttt{\mdseries\slshape Q}})} when \mbox{\texttt{\mdseries\slshape Q}} is a loop.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{NormalizedQuasigroupTable}}
|
||
|
\logpage{[ 4, 3, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X821A2F9E85FAD8BF}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{NormalizedQuasigroupTable({\mdseries\slshape T})\index{NormalizedQuasigroupTable@\texttt{NormalizedQuasigroupTable}}
|
||
|
\label{NormalizedQuasigroupTable}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A normalized version of the Cayley table \mbox{\texttt{\mdseries\slshape T}}.
|
||
|
|
||
|
|
||
|
|
||
|
A given Cayley table \mbox{\texttt{\mdseries\slshape T}} is normalized in three steps as follows: first, \texttt{CanonicalCayleyTable} is called to rename entries to $1$, $\dots$, $n$, then the columns of \mbox{\texttt{\mdseries\slshape T}} are permuted so that the first row reads $1$, $\dots$, $n$, and finally the rows of \mbox{\texttt{\mdseries\slshape T}} are permuted so that the first column reads $1$, $\dots$, $n$.}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Creating Quasigroups and Loops From Cayley Tables}}\label{Sec:CreatingQuasigroupsAndLoopsFromCayleyTables}
|
||
|
\logpage{[ 4, 4, 0 ]}
|
||
|
\hyperdef{L}{X7C2372BB8739C5A2}{}
|
||
|
{
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{QuasigroupByCayleyTable and LoopByCayleyTable}}\logpage{[ 4, 4, 1 ]}
|
||
|
\hyperdef{L}{X860135BB85F2DB19}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{QuasigroupByCayleyTable({\mdseries\slshape T})\index{QuasigroupByCayleyTable@\texttt{QuasigroupByCayleyTable}}
|
||
|
\label{QuasigroupByCayleyTable}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LoopByCayleyTable({\mdseries\slshape T})\index{LoopByCayleyTable@\texttt{LoopByCayleyTable}}
|
||
|
\label{LoopByCayleyTable}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The quasigroup (resp. loop) with quasigroup table (resp. loop table) \mbox{\texttt{\mdseries\slshape T}}.
|
||
|
|
||
|
|
||
|
|
||
|
Since \texttt{CanonicalCayleyTable} is called within the above operation, the resulting quasigroup will have
|
||
|
Cayley table with distinct entries $1$, $\dots$, $n$. }
|
||
|
|
||
|
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@ct := CanonicalCayleyTable( [[5,3],[3,5]] );
|
|
||
|
[ [ 2, 1 ], [ 1, 2 ] ]
|
||
|
!gapprompt@gap>| !gapinput@NormalizedQuasigroupTable( ct );
|
|
||
|
[ [ 1, 2 ], [ 2, 1 ] ]
|
||
|
!gapprompt@gap>| !gapinput@LoopByCayleyTable( last );
|
|
||
|
<loop of order 2>
|
||
|
!gapprompt@gap>| !gapinput@[ IsQuasigroupTable( ct ), IsLoopTable( ct ) ];
|
|
||
|
[ true, false ]
|
||
|
\end{Verbatim}
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Creating Quasigroups and Loops from a File}}\label{Sec:CreatingQuasigroupsAndLoopsFromAFile}
|
||
|
\logpage{[ 4, 5, 0 ]}
|
||
|
\hyperdef{L}{X849944F17E2B37F8}{}
|
||
|
{
|
||
|
Typing a large multiplication table manually is tedious and error-prone. We
|
||
|
have therefore included a general method in \textsf{LOOPS} that reads multiplication tables of quasigroups from a file.
|
||
|
|
||
|
Instead of writing a separate algorithm for each common format, our algorithm
|
||
|
relies on the user to provide a bit of information about the input file. Here
|
||
|
is an outline of the algorithm, with file named \mbox{\texttt{\mdseries\slshape filename}} and a string \mbox{\texttt{\mdseries\slshape del}} as input (in essence, the characters of \mbox{\texttt{\mdseries\slshape del}} will be ignored while reading the file):
|
||
|
\begin{itemize}
|
||
|
\item read the entire content of \mbox{\texttt{\mdseries\slshape filename}} into a string \mbox{\texttt{\mdseries\slshape s}},
|
||
|
\item replace all end-of-line characters in \mbox{\texttt{\mdseries\slshape s}} by spaces,
|
||
|
\item replace by spaces all characters of \mbox{\texttt{\mdseries\slshape s}} that appear in \mbox{\texttt{\mdseries\slshape del}},
|
||
|
\item split \mbox{\texttt{\mdseries\slshape s}} into maximal substrings without spaces, called \emph{chunks} here,
|
||
|
\item let $n$ be the number of distinct chunks,
|
||
|
\item if the number of chunks is not $n^2$, report error,
|
||
|
\item construct the multiplication table by assigning numerical values $1$, $\dots$, $n$ to chunks, depending on their position among distinct chunks.
|
||
|
\end{itemize}
|
||
|
|
||
|
|
||
|
The following examples clarify the algorithm and document its versatility. All
|
||
|
examples are of the form $F+D\Longrightarrow T$, meaning that an input file containing $F$ together with the deletion string $D$ produce multiplication table $T$. \\
|
||
|
|
||
|
|
||
|
\textsc{Example:} Data does not have to be arranged into an array of any kind.
|
||
|
\[ \begin{array}{cccc} 0&1&2&1\\ 2&0&2& \\ 0&1& & \end{array}\quad + \quad ""
|
||
|
\quad \Longrightarrow\quad \begin{array}{ccc} 1&2&3\\ 2&3&1\\ 3&1&2
|
||
|
\end{array} \]
|
||
|
|
||
|
|
||
|
\textsc{Example:} Chunks can be any strings.
|
||
|
\[ \begin{array}{cc} {\rm red}&{\rm green}\\ {\rm green}&{\rm red}\\
|
||
|
\end{array}\quad + \quad "" \quad \Longrightarrow\quad \begin{array}{cc} 1&
|
||
|
2\\ 2& 1 \end{array} \]
|
||
|
|
||
|
|
||
|
\textsc{Example:} A typical table produced by \textsf{GAP} is easily parsed by deleting brackets and commas.
|
||
|
\[ [ [0, 1], [1, 0] ] \quad + \quad "[,]" \quad \Longrightarrow\quad
|
||
|
\begin{array}{cc} 1& 2\\ 2& 1 \end{array} \]
|
||
|
|
||
|
|
||
|
\textsc{Example:} A typical {\TeX} table with rows separated by lines is also easily converted. Note that we have
|
||
|
to use $\backslash\backslash$ to ensure that every occurrence of $\backslash$ is deleted, since $\backslash\backslash$ represents the character $\backslash$ in \textsf{GAP}
|
||
|
\[ \begin{array}{lll} x\&& y\&&\ z\backslash\backslash\cr y\&& z\&&\
|
||
|
x\backslash\backslash\cr z\&& x\&&\ y \end{array} \quad + \quad
|
||
|
"\backslash\backslash\&" \quad \Longrightarrow\quad \begin{array}{ccc}
|
||
|
1&2&3\cr 2&3&1\cr 3&1&2 \end{array} \]
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{QuasigroupFromFile and LoopFromFile}}\logpage{[ 4, 5, 1 ]}
|
||
|
\hyperdef{L}{X81A1DB918057933E}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{QuasigroupFromFile({\mdseries\slshape filename, del})\index{QuasigroupFromFile@\texttt{QuasigroupFromFile}}
|
||
|
\label{QuasigroupFromFile}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LoopFromFile({\mdseries\slshape filename, del})\index{LoopFromFile@\texttt{LoopFromFile}}
|
||
|
\label{LoopFromFile}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The quasigroup (resp. loop) whose multiplication table data is in file \mbox{\texttt{\mdseries\slshape filename}}, ignoring the characters contained in the string \mbox{\texttt{\mdseries\slshape del}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Creating Quasigroups and Loops From Sections}}\label{Sec:CreatingQuasigroupsAndLoopsFromSections}
|
||
|
\logpage{[ 4, 6, 0 ]}
|
||
|
\hyperdef{L}{X820E67F88319C38B}{}
|
||
|
{
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{CayleyTableByPerms}}
|
||
|
\logpage{[ 4, 6, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7F94C8DD7E1A3470}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{CayleyTableByPerms({\mdseries\slshape P})\index{CayleyTableByPerms@\texttt{CayleyTableByPerms}}
|
||
|
\label{CayleyTableByPerms}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
If \mbox{\texttt{\mdseries\slshape P}} is a set of $n$ permutations of an $n$-element set $X$, returns Cayley table $C$ such that $C[i][j] = X[j]^{P[i]}$.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
The cardinality of the underlying set is determined by the moved points of the
|
||
|
first permutation in \mbox{\texttt{\mdseries\slshape P}}, unless the first permutation is the identity permutation, in which case the
|
||
|
second permutation is used.
|
||
|
|
||
|
In particular, if \mbox{\texttt{\mdseries\slshape P}} is the left section of a quasigroup \mbox{\texttt{\mdseries\slshape Q}}, \texttt{CayleyTableByPerms(\mbox{\texttt{\mdseries\slshape Q}})} returns the multiplication table of \mbox{\texttt{\mdseries\slshape Q}}. }
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{QuasigroupByLeftSection and LoopByLeftSection}}\logpage{[ 4, 6, 2 ]}
|
||
|
\hyperdef{L}{X7EC1EB0D7B8382A1}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{QuasigroupByLeftSection({\mdseries\slshape P})\index{QuasigroupByLeftSection@\texttt{QuasigroupByLeftSection}}
|
||
|
\label{QuasigroupByLeftSection}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LoopByLeftSection({\mdseries\slshape P})\index{LoopByLeftSection@\texttt{LoopByLeftSection}}
|
||
|
\label{LoopByLeftSection}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
If \mbox{\texttt{\mdseries\slshape P}} is a set of permutations corresponding to the left translations of a
|
||
|
quasigroup (resp. loop), returns the corresponding quasigroup (resp. loop).
|
||
|
|
||
|
|
||
|
|
||
|
The order of permutations in \mbox{\texttt{\mdseries\slshape P}} is important in the quasigroup case, but it is disregarded in the loop case,
|
||
|
since then the order of rows in the corresponding multiplication table is
|
||
|
determined by the presence of the neutral element.}
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{QuasigroupByRightSection and LoopByRightSection}}\logpage{[ 4, 6, 3 ]}
|
||
|
\hyperdef{L}{X80B436ED7CC0749E}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{QuasigroupByRightSection({\mdseries\slshape P})\index{QuasigroupByRightSection@\texttt{QuasigroupByRightSection}}
|
||
|
\label{QuasigroupByRightSection}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LoopByRightSection({\mdseries\slshape P})\index{LoopByRightSection@\texttt{LoopByRightSection}}
|
||
|
\label{LoopByRightSection}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
|
||
|
|
||
|
These are the dual operations to \texttt{QuasigroupByLeftSection} and \texttt{LoopByLeftSection}.}
|
||
|
|
||
|
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@S := Subloop( MoufangLoop( 12, 1 ), [ 3 ] );;
|
|
||
|
!gapprompt@gap>| !gapinput@ls := LeftSection( S );
|
|
||
|
[ (), (1,3,5), (1,5,3) ]
|
||
|
!gapprompt@gap>| !gapinput@CayleyTableByPerms( ls );
|
|
||
|
[ [ 1, 3, 5 ], [ 3, 5, 1 ], [ 5, 1, 3 ] ]
|
||
|
!gapprompt@gap>| !gapinput@CayleyTable( LoopByLeftSection( ls ) );
|
|
||
|
[ [ 1, 2, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ] ]
|
||
|
\end{Verbatim}
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Creating Quasigroups and Loops From Folders}}\label{Sec:CreatingQuasigroupsAndLoopsFromFolders}
|
||
|
\logpage{[ 4, 7, 0 ]}
|
||
|
\hyperdef{L}{X85ABE99E84E5B0E8}{}
|
||
|
{
|
||
|
Let $G$ be a group, $H$ a subgroup of $G$, and $T$ a right transversal to $H$ in $G$. Let $\tau:G\to T$ be defined by $x\in H\tau(x)$. Then the operation $\circ$ defined on the right cosets $Q = \{Ht|t\in T\}$ by $Hs\circ Ht = H\tau(st)$ turns $Q$ into a quasigroup if and only if $T$ is a right transversal to all conjugates $g^{-1}Hg$ of $H$ in $G$. (In fact, every quasigroup $Q$ can be obtained in this way by letting $G={\rm Mlt}_\rho(Q)$, $H={\rm Inn}_\rho(Q)$ and $T=\{R_x|x\in Q\}$.)
|
||
|
|
||
|
We call the triple $(G,H,T)$ a \index{folder!quasigroup}\emph{right quasigroup (or loop) folder}.
|
||
|
\subsection{\textcolor{Chapter }{QuasigroupByRightFolder and LoopByRightFolder}}\logpage{[ 4, 7, 1 ]}
|
||
|
\hyperdef{L}{X83168E62861F70AB}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{QuasigroupByRightFolder({\mdseries\slshape G, H, T})\index{QuasigroupByRightFolder@\texttt{QuasigroupByRightFolder}}
|
||
|
\label{QuasigroupByRightFolder}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LoopByRightFolder({\mdseries\slshape G, H, T})\index{LoopByRightFolder@\texttt{LoopByRightFolder}}
|
||
|
\label{LoopByRightFolder}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The quasigroup (resp. loop) from the right folder (\mbox{\texttt{\mdseries\slshape G}}, \mbox{\texttt{\mdseries\slshape H}}, \mbox{\texttt{\mdseries\slshape T}}).
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\textsc{Remark:} We do not support the dual operations for left sections since, by default,
|
||
|
actions in \textsf{GAP} act on the right. \\
|
||
|
|
||
|
|
||
|
Here is a simple example in which $T$ is actually the right section of the resulting loop.
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@T := [ (), (1,2)(3,4,5), (1,3,5)(2,4), (1,4,3)(2,5), (1,5,4)(2,3) ];;
|
|
||
|
!gapprompt@gap>| !gapinput@G := Group( T );; H := Stabilizer( G, 1 );;
|
|
||
|
!gapprompt@gap>| !gapinput@LoopByRightFolder( G, H, T );
|
|
||
|
<loop of order 5>
|
||
|
\end{Verbatim}
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Creating Quasigroups and Loops By Nuclear Extensions}}\label{Sec:CreatingQuasigroupsAndLoopsByNuclearExtensions}
|
||
|
\logpage{[ 4, 8, 0 ]}
|
||
|
\hyperdef{L}{X8759431780AC81A9}{}
|
||
|
{
|
||
|
Let $K$, $F$ be loops. Then a loop $Q$ is an \index{extension}\emph{extension} of $K$ by $F$ if $K$ is a normal subloop of $Q$ such that $Q/K$ is isomorphic to $F$. An extension $Q$ of $K$ by $F$ is \index{extension!nuclear}\emph{nuclear} if $K$ is an abelian group and $K\le N(Q)$.
|
||
|
|
||
|
A map $\theta:F\times F\to K$ is a \index{cocycle}\emph{cocycle} if $\theta(1,x) = \theta(x,1) = 1$ for every $x\in F$.
|
||
|
|
||
|
The following theorem holds for loops $Q$, $F$ and an abelian group $K$: $Q$ is a nuclear extension of $K$ by $F$ if and only if there is a cocycle $\theta:F\times F\to K$ and a homomorphism $\varphi:F\to{\rm Aut}(Q)$ such that $K\times F$ with multiplication $(a,x)(b,y) = (a\varphi_x(b)\theta(x,y),xy)$ is isomorphic to $Q$.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{NuclearExtension}}
|
||
|
\logpage{[ 4, 8, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X784733C67AA6B2FA}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{NuclearExtension({\mdseries\slshape Q, K})\index{NuclearExtension@\texttt{NuclearExtension}}
|
||
|
\label{NuclearExtension}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The data necessary to construct \mbox{\texttt{\mdseries\slshape Q}} as a nuclear extension of the subloop \mbox{\texttt{\mdseries\slshape K}} by \mbox{\texttt{\mdseries\slshape Q}}$/$\mbox{\texttt{\mdseries\slshape K}}, namely $[K, F, \varphi, \theta]$ as above. Note that \mbox{\texttt{\mdseries\slshape K}} must be a commutative subloop of the nucleus of \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
If $n=|F|$ and $m=|$\mbox{\texttt{\mdseries\slshape K}}$|$, the cocycle $\theta$ is returned as an $n\times n$ array with entries in $\{1,\dots,m\}$, and the homomorphism $\varphi$ is returned as a list of length $n$ of permutations of $\{1,\dots,m\}$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LoopByExtension}}
|
||
|
\logpage{[ 4, 8, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X79AEE93E7E15B802}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LoopByExtension({\mdseries\slshape K, F, f, t})\index{LoopByExtension@\texttt{LoopByExtension}}
|
||
|
\label{LoopByExtension}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The extension of an abelian group \mbox{\texttt{\mdseries\slshape K}} by a loop \mbox{\texttt{\mdseries\slshape F}}, using action \mbox{\texttt{\mdseries\slshape f}} and cocycle \mbox{\texttt{\mdseries\slshape t}}. The arguments must be formatted as the output of \texttt{NuclearExtension}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@F := IntoLoop( Group( (1,2) ) );
|
|
||
|
<loop of order 2>
|
||
|
!gapprompt@gap>| !gapinput@K := DirectProduct( F, F );;
|
|
||
|
!gapprompt@gap>| !gapinput@phi := [ (), (2,3) ];;
|
|
||
|
!gapprompt@gap>| !gapinput@theta := [ [ 1, 1 ], [ 1, 3 ] ];;
|
|
||
|
!gapprompt@gap>| !gapinput@LoopByExtension( K, F, phi, theta );
|
|
||
|
<loop of order 8>
|
||
|
!gapprompt@gap>| !gapinput@IsAssociative( last );
|
|
||
|
false
|
||
|
\end{Verbatim}
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Random Quasigroups and Loops}}\label{Sec:RandomQuasigroupsAndLoops}
|
||
|
\logpage{[ 4, 9, 0 ]}
|
||
|
\hyperdef{L}{X7AE29A1A7AA5C25A}{}
|
||
|
{
|
||
|
An algorithm is said to select a latin square of order $n$ \emph{at random}\index{latin square!random} if every latin square of order $n$ is returned by the algorithm with the same probability. Selecting a latin
|
||
|
square at random is a nontrivial problem.
|
||
|
|
||
|
In \cite{JaMa}, Jacobson and Matthews defined a random walk on the space of latin squares
|
||
|
and so-called improper latin squares that visits every latin square with the
|
||
|
same probability. The diameter of the space is no more than $4(n-1)^3$ in the sense that no more than $4(n-1)^3$ properly chosen steps are needed to travel from one latin square of order $n$ to another.
|
||
|
|
||
|
The Jacobson-Matthews algorithm can be used to generate random quasigroups as
|
||
|
follows: (i) select any latin square of order $n$, for instance the canonical multiplication table of the cyclic group of order $n$, (ii) perform sufficiently many steps of the random walk, stopping at a
|
||
|
proper or improper latin square, (iii) if necessary, perform a few more steps
|
||
|
to end up with a proper latin square. Upon normalizing the resulting latin
|
||
|
square, we obtain a random loop of order $n$.
|
||
|
|
||
|
By the above result, it suffices to use about $n^3$ steps to arrive at any latin square of order $n$ from the initial latin square. In fact, a smaller number of steps is probably
|
||
|
sufficient.
|
||
|
\subsection{\textcolor{Chapter }{RandomQuasigroup and RandomLoop}}\logpage{[ 4, 9, 1 ]}
|
||
|
\hyperdef{L}{X8271C0F5786B6FA9}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RandomQuasigroup({\mdseries\slshape n[, iter]})\index{RandomQuasigroup@\texttt{RandomQuasigroup}}
|
||
|
\label{RandomQuasigroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RandomLoop({\mdseries\slshape n[, iter]})\index{RandomLoop@\texttt{RandomLoop}}
|
||
|
\label{RandomLoop}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A random quasigroup (resp. loop) of order \mbox{\texttt{\mdseries\slshape n}} using the Jacobson-Matthews algorithm. If the optional argument \mbox{\texttt{\mdseries\slshape iter}} is omitted, \mbox{\texttt{\mdseries\slshape n}}${}^3$ steps are used. Otherwise \mbox{\texttt{\mdseries\slshape iter}} steps are used.
|
||
|
|
||
|
|
||
|
|
||
|
If \mbox{\texttt{\mdseries\slshape iter}} is small, the Cayley table of the returned quasigroup (resp. loop) will be
|
||
|
close to the canonical Cayley table of the cyclic group of order \mbox{\texttt{\mdseries\slshape n}}.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{RandomNilpotentLoop}}
|
||
|
\logpage{[ 4, 9, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X817132C887D3FD3A}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RandomNilpotentLoop({\mdseries\slshape lst})\index{RandomNilpotentLoop@\texttt{RandomNilpotentLoop}}
|
||
|
\label{RandomNilpotentLoop}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A random nilpotent loop\index{loop!nilpotent} as follows (see Section \ref{Sec:NilpotencyAndCentralSeries} for more information on nilpotency): \mbox{\texttt{\mdseries\slshape lst}} must be a list of positive integers and/or finite abelian groups. If \texttt{\mbox{\texttt{\mdseries\slshape lst}}=[a1]} and \texttt{a1} is an integer, a random abelian group of order \texttt{a1} is returned, else \texttt{a1} is an abelian group and \texttt{AsLoop(a1)} is returned. If \texttt{\mbox{\texttt{\mdseries\slshape lst}}= [a1,...,am]}, a random central extension of \texttt{RandomNilpotentLoop([a1])} by \texttt{RandomNilpotentLoop([a2,...,am])} is returned.
|
||
|
|
||
|
|
||
|
|
||
|
To determine the nilpotency class $c$ of the resulting loop, assume that \mbox{\texttt{\mdseries\slshape lst}} has length at least 2, contains only integers bigger than 1, and let $m$ be the last entry of \mbox{\texttt{\mdseries\slshape lst}}. If $m>2$ then $c$ is equal to \texttt{Length(\mbox{\texttt{\mdseries\slshape lst}})}, else $c$ is equal to \texttt{Length(\mbox{\texttt{\mdseries\slshape lst}})-1}.}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Conversions}}\label{Sec:Conversions}
|
||
|
\logpage{[ 4, 10, 0 ]}
|
||
|
\hyperdef{L}{X7BC2D8877A943D74}{}
|
||
|
{
|
||
|
\textsf{LOOPS} contains methods that convert between magmas, quasigroups, loops and groups,
|
||
|
provided such conversions are possible. Each of the conversion methods \texttt{IntoQuasigroup}, \texttt{IntoLoop} and \texttt{IntoGroup} returns \texttt{fail} if the requested conversion is not possible. \\
|
||
|
|
||
|
|
||
|
\textsc{Remark:} Up to version 2.0.0 of \textsf{LOOPS}, we supported \texttt{AsQuasigroup}, \texttt{AsLoop} and \texttt{AsGroup} in place of \texttt{IntoQuasigroup}, \texttt{IntoLoop} and \texttt{IntoGroup}, respectively. We have changed the terminology starting with version 2.1.0 in
|
||
|
order to comply with \textsf{GAP} naming rules for \texttt{AsSomething}, as explained in Chapter \ref{Chap:HowThePackageWorks}. Finally, the method \texttt{AsGroup} is a core method of \textsf{GAP} that returns an fp group if its argument is an associative loop.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IntoQuasigroup}}
|
||
|
\logpage{[ 4, 10, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X84575A4B78CC545E}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IntoQuasigroup({\mdseries\slshape M})\index{IntoQuasigroup@\texttt{IntoQuasigroup}}
|
||
|
\label{IntoQuasigroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
If \mbox{\texttt{\mdseries\slshape M}} is a declared magma that happens to be a quasigroup, the corresponding
|
||
|
quasigroup is returned. If \mbox{\texttt{\mdseries\slshape M}} is already declared as a quasigroup, \mbox{\texttt{\mdseries\slshape M}} is returned.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{PrincipalLoopIsotope}}
|
||
|
\logpage{[ 4, 10, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X79CEA57C850C7070}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{PrincipalLoopIsotope({\mdseries\slshape M, f, g})\index{PrincipalLoopIsotope@\texttt{PrincipalLoopIsotope}}
|
||
|
\label{PrincipalLoopIsotope}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
An isomorphic copy of the principal isotope $($\mbox{\texttt{\mdseries\slshape M}},$\circ)$ via the transposition $(1$,\mbox{\texttt{\mdseries\slshape f}}$\cdot$\mbox{\texttt{\mdseries\slshape g}}$)$. An isomorphic copy is returned rather than $($\mbox{\texttt{\mdseries\slshape M}},$\circ)$ because in \textsf{LOOPS} all loops have to have neutral element labeled as $1$.
|
||
|
|
||
|
|
||
|
|
||
|
Given a quasigroup $M$ and two of its elements $f$, $g$, the principal loop isotope $x\circ y = R_g^{-1}(x)\cdot L_f^{-1}(y)$ turns $(M,\circ)$ into a loop with neutral element $f\cdot g$ (see Section \ref{Sec:HomomorphismsAndHomotopisms}).}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IntoLoop}}
|
||
|
\logpage{[ 4, 10, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X7A59C36683118E5A}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IntoLoop({\mdseries\slshape M})\index{IntoLoop@\texttt{IntoLoop}}
|
||
|
\label{IntoLoop}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
If \mbox{\texttt{\mdseries\slshape M}} is a declared magma that happens to be a quasigroup (but not necessarily a
|
||
|
loop!), a loop is returned as follows: If \mbox{\texttt{\mdseries\slshape M}} is already declared as a loop, \mbox{\texttt{\mdseries\slshape M}} is returned. Else, if \mbox{\texttt{\mdseries\slshape M}} possesses a neutral element $e$ and if $f$ is the first element of \mbox{\texttt{\mdseries\slshape M}}, then an isomorphic copy of \mbox{\texttt{\mdseries\slshape M}} via the transposition $(e,f)$ is returned. If \mbox{\texttt{\mdseries\slshape M}} does not posses a neutral element, \texttt{PrincipalLoopIsotope(\mbox{\texttt{\mdseries\slshape M}}, \mbox{\texttt{\mdseries\slshape M.1}}, \mbox{\texttt{\mdseries\slshape M.1}})} is returned.\\
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\textsc{Remark:} One could obtain a loop from a declared magma \mbox{\texttt{\mdseries\slshape M}} in yet another way, by normalizing the Cayley table of \mbox{\texttt{\mdseries\slshape M}}. The three approaches can result in nonisomorphic loops in general.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IntoGroup}}
|
||
|
\logpage{[ 4, 10, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X7B5C6C64831B866E}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IntoGroup({\mdseries\slshape M})\index{IntoGroup@\texttt{IntoGroup}}
|
||
|
\label{IntoGroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
If \mbox{\texttt{\mdseries\slshape M}} is a declared magma that happens to be a group, the corresponding group is
|
||
|
returned as follows: If \mbox{\texttt{\mdseries\slshape M}} is already declared as a group, \mbox{\texttt{\mdseries\slshape M}} is returned, else \texttt{RightMultiplicationGroup(IntoLoop(\mbox{\texttt{\mdseries\slshape M}}))} is returned, which is a permutation group isomorphic to \mbox{\texttt{\mdseries\slshape M}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Products of Quasigroups and Loops}}\label{Sec:ProductsOfLoops}
|
||
|
\logpage{[ 4, 11, 0 ]}
|
||
|
\hyperdef{L}{X79B7327C79029086}{}
|
||
|
{
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{DirectProduct}}
|
||
|
\logpage{[ 4, 11, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X861BA02C7902A4F4}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{DirectProduct({\mdseries\slshape Q1, ..., Qn})\index{DirectProduct@\texttt{DirectProduct}}
|
||
|
\label{DirectProduct}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
If each \mbox{\texttt{\mdseries\slshape Qi}} is either a declared quasigroup, declared loop or a declared group, the direct
|
||
|
product of \mbox{\texttt{\mdseries\slshape Q1}}, $\dots$, \mbox{\texttt{\mdseries\slshape Qn}} is returned. If every \mbox{\texttt{\mdseries\slshape Qi}} is a declared group, a group is returned; if every \mbox{\texttt{\mdseries\slshape Qi}} is a declared loop, a loop is returned; otherwise a quasigroup is returned.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Opposite Quasigroups and Loops}}\label{Sec:OppositeQuasigroupsAndLoops}
|
||
|
\logpage{[ 4, 12, 0 ]}
|
||
|
\hyperdef{L}{X7865FC8D7854C2E3}{}
|
||
|
{
|
||
|
When $Q$ is a quasigroup with multiplication $\cdot$, the \index{opposite quasigroup}\index{quasigroup!opposite}\emph{opposite quasigroup} of $Q$ is a quasigroup with the same underlying set as $Q$ and with multiplication $*$ defined by $x*y=y\cdot x$.
|
||
|
\subsection{\textcolor{Chapter }{Opposite, OppositeQuasigroup and OppositeLoop}}\logpage{[ 4, 12, 1 ]}
|
||
|
\hyperdef{L}{X87B6AED47EE2BCD3}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Opposite({\mdseries\slshape Q})\index{Opposite@\texttt{Opposite}}
|
||
|
\label{Opposite}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{OppositeQuasigroup({\mdseries\slshape Q})\index{OppositeQuasigroup@\texttt{OppositeQuasigroup}}
|
||
|
\label{OppositeQuasigroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{OppositeLoop({\mdseries\slshape Q})\index{OppositeLoop@\texttt{OppositeLoop}}
|
||
|
\label{OppositeLoop}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The opposite of the quasigroup (resp. loop) \mbox{\texttt{\mdseries\slshape Q}}. Note that if \texttt{OppositeQuasigroup(\mbox{\texttt{\mdseries\slshape Q}})} or \texttt{OppositeLoop(\mbox{\texttt{\mdseries\slshape Q}})} are called, then the returned quasigroup or loop is not stored as an attribute
|
||
|
of \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\chapter{\textcolor{Chapter }{Basic Methods And Attributes}}\label{Chap:BasicMethodsAndAttributes}
|
||
|
\logpage{[ 5, 0, 0 ]}
|
||
|
\hyperdef{L}{X7B9F619279641FAA}{}
|
||
|
{
|
||
|
In this chapter we describe the basic core methods and attributes of the \textsf{LOOPS} package.
|
||
|
\section{\textcolor{Chapter }{Basic Attributes}}\label{Sec:BasicAttributes}
|
||
|
\logpage{[ 5, 1, 0 ]}
|
||
|
\hyperdef{L}{X8373A7348161DB23}{}
|
||
|
{
|
||
|
We associate many attributes with quasigroups in order to speed up
|
||
|
computation. This section lists some basic attributes of quasigroups and
|
||
|
loops.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Elements}}
|
||
|
\logpage{[ 5, 1, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X79B130FC7906FB4C}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Elements({\mdseries\slshape Q})\index{Elements@\texttt{Elements}}
|
||
|
\label{Elements}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The list of elements of a quasigroup \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
See Section \ref{Sec:NamingEtc} for more information about element labels.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{CayleyTable}}
|
||
|
\logpage{[ 5, 1, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X85457FA27DE7114D}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{CayleyTable({\mdseries\slshape Q})\index{CayleyTable@\texttt{CayleyTable}}
|
||
|
\label{CayleyTable}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The Cayley table of a quasigroup \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
See Section \ref{Sec:AboutCayleyTables} for more information about quasigroup Cayley tables.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{One}}
|
||
|
\logpage{[ 5, 1, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X8129A6877FFD804B}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{One({\mdseries\slshape Q})\index{One@\texttt{One}}
|
||
|
\label{One}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The identity element of a loop \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\textsc{Remark:}If you want to know if a quasigroup \mbox{\texttt{\mdseries\slshape Q}} has a neutral element, you can find out with the standard function for magmas \texttt{MultiplicativeNeutralElement(\mbox{\texttt{\mdseries\slshape Q}})}.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Size}}
|
||
|
\logpage{[ 5, 1, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X858ADA3B7A684421}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Size({\mdseries\slshape Q})\index{Size@\texttt{Size}}
|
||
|
\label{Size}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The size of a quasigroup \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Exponent}}
|
||
|
\logpage{[ 5, 1, 5 ]}\nobreak
|
||
|
\hyperdef{L}{X7D44470C7DA59C1C}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Exponent({\mdseries\slshape Q})\index{Exponent@\texttt{Exponent}}
|
||
|
\label{Exponent}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The exponent of a power associative loop \mbox{\texttt{\mdseries\slshape Q}}. (The method does not test if \mbox{\texttt{\mdseries\slshape Q}} is power associative.)
|
||
|
|
||
|
|
||
|
|
||
|
When \mbox{\texttt{\mdseries\slshape Q}} is a \emph{power associative loop}\index{loop!power associative}\index{power associative loop}, that is, the powers of elements are well-defined in \mbox{\texttt{\mdseries\slshape Q}}, then the \emph{exponent}\index{exponent} of \mbox{\texttt{\mdseries\slshape Q}} is the smallest positive integer divisible by the orders of all elements of \mbox{\texttt{\mdseries\slshape Q}}. }
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Basic Arithmetic Operations}}\label{Sec:BasicArithemticOperations}
|
||
|
\logpage{[ 5, 2, 0 ]}
|
||
|
\hyperdef{L}{X82F2CA4A848ABD2B}{}
|
||
|
{
|
||
|
Each quasigroup element in \textsf{GAP} knows to which quasigroup it belongs. It is therefore possible to perform
|
||
|
arithmetic operations with quasigroup elements without referring to the
|
||
|
quasigroup. All elements involved in the calculation must belong to the same
|
||
|
quasigroup.
|
||
|
|
||
|
Two elements $x$, $y$ of the same quasigroup are multiplied by $x*y$ in \textsf{GAP}. Since multiplication of at least three elements is ambiguous in the
|
||
|
nonassociative case, we parenthesize elements by default from left to right,
|
||
|
i.e., $x*y*z$ means $((x*y)*z)$. Of course, one can specify the order of multiplications by providing
|
||
|
parentheses.
|
||
|
\subsection{\textcolor{Chapter }{LeftDivision and RightDivision}}\logpage{[ 5, 2, 1 ]}
|
||
|
\hyperdef{L}{X7D5956967BCC1834}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftDivision({\mdseries\slshape x, y})\index{LeftDivision@\texttt{LeftDivision}}
|
||
|
\label{LeftDivision}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightDivision({\mdseries\slshape x, y})\index{RightDivision@\texttt{RightDivision}}
|
||
|
\label{RightDivision}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The left division \mbox{\texttt{\mdseries\slshape x}}$\backslash$\mbox{\texttt{\mdseries\slshape y}} (resp. the right division \mbox{\texttt{\mdseries\slshape x}}$/$\mbox{\texttt{\mdseries\slshape y}}) of two elements \mbox{\texttt{\mdseries\slshape x}}, \mbox{\texttt{\mdseries\slshape y}} of the same quasigroup.\\
|
||
|
|
||
|
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftDivision({\mdseries\slshape S, x})\index{LeftDivision@\texttt{LeftDivision}}
|
||
|
\label{LeftDivision}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftDivision({\mdseries\slshape x, S})\index{LeftDivision@\texttt{LeftDivision}}
|
||
|
\label{LeftDivision}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightDivision({\mdseries\slshape S, x})\index{RightDivision@\texttt{RightDivision}}
|
||
|
\label{RightDivision}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightDivision({\mdseries\slshape x, S})\index{RightDivision@\texttt{RightDivision}}
|
||
|
\label{RightDivision}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The list of elements obtained by performing the specified arithmetical
|
||
|
operation elementwise using a list \mbox{\texttt{\mdseries\slshape S}} of elements and an element \mbox{\texttt{\mdseries\slshape x}}.\\
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\textsc{Remark:} We support $/$ in place of \texttt{RightDivision}. But we do not support $\backslash$ in place of \texttt{LeftDivision}.
|
||
|
\subsection{\textcolor{Chapter }{LeftDivisionCayleyTable and RightDivisionCayleyTable}}\logpage{[ 5, 2, 2 ]}
|
||
|
\hyperdef{L}{X804F67C8796A0EB3}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftDivisionCayleyTable({\mdseries\slshape Q})\index{LeftDivisionCayleyTable@\texttt{LeftDivisionCayleyTable}}
|
||
|
\label{LeftDivisionCayleyTable}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightDivisionCayleyTable({\mdseries\slshape Q})\index{RightDivisionCayleyTable@\texttt{RightDivisionCayleyTable}}
|
||
|
\label{RightDivisionCayleyTable}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The Cayley table of the respective arithmetic operation of a quasigroup \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Powers and Inverses}}\label{Sec:PowersAndInverses}
|
||
|
\logpage{[ 5, 3, 0 ]}
|
||
|
\hyperdef{L}{X810850247ADB4EE9}{}
|
||
|
{
|
||
|
Powers of elements are generally not well-defined in quasigroups. For magmas
|
||
|
and a positive integral exponent, \textsf{GAP} calculates powers in the following way: $x^1=x$, $x^{2k}=(x^k)\cdot(x^k)$ and $x^{2k+1}=(x^{2k})\cdot x$. One can easily see that this returns $x^k$ in about $\log_2(k)$ steps. For \textsf{LOOPS}, we have decided to keep this method, but the user should be aware that the
|
||
|
method is sound only in power associative quasigroups.
|
||
|
|
||
|
Let $x$ be an element of a loop $Q$ with neutral element $1$. Then the \emph{left inverse}\index{inverse!left} $x^\lambda$ of $x$ is the unique element of $Q$ satisfying $x^\lambda x=1$. Similarly, the \emph{right inverse}\index{inverse!right} $x^\rho$ satisfies $xx^\rho=1$. If $x^\lambda=x^\rho$, we call $x^{-1}=x^\lambda=x^\rho$ the \emph{inverse}\index{inverse} of $x$.
|
||
|
\subsection{\textcolor{Chapter }{LeftInverse, RightInverse and Inverse}}\logpage{[ 5, 3, 1 ]}
|
||
|
\hyperdef{L}{X805781838020CF44}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftInverse({\mdseries\slshape x})\index{LeftInverse@\texttt{LeftInverse}}
|
||
|
\label{LeftInverse}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightInverse({\mdseries\slshape x})\index{RightInverse@\texttt{RightInverse}}
|
||
|
\label{RightInverse}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Inverse({\mdseries\slshape x})\index{Inverse@\texttt{Inverse}}
|
||
|
\label{Inverse}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The left inverse, right inverse and inverse, respectively, of the quasigroup
|
||
|
element \mbox{\texttt{\mdseries\slshape x}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@CayleyTable( Q );
|
|
||
|
[ [ 1, 2, 3, 4, 5 ],
|
||
|
[ 2, 1, 4, 5, 3 ],
|
||
|
[ 3, 4, 5, 1, 2 ],
|
||
|
[ 4, 5, 2, 3, 1 ],
|
||
|
[ 5, 3, 1, 2, 4 ] ]
|
||
|
!gapprompt@gap>| !gapinput@elms := Elements( Q );
|
|
||
|
!gapprompt@gap>| !gapinput@[ l1, l2, l3, l4, l5 ];
|
|
||
|
!gapprompt@gap>| !gapinput@[ LeftInverse( elms[3] ), RightInverse( elms[3] ), Inverse( elms[3] ) ];
|
|
||
|
[ l5, l4, fail ]
|
||
|
\end{Verbatim}
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Associators and Commutators}}\label{Sec:AssociatorsAndCommutators2}
|
||
|
\logpage{[ 5, 4, 0 ]}
|
||
|
\hyperdef{L}{X7E0849977869E53D}{}
|
||
|
{
|
||
|
See Section \ref{Sec:AssociatorsAndCommutators} for definitions of associators and commutators.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Associator}}
|
||
|
\logpage{[ 5, 4, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X82B7448879B91F7B}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Associator({\mdseries\slshape x, y, z})\index{Associator@\texttt{Associator}}
|
||
|
\label{Associator}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The associator of the elements \mbox{\texttt{\mdseries\slshape x}}, \mbox{\texttt{\mdseries\slshape y}}, \mbox{\texttt{\mdseries\slshape z}} of the same quasigroup.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Commutator}}
|
||
|
\logpage{[ 5, 4, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X7D624A9587FB1FE5}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Commutator({\mdseries\slshape x, y})\index{Commutator@\texttt{Commutator}}
|
||
|
\label{Commutator}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The commutator of the elements \mbox{\texttt{\mdseries\slshape x}}, \mbox{\texttt{\mdseries\slshape y}} of the same quasigroup.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Generators}}\label{Sec:Generators}
|
||
|
\logpage{[ 5, 5, 0 ]}
|
||
|
\hyperdef{L}{X7BD5B55C802805B4}{}
|
||
|
{
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{GeneratorsOfQuasigroup and GeneratorsOfLoop}}\logpage{[ 5, 5, 1 ]}
|
||
|
\hyperdef{L}{X83944A777D161D10}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{GeneratorsOfQuasigroup({\mdseries\slshape Q})\index{GeneratorsOfQuasigroup@\texttt{GeneratorsOfQuasigroup}}
|
||
|
\label{GeneratorsOfQuasigroup}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{GeneratorsOfLoop({\mdseries\slshape Q})\index{GeneratorsOfLoop@\texttt{GeneratorsOfLoop}}
|
||
|
\label{GeneratorsOfLoop}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A set of generators of a quasigroup (resp. loop) \mbox{\texttt{\mdseries\slshape Q}}. (Both methods are synonyms of \texttt{GeneratorsOfMagma}.)
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
As usual in \textsf{GAP}, one can refer to the \texttt{i}th generator of a quasigroup \texttt{Q} by \texttt{Q.i}. Note that while it is often the case that \texttt{ Q.i = Elements(Q)[i]}, it is not necessarily so.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{GeneratorsSmallest}}
|
||
|
\logpage{[ 5, 5, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X82FD78AF7F80A0E2}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{GeneratorsSmallest({\mdseries\slshape Q})\index{GeneratorsSmallest@\texttt{GeneratorsSmallest}}
|
||
|
\label{GeneratorsSmallest}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A generating set $\{q_0$, $\dots$, $q_m\}$ of \mbox{\texttt{\mdseries\slshape Q}} such that $Q_0=\emptyset$, $Q_m=$\mbox{\texttt{\mdseries\slshape Q}}, $Q_i=\langle q_1$, $\dots$, $q_i \rangle$, and $q_{i+1}$ is the least element of \mbox{\texttt{\mdseries\slshape Q}}$\setminus Q_i$.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{SmallGeneratingSet}}
|
||
|
\logpage{[ 5, 5, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X814DBABC878D5232}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{SmallGeneratingSet({\mdseries\slshape Q})\index{SmallGeneratingSet@\texttt{SmallGeneratingSet}}
|
||
|
\label{SmallGeneratingSet}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A small generating set $\{q_0$, $\dots$, $q_m\}$ of \mbox{\texttt{\mdseries\slshape Q}} obtained as follows: $q_0$ is the least element for which $\langle q_0\rangle$ is largest possible, $q_1$\$ is the least element for which $\langle q_0,q_1$ is largest possible, and so on.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\chapter{\textcolor{Chapter }{Methods Based on Permutation Groups}}\label{Chap:MethodsBasedOnPermutationGroups}
|
||
|
\logpage{[ 6, 0, 0 ]}
|
||
|
\hyperdef{L}{X794A04C5854D352B}{}
|
||
|
{
|
||
|
Most calculations in the \textsf{LOOPS} package are delegated to groups, taking advantage of the various permutations
|
||
|
and permutation groups associated with quasigroups. This chapter explains in
|
||
|
detail how the permutations associated with a quasigroup are calculated, and
|
||
|
it also describes some of the core methods of \textsf{LOOPS} based on permutations. Additional core methods can be found in Chapter \ref{Chap:TestingPropertiesOfQuasigroupsAndLoops}.
|
||
|
\section{\textcolor{Chapter }{Parent of a Quasigroup}}\label{Sec:ParentOfAQuasigroup}
|
||
|
\logpage{[ 6, 1, 0 ]}
|
||
|
\hyperdef{L}{X8731D818827C08F3}{}
|
||
|
{
|
||
|
Let $Q$ be a quasigroup and $S$ a subquasigroup of $Q$. Since the multiplication in $S$ coincides with the multiplication in $Q$, it is reasonable not to store the multiplication table of $S$. However, the quasigroup $S$ then must know that it is a subquasigroup of $Q$.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Parent}}
|
||
|
\logpage{[ 6, 1, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7BC856CC7F116BB0}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Parent({\mdseries\slshape Q})\index{Parent@\texttt{Parent}}
|
||
|
\label{Parent}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The parent quasigroup of the quasigroup \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
When \mbox{\texttt{\mdseries\slshape Q}} is not created as a subquasigroup of another quasigroup, the attribute \texttt{Parent(\mbox{\texttt{\mdseries\slshape Q}})} is set to \mbox{\texttt{\mdseries\slshape Q}}. When \mbox{\texttt{\mdseries\slshape Q}} is created as a subquasigroup of a quasigroup \mbox{\texttt{\mdseries\slshape H}}, we set \texttt{Parent(\mbox{\texttt{\mdseries\slshape Q}})} equal to \texttt{Parent(\mbox{\texttt{\mdseries\slshape H}})}. Thus, in effect, \texttt{Parent(\mbox{\texttt{\mdseries\slshape Q}})} is the largest quasigroup from which \mbox{\texttt{\mdseries\slshape Q}} has been created.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Position}}
|
||
|
\logpage{[ 6, 1, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X79975EC6783B4293}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Position({\mdseries\slshape Q, x})\index{Position@\texttt{Position}}
|
||
|
\label{Position}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The position of \mbox{\texttt{\mdseries\slshape x}} among the elements of \mbox{\texttt{\mdseries\slshape Q}}.\\
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
Let \mbox{\texttt{\mdseries\slshape Q}} be a quasigroup with parent \mbox{\texttt{\mdseries\slshape P}}, where \mbox{\texttt{\mdseries\slshape P}} is some $n$-element quasigroup. Let \mbox{\texttt{\mdseries\slshape x}} be an element of \mbox{\texttt{\mdseries\slshape Q}}. Then \texttt{\mbox{\texttt{\mdseries\slshape x}}![1]} is the position of \mbox{\texttt{\mdseries\slshape x}} among the elements of \mbox{\texttt{\mdseries\slshape P}}, i.e., \texttt{\mbox{\texttt{\mdseries\slshape x}}![1] = Position(Elements(\mbox{\texttt{\mdseries\slshape P}}),\mbox{\texttt{\mdseries\slshape x}})}.
|
||
|
|
||
|
While referring to elements of \mbox{\texttt{\mdseries\slshape Q}} by their positions, the user should understand whether the positions are meant
|
||
|
among the elements of \mbox{\texttt{\mdseries\slshape Q}}, or among the elements of the parent \mbox{\texttt{\mdseries\slshape P}} of \mbox{\texttt{\mdseries\slshape Q}}. Since it requires no calculation to obtain \texttt{\mbox{\texttt{\mdseries\slshape x}}![1]}, we always use the position of an element in its parent quasigroup in \textsf{LOOPS}. In this way, many attributes of a quasigroup, including its Cayley table,
|
||
|
are permanently tied to its parent.
|
||
|
|
||
|
It is now clear why we have not insisted that Cayley tables of quasigroups
|
||
|
must have entries covering the entire interval $1$, $\dots$, $n$ for some $n$.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{PosInParent}}
|
||
|
\logpage{[ 6, 1, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X832295DE866E44EE}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{PosInParent({\mdseries\slshape S})\index{PosInParent@\texttt{PosInParent}}
|
||
|
\label{PosInParent}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
When \mbox{\texttt{\mdseries\slshape S}} is a list of quasigroup elements (not necessarily from the same quasigroup),
|
||
|
returns the corresponding list of positions of elements of \mbox{\texttt{\mdseries\slshape S}} in the corresponding parent, i.e., \texttt{PosInParent(\mbox{\texttt{\mdseries\slshape S}})[i] = \mbox{\texttt{\mdseries\slshape S}}[i]![1] = Position(Parent(\mbox{\texttt{\mdseries\slshape S}}[i]),\mbox{\texttt{\mdseries\slshape S}}[i])}.\\
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
Quasigroups with the same parent can be compared as follows. Assume that $A$, $B$ are two quasigroups with common parent $Q$. Let $G_A$, $G_B$ be the canonical generating sets of $A$ and $B$, respectively, obtained by the method \texttt{GeneratorsSmallest} (see Section \ref{Sec:Generators}). Then we define $A<B$ if and only if $G_A<G_B$ lexicographically. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Subquasigroups and Subloops}}\label{Sec:SubquasigroupsAndSubloops2}
|
||
|
\logpage{[ 6, 2, 0 ]}
|
||
|
\hyperdef{L}{X83EDF04F7952143F}{}
|
||
|
{
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Subquasigroup}}
|
||
|
\logpage{[ 6, 2, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7DD511FF864FCDFF}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Subquasigroup({\mdseries\slshape Q, S})\index{Subquasigroup@\texttt{Subquasigroup}}
|
||
|
\label{Subquasigroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
When \mbox{\texttt{\mdseries\slshape S}} is a subset of elements or indices of a quasigroup (resp. loop) \mbox{\texttt{\mdseries\slshape Q}}, returns the smallest subquasigroup (resp. subloop) of \mbox{\texttt{\mdseries\slshape Q}} containing \mbox{\texttt{\mdseries\slshape S}}.
|
||
|
|
||
|
|
||
|
|
||
|
We allow \mbox{\texttt{\mdseries\slshape S}} to be a list of elements of \mbox{\texttt{\mdseries\slshape Q}}, or a list of integers representing the positions of the respective elements
|
||
|
in the parent quasigroup (resp. loop) of \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
If \mbox{\texttt{\mdseries\slshape S}} is empty, \texttt{Subquasigroup(\mbox{\texttt{\mdseries\slshape Q}},\mbox{\texttt{\mdseries\slshape S}})} returns the empty set if \mbox{\texttt{\mdseries\slshape Q}} is a quasigroup, and it returns the one-element subloop of \mbox{\texttt{\mdseries\slshape Q}} if \mbox{\texttt{\mdseries\slshape Q}} is a loop.
|
||
|
|
||
|
\textsc{Remark:} The empty set is sometimes considered to be a subquasigroup of \mbox{\texttt{\mdseries\slshape Q}} (although not in \textsf{LOOPS}). The above convention is useful for handling certain situations, for
|
||
|
instance when the user calls \texttt{Center(\mbox{\texttt{\mdseries\slshape Q}})} for a quasigroup \mbox{\texttt{\mdseries\slshape Q}} with empty center.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Subloop}}
|
||
|
\logpage{[ 6, 2, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X84E6744E804AE830}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Subloop({\mdseries\slshape Q, S})\index{Subloop@\texttt{Subloop}}
|
||
|
\label{Subloop}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
|
||
|
|
||
|
This is an analog of \texttt{Subquasigroup(\mbox{\texttt{\mdseries\slshape Q}},\mbox{\texttt{\mdseries\slshape S}})} that can be used only when \mbox{\texttt{\mdseries\slshape Q}} is a loop. Since there is no difference in the outcome while calling \texttt{Subquasigroup(\mbox{\texttt{\mdseries\slshape Q}},\mbox{\texttt{\mdseries\slshape S}})} or \texttt{Subloop(\mbox{\texttt{\mdseries\slshape Q}},\mbox{\texttt{\mdseries\slshape S}})} when \mbox{\texttt{\mdseries\slshape Q}} is a loop, it is safe to always call \texttt{Subquasigroup(\mbox{\texttt{\mdseries\slshape Q}},\mbox{\texttt{\mdseries\slshape S}})}, whether \mbox{\texttt{\mdseries\slshape Q}} is a loop or not. }
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsSubquasigroup and IsSubloop}}\logpage{[ 6, 2, 3 ]}
|
||
|
\hyperdef{L}{X87AC8B7E80CE9260}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSubquasigroup({\mdseries\slshape Q, S})\index{IsSubquasigroup@\texttt{IsSubquasigroup}}
|
||
|
\label{IsSubquasigroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSubloop({\mdseries\slshape Q, S})\index{IsSubloop@\texttt{IsSubloop}}
|
||
|
\label{IsSubloop}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape S}} is a subquasigroup (resp. subloop) of a quasigroup (resp. loop) \mbox{\texttt{\mdseries\slshape Q}}, \texttt{false} otherwise. In other words, returns \texttt{true} if \mbox{\texttt{\mdseries\slshape S}} and \mbox{\texttt{\mdseries\slshape Q}} are quasigroups (resp. loops) with the same parent and \mbox{\texttt{\mdseries\slshape S}} is a subset of \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{AllSubquasigroups}}
|
||
|
\logpage{[ 6, 2, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X859B6C8183537E75}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AllSubquasigroups({\mdseries\slshape Q})\index{AllSubquasigroups@\texttt{AllSubquasigroups}}
|
||
|
\label{AllSubquasigroups}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A list of all subquasigroups of a loop \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{AllSubloops}}
|
||
|
\logpage{[ 6, 2, 5 ]}\nobreak
|
||
|
\hyperdef{L}{X81EF252585592001}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AllSubloops({\mdseries\slshape Q})\index{AllSubloops@\texttt{AllSubloops}}
|
||
|
\label{AllSubloops}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A list of all subloops of a loop \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{RightCosets}}
|
||
|
\logpage{[ 6, 2, 6 ]}\nobreak
|
||
|
\hyperdef{L}{X835F48248571364F}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightCosets({\mdseries\slshape Q, S})\index{RightCosets@\texttt{RightCosets}}
|
||
|
\label{RightCosets}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
If \mbox{\texttt{\mdseries\slshape S}} is a subloop of \mbox{\texttt{\mdseries\slshape Q}}, returns a list of all right cosets\index{coset} of \mbox{\texttt{\mdseries\slshape S}} in \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
The coset \mbox{\texttt{\mdseries\slshape S}} is listed first, and the elements of each coset are ordered in the same way as
|
||
|
the elements of \mbox{\texttt{\mdseries\slshape S}}, i.e., if \mbox{\texttt{\mdseries\slshape S}}$ = [s_1,\dots,s_m]$, then \mbox{\texttt{\mdseries\slshape S}}$x=[s_1x,\dots,s_mx]$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{RightTransversal}}
|
||
|
\logpage{[ 6, 2, 7 ]}\nobreak
|
||
|
\hyperdef{L}{X85C65D06822E716F}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightTransversal({\mdseries\slshape Q, S})\index{RightTransversal@\texttt{RightTransversal}}
|
||
|
\label{RightTransversal}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A right transversal of a subloop \mbox{\texttt{\mdseries\slshape S}} in a loop \mbox{\texttt{\mdseries\slshape Q}}. The transversal consists of the list of first elements from the right cosets
|
||
|
obtained by \texttt{RightCosets(\mbox{\texttt{\mdseries\slshape Q}},\mbox{\texttt{\mdseries\slshape S}})}.
|
||
|
|
||
|
|
||
|
|
||
|
When \mbox{\texttt{\mdseries\slshape S}} is a subloop of \mbox{\texttt{\mdseries\slshape Q}}, the right transversal\index{transversal} of \mbox{\texttt{\mdseries\slshape S}} with respect to \mbox{\texttt{\mdseries\slshape Q}} is a subset of \mbox{\texttt{\mdseries\slshape Q}} containing one element from each right coset of \mbox{\texttt{\mdseries\slshape S}} in \mbox{\texttt{\mdseries\slshape Q}}.}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Translations and Sections}}\label{Sec:TranslationsAndSections}
|
||
|
\logpage{[ 6, 3, 0 ]}
|
||
|
\hyperdef{L}{X78AA3D177CCA49FF}{}
|
||
|
{
|
||
|
When $x$ is an element of a quasigroup $Q$, the left translation $L_x$ is a permutation of $Q$. In \textsf{LOOPS}, all permutations associated with quasigroups and their elements are
|
||
|
permutations in the sense of \textsf{GAP}, i.e., they are bijections of some interval $1$, $\dots$, $n$. Moreover, following our convention, the numerical entries of the
|
||
|
permutations point to the positions among elements of the parent of $Q$, not among elements of $Q$.
|
||
|
\subsection{\textcolor{Chapter }{LeftTranslation and RightTranslation}}\logpage{[ 6, 3, 1 ]}
|
||
|
\hyperdef{L}{X7B45B48C7C4D6061}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftTranslation({\mdseries\slshape Q, x})\index{LeftTranslation@\texttt{LeftTranslation}}
|
||
|
\label{LeftTranslation}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightTranslation({\mdseries\slshape Q, x})\index{RightTranslation@\texttt{RightTranslation}}
|
||
|
\label{RightTranslation}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
If \mbox{\texttt{\mdseries\slshape x}} is an element of a quasigroup \mbox{\texttt{\mdseries\slshape Q}}, returns the left translation (resp. right translation) by \mbox{\texttt{\mdseries\slshape x}} in \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LeftSection and RightSection}}\logpage{[ 6, 3, 2 ]}
|
||
|
\hyperdef{L}{X7EB9197C80FB4664}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftSection({\mdseries\slshape Q})\index{LeftSection@\texttt{LeftSection}}
|
||
|
\label{LeftSection}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightSection({\mdseries\slshape Q})\index{RightSection@\texttt{RightSection}}
|
||
|
\label{RightSection}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The left section (resp. right section) of a quasigroup \mbox{\texttt{\mdseries\slshape Q}}.\\
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
Here is an example illustrating the main features of the subquasigroup
|
||
|
construction and the relationship between a quasigroup and its parent.
|
||
|
|
||
|
Note how the Cayley table of a subquasigroup is created only upon explicit
|
||
|
demand. Also note that changing the names of elements of a subquasigroup
|
||
|
(subloop) automatically changes the names of the elements of the parent
|
||
|
subquasigroup (subloop). This is because the elements are shared.
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@M := MoufangLoop( 12, 1 );; S := Subloop( M, [ M.5 ] );
|
|
||
|
<loop of order 3>
|
||
|
!gapprompt@gap>| !gapinput@[ Parent( S ) = M, Elements( S ), PosInParent( S ) ];
|
|
||
|
[ true, [ l1, l3, l5], [ 1, 3, 5 ] ]
|
||
|
!gapprompt@gap>| !gapinput@HasCayleyTable( S );
|
|
||
|
false
|
||
|
!gapprompt@gap>| !gapinput@SetLoopElmName( S, "s" );; Elements( S ); Elements( M );
|
|
||
|
[ s1, s3, s5 ]
|
||
|
[ s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12 ]
|
||
|
!gapprompt@gap>| !gapinput@CayleyTable( S );
|
|
||
|
[ [ 1, 3, 5 ], [ 3, 5, 1 ], [ 5, 1, 3 ] ]
|
||
|
!gapprompt@gap>| !gapinput@LeftSection( S );
|
|
||
|
[ (), (1,3,5), (1,5,3) ]
|
||
|
!gapprompt@gap>| !gapinput@[ HasCayleyTable( S ), Parent( S ) = M ];
|
|
||
|
[ true, true ]
|
||
|
!gapprompt@gap>| !gapinput@L := LoopByCayleyTable( CayleyTable( S ) );; Elements( L );
|
|
||
|
[ l1, l2, l3 ]
|
||
|
!gapprompt@gap>| !gapinput@[ Parent( L ) = L, IsSubloop( M, S ), IsSubloop( M, L ) ];
|
|
||
|
[ true, true, false ]
|
||
|
!gapprompt@gap>| !gapinput@LeftSection( L );
|
|
||
|
[ (), (1,2,3), (1,3,2) ]
|
||
|
\end{Verbatim}
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Multiplication Groups}}\label{Sec:MultiplicationGroups}
|
||
|
\logpage{[ 6, 4, 0 ]}
|
||
|
\hyperdef{L}{X78ED50F578A88046}{}
|
||
|
{
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LeftMutliplicationGroup, RightMultiplicationGroup and MultiplicationGroup}}\logpage{[ 6, 4, 1 ]}
|
||
|
\hyperdef{L}{X87302BE983A5FC61}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftMultiplicationGroup({\mdseries\slshape Q})\index{LeftMultiplicationGroup@\texttt{LeftMultiplicationGroup}}
|
||
|
\label{LeftMultiplicationGroup}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightMultiplicationGroup({\mdseries\slshape Q})\index{RightMultiplicationGroup@\texttt{RightMultiplicationGroup}}
|
||
|
\label{RightMultiplicationGroup}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{MultiplicationGroup({\mdseries\slshape Q})\index{MultiplicationGroup@\texttt{MultiplicationGroup}}
|
||
|
\label{MultiplicationGroup}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The left multiplication group, right multiplication group, resp.
|
||
|
multiplication group of a quasigroup \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{RelativeLeftMultiplicationGroup, RelativeRightMultiplicationGroup and
|
||
|
RelativeMultiplicationGroup}}\logpage{[ 6, 4, 2 ]}
|
||
|
\hyperdef{L}{X847256B779E1E7E5}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RelativeLeftMultiplicationGroup({\mdseries\slshape Q, S})\index{RelativeLeftMultiplicationGroup@\texttt{RelativeLeftMultiplicationGroup}}
|
||
|
\label{RelativeLeftMultiplicationGroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RelativeRightMultiplicationGroup({\mdseries\slshape Q, S})\index{RelativeRightMultiplicationGroup@\texttt{RelativeRightMultiplicationGroup}}
|
||
|
\label{RelativeRightMultiplicationGroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RelativeMultiplicationGroup({\mdseries\slshape Q, S})\index{RelativeMultiplicationGroup@\texttt{RelativeMultiplicationGroup}}
|
||
|
\label{RelativeMultiplicationGroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The relative left multiplication group, the relative right multiplication
|
||
|
group, resp. the relative multiplication group of a quasigroup \mbox{\texttt{\mdseries\slshape Q}} with respect to a subquasigroup \mbox{\texttt{\mdseries\slshape S}} of \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
Let $S$ be a subquasigroup of a quasigroup $Q$. Then the \index{multiplication group!relative left}\emph{relative left multiplication group} of $Q$ with respect to $S$ is the group $\langle L(x)|x\in S\rangle$, where $L(x)$ is the left translation by $x$ in $Q$ restricted to $S$. The \index{multiplication group!relative right }\emph{relative right multiplication group} and the \index{multiplication group!relative}\emph{relative multiplication group} are defined analogously.}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Inner Mapping Groups}}\label{Sec:InnerMappingGroups}
|
||
|
\logpage{[ 6, 5, 0 ]}
|
||
|
\hyperdef{L}{X8740D61178ACD217}{}
|
||
|
{
|
||
|
By a result of Bruck, the left inner mapping group of a loop is generated by
|
||
|
all \index{inner mapping!left}\emph{left inner mappings} $L(x,y) = L_{yx}^{-1}L_yL_x$, and the right inner mapping group is generated by all \index{inner mapping!right}\emph{right inner mappings} $R(x,y) = R_{xy}^{-1}R_yR_x$.
|
||
|
|
||
|
In analogy with group theory, we define the \index{conjugation}\emph{conjugations} or the \index{inner mapping!middle}\emph{middle inner mappings} as $T(x) = L_x^{-1}R_x$. The \index{inner mapping group!middle}\emph{middle inner mapping grroup} is then the group generated by all conjugations.
|
||
|
\subsection{\textcolor{Chapter }{LeftInnerMapping, RightInnerMapping, MiddleInnerMapping}}\logpage{[ 6, 5, 1 ]}
|
||
|
\hyperdef{L}{X7EE1E78C856C6F7C}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftInnerMapping({\mdseries\slshape Q, x, y})\index{LeftInnerMapping@\texttt{LeftInnerMapping}}
|
||
|
\label{LeftInnerMapping}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightInnerMapping({\mdseries\slshape Q, x, y})\index{RightInnerMapping@\texttt{RightInnerMapping}}
|
||
|
\label{RightInnerMapping}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{MiddleInnerMapping({\mdseries\slshape Q, x})\index{MiddleInnerMapping@\texttt{MiddleInnerMapping}}
|
||
|
\label{MiddleInnerMapping}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The left inner mapping $L($\mbox{\texttt{\mdseries\slshape x}},\mbox{\texttt{\mdseries\slshape y}}$)$, the right inner mapping $R($\mbox{\texttt{\mdseries\slshape x}},\mbox{\texttt{\mdseries\slshape y}}$)$, resp. the middle inner mapping $T($\mbox{\texttt{\mdseries\slshape x}}$)$ of a loop \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LeftInnerMappingGroup, RightInnerMappingGroup, MiddleInnerMappingGroup}}\logpage{[ 6, 5, 2 ]}
|
||
|
\hyperdef{L}{X79CDA09A7D48BF2B}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftInnerMappingGroup({\mdseries\slshape Q})\index{LeftInnerMappingGroup@\texttt{LeftInnerMappingGroup}}
|
||
|
\label{LeftInnerMappingGroup}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightInnerMappingGroup({\mdseries\slshape Q})\index{RightInnerMappingGroup@\texttt{RightInnerMappingGroup}}
|
||
|
\label{RightInnerMappingGroup}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{MiddleInnerMappingGroup({\mdseries\slshape Q})\index{MiddleInnerMappingGroup@\texttt{MiddleInnerMappingGroup}}
|
||
|
\label{MiddleInnerMappingGroup}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The left inner mapping group, right inner mapping group, resp. middle inner
|
||
|
mapping group of a loop \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{InnerMappingGroup}}
|
||
|
\logpage{[ 6, 5, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X82513A3B7C3A6420}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{InnerMappingGroup({\mdseries\slshape Q})\index{InnerMappingGroup@\texttt{InnerMappingGroup}}
|
||
|
\label{InnerMappingGroup}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The inner mapping group of a loop \mbox{\texttt{\mdseries\slshape Q}}.\\
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
Here is an example for multiplication groups and inner mapping groups:
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@M := MoufangLoop(12,1);
|
|
||
|
<Moufang loop 12/1>
|
||
|
!gapprompt@gap>| !gapinput@LeftSection(M)[2];
|
|
||
|
(1,2)(3,4)(5,6)(7,8)(9,12)(10,11)
|
||
|
!gapprompt@gap>| !gapinput@Mlt := MultiplicationGroup(M); Inn := InnerMappingGroup(M);
|
|
||
|
<permutation group of size 2592 with 23 generators>
|
||
|
Group([ (4,6)(7,11), (7,11)(8,10), (2,6,4)(7,9,11), (3,5)(9,11), (8,12,10) ])
|
||
|
!gapprompt@gap>| !gapinput@Size(Inn);
|
|
||
|
216
|
||
|
\end{Verbatim}
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Nuclei, Commutant, Center, and Associator Subloop}}\label{Sec:NucleiEtal}
|
||
|
\logpage{[ 6, 6, 0 ]}
|
||
|
\hyperdef{L}{X7B45C2AF7C2E28AB}{}
|
||
|
{
|
||
|
See Section \ref{Sec:SubquasigroupsAndSubloops} for the relevant definitions.
|
||
|
\subsection{\textcolor{Chapter }{LeftNucles, MiddleNucleus, and RightNucleus}}\logpage{[ 6, 6, 1 ]}
|
||
|
\hyperdef{L}{X7DF536FC85BBD1D2}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftNucleus({\mdseries\slshape Q})\index{LeftNucleus@\texttt{LeftNucleus}}
|
||
|
\label{LeftNucleus}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{MiddleNucleus({\mdseries\slshape Q})\index{MiddleNucleus@\texttt{MiddleNucleus}}
|
||
|
\label{MiddleNucleus}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightNucleus({\mdseries\slshape Q})\index{RightNucleus@\texttt{RightNucleus}}
|
||
|
\label{RightNucleus}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The left nucleus, middle nucleus, resp. right nucleus of a quasigroup \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Nuc, NucleusOfQuasigroup and NucleusOfLoop}}\logpage{[ 6, 6, 2 ]}
|
||
|
\hyperdef{L}{X84D389677A91C290}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Nuc({\mdseries\slshape Q})\index{Nuc@\texttt{Nuc}}
|
||
|
\label{Nuc}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{NucleusOfQuasigroup({\mdseries\slshape Q})\index{NucleusOfQuasigroup@\texttt{NucleusOfQuasigroup}}
|
||
|
\label{NucleusOfQuasigroup}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{NucleusOfLoop({\mdseries\slshape Q})\index{NucleusOfLoop@\texttt{NucleusOfLoop}}
|
||
|
\label{NucleusOfLoop}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
These synonymous attributes return the nucleus of a quasigroup \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
Since all nuclei are subquasigroups of \mbox{\texttt{\mdseries\slshape Q}}, they are returned as subquasigroups (resp. subloops). When \mbox{\texttt{\mdseries\slshape Q}} is a loop then all nuclei are in fact groups, and they are returned as
|
||
|
associative loops.
|
||
|
|
||
|
\textsc{Remark:} The name \texttt{Nucleus} is a global function of \textsf{GAP} with two variables. We have therefore used \texttt{Nuc} rather than \texttt{Nucleus} for the nucleus. This abbreviation is sometimes used in the literature, too.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Commutant}}
|
||
|
\logpage{[ 6, 6, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X7C8428DE791F3CE1}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Commutant({\mdseries\slshape Q})\index{Commutant@\texttt{Commutant}}
|
||
|
\label{Commutant}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The commutant of a quasigroup \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Center}}
|
||
|
\logpage{[ 6, 6, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X7C1FBE7A84DD4873}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Center({\mdseries\slshape Q})\index{Center@\texttt{Center}}
|
||
|
\label{Center}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The center of a quasigroup \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
If \mbox{\texttt{\mdseries\slshape Q}} is a loop, the center of \mbox{\texttt{\mdseries\slshape Q}} is a subgroup of \mbox{\texttt{\mdseries\slshape Q}} and it is returned as an associative loop.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{AssociatorSubloop}}
|
||
|
\logpage{[ 6, 6, 5 ]}\nobreak
|
||
|
\hyperdef{L}{X7F7FDE82780EDD7E}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AssociatorSubloop({\mdseries\slshape Q})\index{AssociatorSubloop@\texttt{AssociatorSubloop}}
|
||
|
\label{AssociatorSubloop}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The associator subloop of a loop \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
We calculate the associator subloop of \mbox{\texttt{\mdseries\slshape Q}} as the smallest normal subloop of \mbox{\texttt{\mdseries\slshape Q}} containing all elements $x\backslash\alpha(x)$, where $x$ is an element of \mbox{\texttt{\mdseries\slshape Q}} and $\alpha$ is a left inner mapping of \mbox{\texttt{\mdseries\slshape Q}}.}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Normal Subloops and Simple Loops}}\label{Sec:NormalSubloopsAndSimpleLoops}
|
||
|
\logpage{[ 6, 7, 0 ]}
|
||
|
\hyperdef{L}{X85B650D284FE39F3}{}
|
||
|
{
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsNormal}}
|
||
|
\logpage{[ 6, 7, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X838186F9836F678C}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsNormal({\mdseries\slshape Q, S})\index{IsNormal@\texttt{IsNormal}}
|
||
|
\label{IsNormal}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape S}} is a normal subloop of a loop \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
A subloop $S$ of a loop $Q$ is \emph{normal}\index{subloop!normal}\index{normal subloop} if it is invariant under all inner mappings of $Q$. }
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{NormalClosure}}
|
||
|
\logpage{[ 6, 7, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X7BDEA0A98720D1BB}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{NormalClosure({\mdseries\slshape Q, S})\index{NormalClosure@\texttt{NormalClosure}}
|
||
|
\label{NormalClosure}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The normal closure of a subset \mbox{\texttt{\mdseries\slshape S}} of a loop \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
For a subset $S$ of a loop $Q$, the \emph{normal closure}\index{normal closure} of $S$ in $Q$ is the smallest normal subloop of $Q$ containing $S$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsSimple}}
|
||
|
\logpage{[ 6, 7, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X7D8E63A7824037CC}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSimple({\mdseries\slshape Q})\index{IsSimple@\texttt{IsSimple}}
|
||
|
\label{IsSimple}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a simple loop.
|
||
|
|
||
|
|
||
|
|
||
|
A loop $Q$ is \emph{simple}\index{simple loop}\index{loop!simple} if $\{1\}$ and $Q$ are the only normal subloops of $Q$.}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Factor Loops}}\label{Sec:FactorLoops}
|
||
|
\logpage{[ 6, 8, 0 ]}
|
||
|
\hyperdef{L}{X87F66DB383C29A4A}{}
|
||
|
{
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{FactorLoop}}
|
||
|
\logpage{[ 6, 8, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X83E1953980E2DE2F}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{FactorLoop({\mdseries\slshape Q, S})\index{FactorLoop@\texttt{FactorLoop}}
|
||
|
\label{FactorLoop}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
When \mbox{\texttt{\mdseries\slshape S}} is a normal subloop of a loop \mbox{\texttt{\mdseries\slshape Q}}, returns the factor loop \mbox{\texttt{\mdseries\slshape Q}}$/$\mbox{\texttt{\mdseries\slshape S}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{NaturalHomomorphismByNormalSubloop}}
|
||
|
\logpage{[ 6, 8, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X870FCB497AECC730}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{NaturalHomomorphismByNormalSubloop({\mdseries\slshape Q, S})\index{NaturalHomomorphismByNormalSubloop@\texttt{NaturalHomomorphismByNormalSubloop}}
|
||
|
\label{NaturalHomomorphismByNormalSubloop}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
When \mbox{\texttt{\mdseries\slshape S}} is a normal subloop of a loop \mbox{\texttt{\mdseries\slshape Q}}, returns the natural projection from \mbox{\texttt{\mdseries\slshape Q}} onto \mbox{\texttt{\mdseries\slshape Q}}$/$\mbox{\texttt{\mdseries\slshape S}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@M := MoufangLoop( 12, 1 );; S := Subloop( M, [ M.3 ] );
|
|
||
|
<loop of order 3>
|
||
|
!gapprompt@gap>| !gapinput@IsNormal( M, S );
|
|
||
|
true
|
||
|
!gapprompt@gap>| !gapinput@F := FactorLoop( M, S );
|
|
||
|
<loop of order 4>
|
||
|
!gapprompt@gap>| !gapinput@NaturalHomomorphismByNormalSubloop( M, S );
|
|
||
|
MappingByFunction( <loop of order 12>, <loop of order 4>,
|
||
|
function( x ) ... end )
|
||
|
\end{Verbatim}
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Nilpotency and Central Series}}\label{Sec:NilpotencyAndCentralSeries}
|
||
|
\logpage{[ 6, 9, 0 ]}
|
||
|
\hyperdef{L}{X821F40748401D698}{}
|
||
|
{
|
||
|
See Section \ref{Sec:NilpotenceAndSolvability} for the relevant definitions.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsNilpotent}}
|
||
|
\logpage{[ 6, 9, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X78A4B93781C96AAE}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsNilpotent({\mdseries\slshape Q})\index{IsNilpotent@\texttt{IsNilpotent}}
|
||
|
\label{IsNilpotent}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a nilpotent loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{NilpotencyClassOfLoop}}
|
||
|
\logpage{[ 6, 9, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X7D5FC62581A99482}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{NilpotencyClassOfLoop({\mdseries\slshape Q})\index{NilpotencyClassOfLoop@\texttt{NilpotencyClassOfLoop}}
|
||
|
\label{NilpotencyClassOfLoop}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The nilpotency class of a loop \mbox{\texttt{\mdseries\slshape Q}} if \mbox{\texttt{\mdseries\slshape Q}} is nilpotent, \texttt{fail} otherwise.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsStronglyNilpotent}}
|
||
|
\logpage{[ 6, 9, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X7E7C2D117B55F6A0}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsStronglyNilpotent({\mdseries\slshape Q})\index{IsStronglyNilpotent@\texttt{IsStronglyNilpotent}}
|
||
|
\label{IsStronglyNilpotent}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a strongly nilpotent loop.
|
||
|
|
||
|
|
||
|
|
||
|
A loop $Q$ is said to be \emph{strongly nilpotent}\index{strongly nilpotent loop}\index{nilpotent loop!strongly}\index{loop!strongly nilpotent} if its multiplication group is nilpotent.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{UpperCentralSeries}}
|
||
|
\logpage{[ 6, 9, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X7ED37AA07BEE79E0}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{UpperCentralSeries({\mdseries\slshape Q})\index{UpperCentralSeries@\texttt{UpperCentralSeries}}
|
||
|
\label{UpperCentralSeries}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
When \mbox{\texttt{\mdseries\slshape Q}} is a nilpotent loop, returns the upper central series of \mbox{\texttt{\mdseries\slshape Q}}, else returns \texttt{fail}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LowerCentralSeries}}
|
||
|
\logpage{[ 6, 9, 5 ]}\nobreak
|
||
|
\hyperdef{L}{X817BDBC2812992ED}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LowerCentralSeries({\mdseries\slshape Q})\index{LowerCentralSeries@\texttt{LowerCentralSeries}}
|
||
|
\label{LowerCentralSeries}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
When \mbox{\texttt{\mdseries\slshape Q}} is a nilpotent loop, returns the lower central series of \mbox{\texttt{\mdseries\slshape Q}}, else returns \texttt{fail}.
|
||
|
|
||
|
|
||
|
|
||
|
The \emph{lower central series}\index{central series!lower} for loops is defined analogously to groups.}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Solvability, Derived Series and Frattini Subloop}}\label{Sec:SolvabilityEtc}
|
||
|
\logpage{[ 6, 10, 0 ]}
|
||
|
\hyperdef{L}{X83A38A6C7EDBCA63}{}
|
||
|
{
|
||
|
See Section \ref{Sec:NilpotenceAndSolvability} for definitions of solvability an derived subloop.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsSolvable}}
|
||
|
\logpage{[ 6, 10, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X79B10B337A3B1C6E}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSolvable({\mdseries\slshape Q})\index{IsSolvable@\texttt{IsSolvable}}
|
||
|
\label{IsSolvable}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a solvable loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{DerivedSubloop}}
|
||
|
\logpage{[ 6, 10, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X7A82DC4680DAD67C}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{DerivedSubloop({\mdseries\slshape Q})\index{DerivedSubloop@\texttt{DerivedSubloop}}
|
||
|
\label{DerivedSubloop}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The derived subloop of a loop \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{DerivedLength}}
|
||
|
\logpage{[ 6, 10, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X7A9AA1577CEC891F}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{DerivedLength({\mdseries\slshape Q})\index{DerivedLength@\texttt{DerivedLength}}
|
||
|
\label{DerivedLength}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
If \mbox{\texttt{\mdseries\slshape Q}} is solvable, returns the derived length of \mbox{\texttt{\mdseries\slshape Q}}, else returns \texttt{fail}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{FrattiniSubloop and FrattinifactorSize}}\logpage{[ 6, 10, 4 ]}
|
||
|
\hyperdef{L}{X85BD2C517FA7A47E}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{FrattiniSubloop({\mdseries\slshape Q})\index{FrattiniSubloop@\texttt{FrattiniSubloop}}
|
||
|
\label{FrattiniSubloop}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The Frattini subloop of \mbox{\texttt{\mdseries\slshape Q}}. The method is implemented only for strongly nilpotent loops.
|
||
|
|
||
|
|
||
|
|
||
|
\emph{Frattini subloop}\index{Frattini subloop} of a loop $Q$ is the intersection of maximal subloops of $Q$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{FrattinifactorSize}}
|
||
|
\logpage{[ 6, 10, 5 ]}\nobreak
|
||
|
\hyperdef{L}{X855286367A2D5A54}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{FrattinifactorSize({\mdseries\slshape Q})\index{FrattinifactorSize@\texttt{FrattinifactorSize}}
|
||
|
\label{FrattinifactorSize}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Isomorphisms and Automorphisms}}\label{Sec:IsomorphismsAndAutomorphisms}
|
||
|
\logpage{[ 6, 11, 0 ]}
|
||
|
\hyperdef{L}{X81F3496578EAA74E}{}
|
||
|
{
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsomorphismQuasigroups}}
|
||
|
\logpage{[ 6, 11, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X801067F67E5292F7}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsomorphismQuasigroups({\mdseries\slshape Q, L})\index{IsomorphismQuasigroups@\texttt{IsomorphismQuasigroups}}
|
||
|
\label{IsomorphismQuasigroups}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
An isomorphism from a quasigroup \mbox{\texttt{\mdseries\slshape Q}} to a quasigroup \mbox{\texttt{\mdseries\slshape L}} if the quasigroups are isomorphic, \texttt{fail} otherwise.
|
||
|
|
||
|
|
||
|
|
||
|
If an isomorphism exists, it is returned as a permutation $f$ of $1,\dots,|$\mbox{\texttt{\mdseries\slshape Q}}$|$, where $i^f=j$ means that the $i$th element of \mbox{\texttt{\mdseries\slshape Q}} is mapped onto the $j$th element of \mbox{\texttt{\mdseries\slshape L}}. Note that this convention is used even if the underlying sets of \mbox{\texttt{\mdseries\slshape Q}}, \mbox{\texttt{\mdseries\slshape L}} are not indexed by consecutive integers.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsomorphismLoops}}
|
||
|
\logpage{[ 6, 11, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X7D7B10D6836FCA9F}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsomorphismLoops({\mdseries\slshape Q, L})\index{IsomorphismLoops@\texttt{IsomorphismLoops}}
|
||
|
\label{IsomorphismLoops}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
An isomorphism from a loop \mbox{\texttt{\mdseries\slshape Q}} to a loop \mbox{\texttt{\mdseries\slshape L}} if the loops are isomorphic, \texttt{fail} otherwise, with the same convention as in \texttt{IsomorphismQuasigroups}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{QuasigroupsUpToIsomorphism}}
|
||
|
\logpage{[ 6, 11, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X82373C5479574F22}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{QuasigroupsUpToIsomorphism({\mdseries\slshape ls})\index{QuasigroupsUpToIsomorphism@\texttt{QuasigroupsUpToIsomorphism}}
|
||
|
\label{QuasigroupsUpToIsomorphism}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
Given a list \mbox{\texttt{\mdseries\slshape ls}} of quasigroups, returns a sublist of \mbox{\texttt{\mdseries\slshape ls}} consisting of representatives of isomorphism classes of quasigroups from \mbox{\texttt{\mdseries\slshape ls}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LoopsUpToIsomorphism}}
|
||
|
\logpage{[ 6, 11, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X8308F38283C61B20}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LoopsUpToIsomorphism({\mdseries\slshape ls})\index{LoopsUpToIsomorphism@\texttt{LoopsUpToIsomorphism}}
|
||
|
\label{LoopsUpToIsomorphism}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
Given a list \mbox{\texttt{\mdseries\slshape ls}} of loops, returns a sublist of \mbox{\texttt{\mdseries\slshape ls}} consisting of representatives of isomorphism classes of loops from \mbox{\texttt{\mdseries\slshape ls}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{AutomorphismGroup}}
|
||
|
\logpage{[ 6, 11, 5 ]}\nobreak
|
||
|
\hyperdef{L}{X87677B0787B4461A}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AutomorphismGroup({\mdseries\slshape Q})\index{AutomorphismGroup@\texttt{AutomorphismGroup}}
|
||
|
\label{AutomorphismGroup}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The automorphism group of a loop or quasigroups \mbox{\texttt{\mdseries\slshape Q}}, with the same convention on permutations as in \texttt{IsomorphismQuasigroups}.\\
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\textsc{Remark:} Since two isomorphisms differ by an automorphism, all isomorphisms from \mbox{\texttt{\mdseries\slshape Q}} to \mbox{\texttt{\mdseries\slshape L}} can be obtained by a combination of \texttt{IsomorphismLoops(\mbox{\texttt{\mdseries\slshape Q}},\mbox{\texttt{\mdseries\slshape L}})} (or \texttt{IsomorphismQuasigroups(\mbox{\texttt{\mdseries\slshape Q}},\mbox{\texttt{\mdseries\slshape L}})}) and \texttt{AutomorphismGroup(\mbox{\texttt{\mdseries\slshape L}})}. \\
|
||
|
|
||
|
|
||
|
While dealing with Cayley tables, it is often useful to rename or reorder the
|
||
|
elements of the underlying quasigroup without changing the isomorphism type of
|
||
|
the quasigroups. \textsf{LOOPS} contains several functions for this purpose.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsomorphicCopyByPerm}}
|
||
|
\logpage{[ 6, 11, 6 ]}\nobreak
|
||
|
\hyperdef{L}{X85B3E22679FD8D81}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsomorphicCopyByPerm({\mdseries\slshape Q, f})\index{IsomorphicCopyByPerm@\texttt{IsomorphicCopyByPerm}}
|
||
|
\label{IsomorphicCopyByPerm}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
When \mbox{\texttt{\mdseries\slshape Q}} is a quasigroup and \mbox{\texttt{\mdseries\slshape f}} is a permutation of $1,\dots,|$\mbox{\texttt{\mdseries\slshape Q}}$|$, returns a quasigroup defined on the same set as \mbox{\texttt{\mdseries\slshape Q}} with multiplication $*$ defined by $x*y = $\mbox{\texttt{\mdseries\slshape f}}$($\mbox{\texttt{\mdseries\slshape f}}${}^{-1}(x)$\mbox{\texttt{\mdseries\slshape f}}${}^{-1}(y))$. When \mbox{\texttt{\mdseries\slshape Q}} is a declared loop, a loop is returned. Consequently, when \mbox{\texttt{\mdseries\slshape Q}} is a declared loop and \mbox{\texttt{\mdseries\slshape f}}$(1) = k\ne 1$, then \mbox{\texttt{\mdseries\slshape f}} is first replaced with \mbox{\texttt{\mdseries\slshape f}}$\circ (1,k)$, to make sure that the resulting Cayley table is normalized.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsomorphicCopyByNormalSubloop}}
|
||
|
\logpage{[ 6, 11, 7 ]}\nobreak
|
||
|
\hyperdef{L}{X8121DE3A78795040}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsomorphicCopyByNormalSubloop({\mdseries\slshape Q, S})\index{IsomorphicCopyByNormalSubloop@\texttt{IsomorphicCopyByNormalSubloop}}
|
||
|
\label{IsomorphicCopyByNormalSubloop}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
When \mbox{\texttt{\mdseries\slshape S}} is a normal subloop of a loop \mbox{\texttt{\mdseries\slshape Q}}, returns an isomorphic copy of \mbox{\texttt{\mdseries\slshape Q}} in which the elements are ordered according to the right cosets of \mbox{\texttt{\mdseries\slshape S}}. In particular, the Cayley table of \mbox{\texttt{\mdseries\slshape S}} will appear in the top left corner of the Cayley table of the resulting loop.\\
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
In order to speed up the search for isomorphisms and automorphisms, we first
|
||
|
calculate some loop invariants preserved under isomorphisms, and then we use
|
||
|
these invariants to partition the loop into blocks of elements preserved under
|
||
|
isomorphisms. The following two operations are used in the search.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{Discriminator}}
|
||
|
\logpage{[ 6, 11, 8 ]}\nobreak
|
||
|
\hyperdef{L}{X7D09D8957E4A0973}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{Discriminator({\mdseries\slshape Q})\index{Discriminator@\texttt{Discriminator}}
|
||
|
\label{Discriminator}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A data structure with isomorphism invariants of a loop \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
See \cite{Vo} or the file \texttt{iso.gi} for more details. The format of the discriminator has been changed from
|
||
|
version 3.2.0 up to accommodate isomorphism searches for quasigroups.}
|
||
|
|
||
|
|
||
|
|
||
|
If two loops have different discriminators, they are not isomorphic. If they
|
||
|
have identical discriminators, they may or may not be isomorphic.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{AreEqualDiscriminators}}
|
||
|
\logpage{[ 6, 11, 9 ]}\nobreak
|
||
|
\hyperdef{L}{X812F0DEE7C896E18}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AreEqualDiscriminators({\mdseries\slshape D1, D2})\index{AreEqualDiscriminators@\texttt{AreEqualDiscriminators}}
|
||
|
\label{AreEqualDiscriminators}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape D1}}, \mbox{\texttt{\mdseries\slshape D2}} are equal discriminators for the purposes of isomorphism searches.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Isotopisms}}\label{Sec:Isotopism}
|
||
|
\logpage{[ 6, 12, 0 ]}
|
||
|
\hyperdef{L}{X7E996BDD81E594F9}{}
|
||
|
{
|
||
|
At the moment, \textsf{LOOPS} contains only slow methods for testing if two loops are isotopic. The method
|
||
|
works as follows: It is well known that if a loop $K$ is isotopic to a loop $L$ then there exist a principal loop isotope $P$ of $K$ such that $P$ is isomorphic to $L$. The algorithm first finds all principal isotopes of $K$, then filters them up to isomorphism, and then checks if any of them is
|
||
|
isomorphic to $L$. This is rather slow already for small orders.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsotopismLoops}}
|
||
|
\logpage{[ 6, 12, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X84C5ADE77F910F63}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsotopismLoops({\mdseries\slshape K, L})\index{IsotopismLoops@\texttt{IsotopismLoops}}
|
||
|
\label{IsotopismLoops}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{fail} if \mbox{\texttt{\mdseries\slshape K}}, \mbox{\texttt{\mdseries\slshape L}} are not isotopic loops, else it returns an isotopism as a triple of bijections
|
||
|
on $1,\dots,|$\mbox{\texttt{\mdseries\slshape K}}$|$.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LoopsUpToIsotopism}}
|
||
|
\logpage{[ 6, 12, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X841E540B7A7EF29F}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LoopsUpToIsotopism({\mdseries\slshape ls})\index{LoopsUpToIsotopism@\texttt{LoopsUpToIsotopism}}
|
||
|
\label{LoopsUpToIsotopism}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
Given a list \mbox{\texttt{\mdseries\slshape ls}} of loops, returns a sublist of \mbox{\texttt{\mdseries\slshape ls}} consisting of representatives of isotopism classes of loops from \mbox{\texttt{\mdseries\slshape ls}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\chapter{\textcolor{Chapter }{Testing Properties of Quasigroups and Loops}}\label{Chap:TestingPropertiesOfQuasigroupsAndLoops}
|
||
|
\logpage{[ 7, 0, 0 ]}
|
||
|
\hyperdef{L}{X7910E575825C713E}{}
|
||
|
{
|
||
|
Although loops are quasigroups, it is often the case in the literature that a
|
||
|
property of the same name can differ for quasigroups and loops. For instance,
|
||
|
a Steiner loop is not necessarily a Steiner quasigroup.
|
||
|
|
||
|
To avoid such ambivalences, we often include the noun \texttt{Loop} or \texttt{Quasigroup} as part of the name of the property, e.g., \texttt{IsSteinerQuasigroup} versus \texttt{IsSteinerLoop}.
|
||
|
|
||
|
On the other hand, some properties coincide for quasigroups and loops and we
|
||
|
therefore do not include \texttt{Loop}, \texttt{Quasigroup} as part of the name of the property, e.g., \texttt{IsCommutative}.
|
||
|
\section{\textcolor{Chapter }{Associativity, Commutativity and Generalizations}}\label{Sec:AssociativityCommutativityAndGeneralizations}
|
||
|
\logpage{[ 7, 1, 0 ]}
|
||
|
\hyperdef{L}{X7960E3FB7A7F0F00}{}
|
||
|
{
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsAssociative}}
|
||
|
\logpage{[ 7, 1, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7C83B5A47FD18FB7}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsAssociative({\mdseries\slshape Q})\index{IsAssociative@\texttt{IsAssociative}}
|
||
|
\label{IsAssociative}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is an associative quasigroup.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsCommutative}}
|
||
|
\logpage{[ 7, 1, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X830A4A4C795FBC2D}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsCommutative({\mdseries\slshape Q})\index{IsCommutative@\texttt{IsCommutative}}
|
||
|
\label{IsCommutative}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a commutative quasigroup.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsPowerAssociative}}
|
||
|
\logpage{[ 7, 1, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X7D53EA947F1CDA69}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsPowerAssociative({\mdseries\slshape Q})\index{IsPowerAssociative@\texttt{IsPowerAssociative}}
|
||
|
\label{IsPowerAssociative}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a power associative quasigroup.
|
||
|
|
||
|
|
||
|
|
||
|
A quasigroup $Q$ is said to be \emph{power associative}\index{quasigroup!power associative}\index{power associative quasigroup} if every element of $Q$ generates an associative quasigroup, that is, a group.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsDiassociative}}
|
||
|
\logpage{[ 7, 1, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X872DCA027E1A4A1D}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsDiassociative({\mdseries\slshape Q})\index{IsDiassociative@\texttt{IsDiassociative}}
|
||
|
\label{IsDiassociative}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a diassociative quasigroup.
|
||
|
|
||
|
|
||
|
|
||
|
A quasigroup $Q$ is said to be \emph{diassociative}\index{quasigroup!diassociative}\index{diassociative quasigroup} if any two elements of $Q$ generate an associative quasigroup, that is, a group. Note that a
|
||
|
diassociative quasigroup is necessarily a loop, but it need not be so declared
|
||
|
in \textsf{LOOPS}.}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Inverse Propeties}}\label{Sec:InverseProperties}
|
||
|
\logpage{[ 7, 2, 0 ]}
|
||
|
\hyperdef{L}{X853841C5820BFEA4}{}
|
||
|
{
|
||
|
For an element $x$ of a loop $Q$, the \emph{left inverse}\index{inverse!left} of $x$ is the element $x^\lambda$ of $Q$ such that $x^\lambda \cdot x = 1$, while the \emph{right inverse}\index{inverse!right} of $x$ is the element $x^\rho$ of $Q$ such that $x\cdot x^\rho = 1$.
|
||
|
\subsection{\textcolor{Chapter }{HasLeftInverseProperty, HasRightInverseProperty and HasInverseProperty}}\logpage{[ 7, 2, 1 ]}
|
||
|
\hyperdef{L}{X85EDD10586596458}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HasLeftInverseProperty({\mdseries\slshape Q})\index{HasLeftInverseProperty@\texttt{HasLeftInverseProperty}}
|
||
|
\label{HasLeftInverseProperty}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HasRightInverseProperty({\mdseries\slshape Q})\index{HasRightInverseProperty@\texttt{HasRightInverseProperty}}
|
||
|
\label{HasRightInverseProperty}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HasInverseProperty({\mdseries\slshape Q})\index{HasInverseProperty@\texttt{HasInverseProperty}}
|
||
|
\label{HasInverseProperty}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if a loop \mbox{\texttt{\mdseries\slshape Q}} has the left inverse property, right inverse property, resp. inverse property.
|
||
|
|
||
|
|
||
|
|
||
|
A loop $Q$ has the \emph{left inverse property}\index{inverse property!left} if $x^\lambda(xy)=y$ for every $x$, $y$ in $Q$. Dually, $Q$ has the \emph{right inverse property}\index{inverse property!right} if $(yx)x^\rho=y$ for every $x$, $y$ in $Q$. If $Q$ has both the left inverse property and the right inverse property, it has the \emph{inverse property}\index{inverse property}.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{HasTwosidedInverses}}
|
||
|
\logpage{[ 7, 2, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X86B93E1B7AEA6EDA}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HasTwosidedInverses({\mdseries\slshape Q})\index{HasTwosidedInverses@\texttt{HasTwosidedInverses}}
|
||
|
\label{HasTwosidedInverses}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if a loop \mbox{\texttt{\mdseries\slshape Q}} has two-sided inverses.
|
||
|
|
||
|
|
||
|
|
||
|
A loop $Q$ is said to have \emph{two-sided inverses}\index{inverse!two-sided} if $x^\lambda=x^\rho$ for every $x$ in $Q$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{HasWeakInverseProperty}}
|
||
|
\logpage{[ 7, 2, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X793909B780761EA8}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HasWeakInverseProperty({\mdseries\slshape Q})\index{HasWeakInverseProperty@\texttt{HasWeakInverseProperty}}
|
||
|
\label{HasWeakInverseProperty}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if a loop \mbox{\texttt{\mdseries\slshape Q}} has the weak inverse property.
|
||
|
|
||
|
|
||
|
|
||
|
A loop $Q$ has the \emph{weak inverse property}\index{inverse property!weak} if $(xy)^\lambda x = y^\lambda$ (equivalently, $x(yx)^\rho = y^\rho$) holds for every $x$, $y$ in $Q$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{HasAutomorphicInverseProperty}}
|
||
|
\logpage{[ 7, 2, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X7F46CE6B7D387158}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HasAutomorphicInverseProperty({\mdseries\slshape Q})\index{HasAutomorphicInverseProperty@\texttt{HasAutomorphicInverseProperty}}
|
||
|
\label{HasAutomorphicInverseProperty}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if a loop \mbox{\texttt{\mdseries\slshape Q}} has the automorphic inverse property.
|
||
|
|
||
|
|
||
|
|
||
|
According to \cite{Ar}, a loop $Q$ has the \emph{automorphic inverse property}\index{automorphic inverse property}\index{inverse property!automorphic} if $(xy)^\lambda = x^\lambda y^\lambda$, or, equivalently, $(xy)^\rho = x^\rho y^\rho$ holds for every $x$, $y$ in $Q$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{HasAntiautomorphicInverseProperty}}
|
||
|
\logpage{[ 7, 2, 5 ]}\nobreak
|
||
|
\hyperdef{L}{X8538D4638232DB51}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{HasAntiautomorphicInverseProperty({\mdseries\slshape Q})\index{HasAntiautomorphicInverseProperty@\texttt{HasAntiautomorphicInverseProperty}}
|
||
|
\label{HasAntiautomorphicInverseProperty}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if a loop \mbox{\texttt{\mdseries\slshape Q}} has the antiautomorphic inverse property.
|
||
|
|
||
|
|
||
|
|
||
|
A loop $Q$ has the \emph{antiautomorphic inverse property}\index{antiautomorphic inverse property}\index{inverse property!antiautomorphic} if $(xy)^\lambda=y^\lambda x^\lambda$, or, equivalently, $(xy)^\rho = y^\rho x^\rho$ holds for every $x$, $y$ in $Q$.\\
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
See Appendix \ref{Apx:Filters} for implications implemented in \textsf{LOOPS} among various inverse properties. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Some Properties of Quasigroups}}\label{Sec:SomePropertiesOfQuasigroups}
|
||
|
\logpage{[ 7, 3, 0 ]}
|
||
|
\hyperdef{L}{X7D8CB6DA828FD744}{}
|
||
|
{
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsSemisymmetric}}
|
||
|
\logpage{[ 7, 3, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X834848ED85F9012B}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSemisymmetric({\mdseries\slshape Q})\index{IsSemisymmetric@\texttt{IsSemisymmetric}}
|
||
|
\label{IsSemisymmetric}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a semisymmetric quasigroup.
|
||
|
|
||
|
|
||
|
|
||
|
A quasigroup $Q$ is \emph{semisymmetric}\index{semisymmetric quasigroup}\index{quasigroup!semisymmetric} if $(xy)x=y$, or, equivalently $x(yx)=y$ holds for every $x$, $y$ in $Q$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsTotallySymmetric}}
|
||
|
\logpage{[ 7, 3, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X834F809B8060B754}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsTotallySymmetric({\mdseries\slshape Q})\index{IsTotallySymmetric@\texttt{IsTotallySymmetric}}
|
||
|
\label{IsTotallySymmetric}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a totally symmetric quasigroup.
|
||
|
|
||
|
|
||
|
|
||
|
A commutative semisymmetric quasigroup is called \emph{totally symmetric}\index{totally symmetric quasigroup}\index{quasigroup!totally symmetric}. Totally symmetric quasigroups are precisely the quasigroups satisfying $xy=x\backslash y = x/y$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsIdempotent}}
|
||
|
\logpage{[ 7, 3, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X7CB5896082D29173}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsIdempotent({\mdseries\slshape Q})\index{IsIdempotent@\texttt{IsIdempotent}}
|
||
|
\label{IsIdempotent}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is an idempotent quasigroup.
|
||
|
|
||
|
|
||
|
|
||
|
A quasigroup is \emph{idempotent}\index{idempotent quasigroup}\index{quasigroup!idempotent} if it satisfies $x^2=x$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsSteinerQuasigroup}}
|
||
|
\logpage{[ 7, 3, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X83DE7DD77C056C1F}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSteinerQuasigroup({\mdseries\slshape Q})\index{IsSteinerQuasigroup@\texttt{IsSteinerQuasigroup}}
|
||
|
\label{IsSteinerQuasigroup}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a Steiner quasigroup.
|
||
|
|
||
|
|
||
|
|
||
|
A totally symmetric idempotent quasigroup is called a \emph{Steiner quasigroup}\index{Steiner quasigroup}\index{quasigroup!Steiner}.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsUnipotent}}
|
||
|
\logpage{[ 7, 3, 5 ]}\nobreak
|
||
|
\hyperdef{L}{X7CA3DCA07B6CB9BD}{}
|
||
|
{
|
||
|
|
||
|
A quasigroup $Q$ is \emph{unipotent}\index{unipotent quasigroup}\index{quasigroup!unipotent} if it satisfies $x^2=y^2$ for every $x$, $y$ in $Q$.\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsUnipotent({\mdseries\slshape Q})\index{IsUnipotent@\texttt{IsUnipotent}}
|
||
|
\label{IsUnipotent}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a unipotent quasigroup.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsLeftDistributive, IsRightDistributive, IsDistributive}}\logpage{[ 7, 3, 6 ]}
|
||
|
\hyperdef{L}{X7B76FD6E878ED4F1}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLeftDistributive({\mdseries\slshape Q})\index{IsLeftDistributive@\texttt{IsLeftDistributive}}
|
||
|
\label{IsLeftDistributive}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRightDistributive({\mdseries\slshape Q})\index{IsRightDistributive@\texttt{IsRightDistributive}}
|
||
|
\label{IsRightDistributive}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsDistributive({\mdseries\slshape Q})\index{IsDistributive@\texttt{IsDistributive}}
|
||
|
\label{IsDistributive}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a left distributive quasigroup, resp. a right distributive quasigroup,
|
||
|
resp. a distributive quasigroup.
|
||
|
|
||
|
|
||
|
|
||
|
A quasigroup is \emph{left distributive}\index{quasigroup!left distributive}\index{distributive quasigroup!left} if it satisfies $x(yz) = (xy)(xz)$, \emph{right distributive}\index{quasigroup!right distributive}\index{distributive quasigroup!right} if it satisfies $(xy)z = (xz)(yz)$, and \emph{distributive}\index{quasigroup!distributive}\index{distributive quasigroup} if it is both left distributive and right distributive.
|
||
|
|
||
|
\textsc{Remark:} In order to be compatible with \textsf{GAP}s terminology, we also support the synonyms \texttt{IsLDistributive} and \texttt{IsRDistributive} of \texttt{IsLeftDistributive} and \texttt{IsRightDistributive}, respectively.}
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsEntropic and IsMedial}}\logpage{[ 7, 3, 7 ]}
|
||
|
\hyperdef{L}{X7F23D4D97A38D223}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsEntropic({\mdseries\slshape Q})\index{IsEntropic@\texttt{IsEntropic}}
|
||
|
\label{IsEntropic}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsMedial({\mdseries\slshape Q})\index{IsMedial@\texttt{IsMedial}}
|
||
|
\label{IsMedial}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is an entropic (aka medial) quasigroup.
|
||
|
|
||
|
|
||
|
|
||
|
A quasigroup is \emph{entropic}\index{entropic quasigroup}\index{quasigroup!entropic} or \emph{medial}\index{medial quasigroup}\index{quasigroup!medial} if it satisfies the identity $(xy)(uv) = (xu)(yv)$.}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Loops of Bol Moufang Type}}\label{Sec:LoopsOfBolMoufangType}
|
||
|
\logpage{[ 7, 4, 0 ]}
|
||
|
\hyperdef{L}{X780D907986EBA6C7}{}
|
||
|
{
|
||
|
Following \cite{Fe} and \cite{PhiVoj}, a variety of loops is said to be of \emph{Bol-Moufang type}\index{loop!of Bol-Moufang type} if it is defined by a single \emph{identity of Bol-Moufang type}\index{identity!of Bol-Moufang type}, i.e., by an identity that contains the same 3 variables on both sides,
|
||
|
exactly one of the variables occurs twice on both sides, and the variables
|
||
|
occur in the same order on both sides.
|
||
|
|
||
|
It is proved in \cite{PhiVoj} that there are 13 varieties of nonassociative loops of Bol-Moufang type. These
|
||
|
are:
|
||
|
\begin{itemize}
|
||
|
\item \emph{left alternative loops}\index{alternative loop!left}\index{loop!left alternative} defined by $x(xy) = (xx)y$,
|
||
|
\item \emph{right alternative loops}\index{alternative loop!right}\index{loop!right alternative} defined by $x(yy) = (xy)y$,
|
||
|
\item \emph{left nuclear square loops}\index{nuclear square loop!left}\index{loop!left nuclear square} defined by $(xx)(yz) = ((xx)y)z$,
|
||
|
\item \emph{middle nuclear square loops}\index{nuclear square loop!middle}\index{loop!middle nuclear square}defined by $x((yy)z) = (x(yy))z$,
|
||
|
\item \emph{right nuclear square loops}\index{nuclear square loop!right}\index{loop!right nuclear square} defined by $x(y(zz)) = (xy)(zz)$,
|
||
|
\item \emph{flexible loops}\index{flexible loop}\index{loop!flexible} defined by $x(yx) = (xy)x$,
|
||
|
\item \emph{left Bol loops}\index{Bol loop!left}\index{loop!left Bol} defined by $x(y(xz)) = (x(yx))z$, always left alternative,
|
||
|
\item \emph{right Bol loops}\index{Bol loop!right}\index{loop!right Bol} defined by $x((yz)y) = ((xy)z)y$, always right alternative,
|
||
|
\item \emph{LC loops}\index{LC loop}\index{loop!LC} defined by $(xx)(yz) = (x(xy))z$, always left alternative, left nuclear square and middle nuclear square,
|
||
|
\item \emph{RC loops}\index{RC loop}\index{loop!RC} defined by $x((yz)z) = (xy)(zz)$, always right alternative, right nuclear square and middle nuclear square,
|
||
|
\item \emph{Moufang loops}\index{Moufang loop}\index{loop!Moufang} defined by $(xy)(zx) = (x(yz))x$, always flexible, left Bol and right Bol,
|
||
|
\item \emph{C loops}\index{C loop}\index{loop!C} defined by $x(y(yz)) = ((xy)y)z$, always LC and RC,
|
||
|
\item \emph{extra loops}\index{extra loop}\index{loop!extra} defined by $x(y(zx)) = ((xy)z)x$, always Moufang and C.
|
||
|
\end{itemize}
|
||
|
|
||
|
|
||
|
Note that although some of the defining identities are not of Bol-Moufang
|
||
|
type, they are equivalent to a Bol-Moufang identity. Moreover, many varieties
|
||
|
of loops of Bol-Moufang type can be defined by one of several equivalent
|
||
|
identities of Bol-Moufang type.
|
||
|
|
||
|
There are also several varieties related to loops of Bol-Moufang type. A loop
|
||
|
is said to be \emph{alternative}\index{alternative loop}\index{loop!alternative} if it is both left alternative and right alternative. A loop is \emph{nuclear square}\index{nuclear square loop}\index{loop!nuclear square} if it is left nuclear square, middle nuclear square and right nuclear square.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsExtraLoop}}
|
||
|
\logpage{[ 7, 4, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7988AFE27D06ACB5}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsExtraLoop({\mdseries\slshape Q})\index{IsExtraLoop@\texttt{IsExtraLoop}}
|
||
|
\label{IsExtraLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is an extra loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsMoufangLoop}}
|
||
|
\logpage{[ 7, 4, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X7F1C151484C97E61}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsMoufangLoop({\mdseries\slshape Q})\index{IsMoufangLoop@\texttt{IsMoufangLoop}}
|
||
|
\label{IsMoufangLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a Moufang loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsCLoop}}
|
||
|
\logpage{[ 7, 4, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X866F04DC7AE54B7C}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsCLoop({\mdseries\slshape Q})\index{IsCLoop@\texttt{IsCLoop}}
|
||
|
\label{IsCLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a C loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsLeftBolLoop}}
|
||
|
\logpage{[ 7, 4, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X801DAAE8834A1A65}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLeftBolLoop({\mdseries\slshape Q})\index{IsLeftBolLoop@\texttt{IsLeftBolLoop}}
|
||
|
\label{IsLeftBolLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a left Bol loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsRightBolLoop}}
|
||
|
\logpage{[ 7, 4, 5 ]}\nobreak
|
||
|
\hyperdef{L}{X79279F9787E72566}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRightBolLoop({\mdseries\slshape Q})\index{IsRightBolLoop@\texttt{IsRightBolLoop}}
|
||
|
\label{IsRightBolLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a right Bol loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsLCLoop}}
|
||
|
\logpage{[ 7, 4, 6 ]}\nobreak
|
||
|
\hyperdef{L}{X789E0A6979697C4C}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLCLoop({\mdseries\slshape Q})\index{IsLCLoop@\texttt{IsLCLoop}}
|
||
|
\label{IsLCLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is an LC loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsRCLoop}}
|
||
|
\logpage{[ 7, 4, 7 ]}\nobreak
|
||
|
\hyperdef{L}{X7B03CC577802F4AB}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRCLoop({\mdseries\slshape Q})\index{IsRCLoop@\texttt{IsRCLoop}}
|
||
|
\label{IsRCLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is an RC loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsLeftNuclearSquareLoop}}
|
||
|
\logpage{[ 7, 4, 8 ]}\nobreak
|
||
|
\hyperdef{L}{X819F285887B5EB9E}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLeftNuclearSquareLoop({\mdseries\slshape Q})\index{IsLeftNuclearSquareLoop@\texttt{IsLeftNuclearSquareLoop}}
|
||
|
\label{IsLeftNuclearSquareLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a left nuclear square loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsMiddleNuclearSquareLoop}}
|
||
|
\logpage{[ 7, 4, 9 ]}\nobreak
|
||
|
\hyperdef{L}{X8474F55681244A8A}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsMiddleNuclearSquareLoop({\mdseries\slshape Q})\index{IsMiddleNuclearSquareLoop@\texttt{IsMiddleNuclearSquareLoop}}
|
||
|
\label{IsMiddleNuclearSquareLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a middle nuclear square loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsRightNuclearSquareLoop}}
|
||
|
\logpage{[ 7, 4, 10 ]}\nobreak
|
||
|
\hyperdef{L}{X807B3B21825E3076}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRightNuclearSquareLoop({\mdseries\slshape Q})\index{IsRightNuclearSquareLoop@\texttt{IsRightNuclearSquareLoop}}
|
||
|
\label{IsRightNuclearSquareLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a right nuclear square loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsNuclearSquareLoop}}
|
||
|
\logpage{[ 7, 4, 11 ]}\nobreak
|
||
|
\hyperdef{L}{X796650088213229B}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsNuclearSquareLoop({\mdseries\slshape Q})\index{IsNuclearSquareLoop@\texttt{IsNuclearSquareLoop}}
|
||
|
\label{IsNuclearSquareLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a nuclear square loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsFlexible}}
|
||
|
\logpage{[ 7, 4, 12 ]}\nobreak
|
||
|
\hyperdef{L}{X7C32851A7AF1C45F}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsFlexible({\mdseries\slshape Q})\index{IsFlexible@\texttt{IsFlexible}}
|
||
|
\label{IsFlexible}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a flexible quasigroup.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsLeftAlternative}}
|
||
|
\logpage{[ 7, 4, 13 ]}\nobreak
|
||
|
\hyperdef{L}{X7DF0196786B9CE08}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLeftAlternative({\mdseries\slshape Q})\index{IsLeftAlternative@\texttt{IsLeftAlternative}}
|
||
|
\label{IsLeftAlternative}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a left alternative quasigroup.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsRightAlternative}}
|
||
|
\logpage{[ 7, 4, 14 ]}\nobreak
|
||
|
\hyperdef{L}{X8416FAD87F148F5D}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRightAlternative({\mdseries\slshape Q})\index{IsRightAlternative@\texttt{IsRightAlternative}}
|
||
|
\label{IsRightAlternative}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a right alternative quasigroup.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsAlternative}}
|
||
|
\logpage{[ 7, 4, 15 ]}\nobreak
|
||
|
\hyperdef{L}{X8379356E82DB5DDA}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsAlternative({\mdseries\slshape Q})\index{IsAlternative@\texttt{IsAlternative}}
|
||
|
\label{IsAlternative}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is an alternative quasigroup.\\
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
While listing the varieties of loops of Bol-Moufang type, we have also listed
|
||
|
all inclusions among them. These inclusions are built into \textsf{LOOPS} as filters. \\
|
||
|
|
||
|
|
||
|
The following trivial example shows some of the implications and the naming
|
||
|
conventions of \textsf{LOOPS} at work:
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@L := LoopByCayleyTable( [ [ 1, 2 ], [ 2, 1 ] ] );
|
|
||
|
<loop of order 2>
|
||
|
!gapprompt@gap>| !gapinput@[ IsLeftBolLoop( L ), L ]
|
|
||
|
[ true, <left Bol loop of order 2> ]
|
||
|
!gapprompt@gap>| !gapinput@[ HasIsLeftAlternativeLoop( L ), IsLeftAlternativeLoop( L ) ];
|
|
||
|
[ true, true ]
|
||
|
!gapprompt@gap>| !gapinput@[ HasIsRightBolLoop( L ), IsRightBolLoop( L ) ];
|
|
||
|
[ false, true ]
|
||
|
!gapprompt@gap>| !gapinput@L;
|
|
||
|
<Moufang loop of order 2>
|
||
|
!gapprompt@gap>| !gapinput@[ IsAssociative( L ), L ];
|
|
||
|
[ true, <associative loop of order 2> ]
|
||
|
\end{Verbatim}
|
||
|
|
||
|
|
||
|
The analogous terminology for quasigroups of Bol-Moufang type is not standard
|
||
|
yet, and hence is not supported in \textsf{LOOPS} except for the situations explicitly noted above. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Power Alternative Loops}}\label{Sec:PowerAlternativeLoops}
|
||
|
\logpage{[ 7, 5, 0 ]}
|
||
|
\hyperdef{L}{X83A501387E1AC371}{}
|
||
|
{
|
||
|
A loop is \emph{left power alternative}\index{power alternative loop!left}\index{loop!left power alternative} if it is power associative and satisfies $x^n(x^m y) = x^{n+m}y$ for all elements $x$, $y$ and all integers $m$, $n$. Similarly, a loop is \emph{right power alternative}\index{power alternative loop!right}\index{loop!right power alternative} if it is power associative and satisfies $(x y^n)y^m = xy^{n+m}$ for all elements $x$, $y$ and all integers $m$, $n$. A loop is \emph{power alternative}\index{power alternative loop}\index{loop!power alternative} if it is both left power alternative and right power alternative.
|
||
|
|
||
|
Left power alternative loops are left alternative and have the left inverse
|
||
|
property. Left Bol loops and LC loops are left power alternative.
|
||
|
\subsection{\textcolor{Chapter }{IsLeftPowerAlternative, IsRightPowerAlternative and IsPowerAlternative}}\logpage{[ 7, 5, 1 ]}
|
||
|
\hyperdef{L}{X875C3DF681B3FAE2}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLeftPowerAlternative({\mdseries\slshape Q})\index{IsLeftPowerAlternative@\texttt{IsLeftPowerAlternative}}
|
||
|
\label{IsLeftPowerAlternative}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRightPowerAlternative({\mdseries\slshape Q})\index{IsRightPowerAlternative@\texttt{IsRightPowerAlternative}}
|
||
|
\label{IsRightPowerAlternative}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsPowerAlternative({\mdseries\slshape Q})\index{IsPowerAlternative@\texttt{IsPowerAlternative}}
|
||
|
\label{IsPowerAlternative}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a left power alternative loop, resp. a right power alternative loop, resp.
|
||
|
a power alternative loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Conjugacy Closed Loops and Related Properties}}\label{Sec:ConjugacyClosedEtc}
|
||
|
\logpage{[ 7, 6, 0 ]}
|
||
|
\hyperdef{L}{X8176B2C47A4629CD}{}
|
||
|
{
|
||
|
A loop $Q$ is \emph{left conjugacy closed}\index{conjugacy closed loop!left}\index{loop!left conjugacy closed} if the set of left translations of $Q$ is closed under conjugation (by itself). Similarly, a loop $Q$ is \emph{right conjugacy closed}\index{conjugacy closed loop!right}\index{loop!right conjugacy closed} if the set of right translations of $Q$ is closed under conjugation. A loop is \emph{conjugacy closed}\index{conjugacy closed loop}\index{loop!conjugacy closed} if it is both left conjugacy closed and right conjugacy closed. It is common
|
||
|
to refer to these loops as LCC, RCC, and CC loops, respectively.
|
||
|
|
||
|
The equivalence LCC $+$ RCC $=$ CC is built into \textsf{LOOPS}.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsLCCLoop}}
|
||
|
\logpage{[ 7, 6, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X784E08CD7B710AF4}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLCCLoop({\mdseries\slshape Q})\index{IsLCCLoop@\texttt{IsLCCLoop}}
|
||
|
\label{IsLCCLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLeftConjugacyClosedLoop({\mdseries\slshape Q})\index{IsLeftConjugacyClosedLoop@\texttt{IsLeftConjugacyClosedLoop}}
|
||
|
\label{IsLeftConjugacyClosedLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a left conjugacy closed loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsRCCLoop}}
|
||
|
\logpage{[ 7, 6, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X7B3016B47A1A8213}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRCCLoop({\mdseries\slshape Q})\index{IsRCCLoop@\texttt{IsRCCLoop}}
|
||
|
\label{IsRCCLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRightConjugacyClosedLoop({\mdseries\slshape Q})\index{IsRightConjugacyClosedLoop@\texttt{IsRightConjugacyClosedLoop}}
|
||
|
\label{IsRightConjugacyClosedLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a right conjugacy closed loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsCCLoop}}
|
||
|
\logpage{[ 7, 6, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X878B614479DCB83F}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsCCLoop({\mdseries\slshape Q})\index{IsCCLoop@\texttt{IsCCLoop}}
|
||
|
\label{IsCCLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsConjugacyClosedLoop({\mdseries\slshape Q})\index{IsConjugacyClosedLoop@\texttt{IsConjugacyClosedLoop}}
|
||
|
\label{IsConjugacyClosedLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a conjugacy closed loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsOsbornLoop}}
|
||
|
\logpage{[ 7, 6, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X8655956878205FC1}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsOsbornLoop({\mdseries\slshape Q})\index{IsOsbornLoop@\texttt{IsOsbornLoop}}
|
||
|
\label{IsOsbornLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is an Osborn loop.
|
||
|
|
||
|
|
||
|
|
||
|
A loop is \emph{Osborn}\index{Osborn loop}\index{loop!Osborn} if it satisfies $x(yz\cdot x)=(x^\lambda\backslash y)(zx)$. Both Moufang loops and CC loops are Osborn.}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Automorphic Loops}}\label{Sec:AutomorphicLoops}
|
||
|
\logpage{[ 7, 7, 0 ]}
|
||
|
\hyperdef{L}{X793B22EA8643C667}{}
|
||
|
{
|
||
|
A loop $Q$ whose all left (resp. middle, resp. right) inner mappings are automorphisms of $Q$ is known as a \emph{left automorphic loop}\index{automorphic loop!left}\index{loop!left automorphic} (resp. \emph{middle automorphic loop}\index{automorphic loop!middle}\index{loop!middle automorphic}, resp. \emph{right automorphic loop}\index{automorphic loop!right}\index{loop!right automorphic}).
|
||
|
|
||
|
A loop $Q$ is an \emph{automorphic loop}\index{automorphic loop}\index{loop!automorphic} if all inner mappings of $Q$ are automorphisms of $Q$.
|
||
|
|
||
|
Automorphic loops are also known as \emph{A loops}, and similar terminology exists for left, right and middle automorphic loops.
|
||
|
|
||
|
The following results hold for automorphic loops:
|
||
|
\begin{itemize}
|
||
|
\item automorphic loops are power associative \cite{BrPa}
|
||
|
\item in an automorphic loop $Q$ we have ${\rm Nuc}(Q) = {\rm Nuc}_{\lambda}(Q) = {\rm Nuc}_{\rho}(Q)\le {\rm
|
||
|
Nuc}_{\mu}(Q)$ and all nuclei are normal \cite{BrPa}
|
||
|
\item a loop that is left automorphic and right automorphic satisfies the
|
||
|
anti-automorphic inverse property and is automorphic \cite{JoKiNaVo}
|
||
|
\item diassociative automorphic loops are Moufang \cite{KiKuPh}
|
||
|
\item automorphic loops of odd order are solvable \cite{KiKuPhVo}
|
||
|
\item finite commutative automorphic loops are solvable \cite{GrKiNa}
|
||
|
\item commutative automorphic loops of order $p$, $2p$, $4p$, $p^2$, $2p^2$, $4p^2$ ($p$ an odd prime) are abelian groups \cite{VoQRS}
|
||
|
\item commutative automorphic loops of odd prime power order are centrally nilpotent \cite{JeKiVo}
|
||
|
\item for any prime $p$, there are $7$ commutative automorphic loops of order $p^3$ up to isomorphism \cite{BaGrVo}
|
||
|
\end{itemize}
|
||
|
See the built-in filters and the survey \cite{VoQRS} for additional properties of automorphic loops.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsLeftAutomorphicLoop}}
|
||
|
\logpage{[ 7, 7, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7F063914804659F1}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLeftAutomorphicLoop({\mdseries\slshape Q})\index{IsLeftAutomorphicLoop@\texttt{IsLeftAutomorphicLoop}}
|
||
|
\label{IsLeftAutomorphicLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLeftALoop({\mdseries\slshape Q})\index{IsLeftALoop@\texttt{IsLeftALoop}}
|
||
|
\label{IsLeftALoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a left automorphic loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsMiddleAutomorphicLoop}}
|
||
|
\logpage{[ 7, 7, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X7DFE830584A769E5}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsMiddleAutomorphicLoop({\mdseries\slshape Q})\index{IsMiddleAutomorphicLoop@\texttt{IsMiddleAutomorphicLoop}}
|
||
|
\label{IsMiddleAutomorphicLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsMiddleALoop({\mdseries\slshape Q})\index{IsMiddleALoop@\texttt{IsMiddleALoop}}
|
||
|
\label{IsMiddleALoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a middle automorphic loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsRightAutomorphicLoop}}
|
||
|
\logpage{[ 7, 7, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X7EA9165A87F99E35}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRightAutomorphicLoop({\mdseries\slshape Q})\index{IsRightAutomorphicLoop@\texttt{IsRightAutomorphicLoop}}
|
||
|
\label{IsRightAutomorphicLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRightALoop({\mdseries\slshape Q})\index{IsRightALoop@\texttt{IsRightALoop}}
|
||
|
\label{IsRightALoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a right automorphic loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsAutomorphicLoop}}
|
||
|
\logpage{[ 7, 7, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X7899603184CF13FD}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsAutomorphicLoop({\mdseries\slshape Q})\index{IsAutomorphicLoop@\texttt{IsAutomorphicLoop}}
|
||
|
\label{IsAutomorphicLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsALoop({\mdseries\slshape Q})\index{IsALoop@\texttt{IsALoop}}
|
||
|
\label{IsALoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is an automorphic loop.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\textsc{Remark:} Be careful not to confuse \texttt{IsALoop} and \texttt{IsLoop}. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Additonal Varieties of Loops}}\label{Sec:AdditionalVarietiesOfLoops}
|
||
|
\logpage{[ 7, 8, 0 ]}
|
||
|
\hyperdef{L}{X846F363879BAB349}{}
|
||
|
{
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsCodeLoop}}
|
||
|
\logpage{[ 7, 8, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X790FA1188087D5C1}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsCodeLoop({\mdseries\slshape Q})\index{IsCodeLoop@\texttt{IsCodeLoop}}
|
||
|
\label{IsCodeLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a code loop.
|
||
|
|
||
|
|
||
|
|
||
|
A \emph{code loop}\index{code loop}\index{loop!code} is a Moufang 2-loop with a Frattini subloop of order 1 or 2. Code loops are
|
||
|
extra and conjugacy closed.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsSteinerLoop}}
|
||
|
\logpage{[ 7, 8, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X793600C9801F4F62}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsSteinerLoop({\mdseries\slshape Q})\index{IsSteinerLoop@\texttt{IsSteinerLoop}}
|
||
|
\label{IsSteinerLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a Steiner loop.
|
||
|
|
||
|
|
||
|
|
||
|
A \emph{Steiner loop}\index{Steiner loop}\index{loop!Steiner} is an inverse property loop of exponent 2. Steiner loops are commutative.}
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsLeftBruckLoop and IsLeftKLoop}}\logpage{[ 7, 8, 3 ]}
|
||
|
\hyperdef{L}{X85F1BD4280E44F5B}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLeftBruckLoop({\mdseries\slshape Q})\index{IsLeftBruckLoop@\texttt{IsLeftBruckLoop}}
|
||
|
\label{IsLeftBruckLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsLeftKLoop({\mdseries\slshape Q})\index{IsLeftKLoop@\texttt{IsLeftKLoop}}
|
||
|
\label{IsLeftKLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a left Bruck loop (aka left K loop).
|
||
|
|
||
|
|
||
|
|
||
|
A left Bol loop with the automorphic inverse property is known as a \emph{left Bruck loop}\index{Bruck loop!left}\index{loop!left Bruck} or a \emph{left K loop}\index{K loop!left}\index{loop!left K}.}
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsRightBruckLoop and IsRightKLoop}}\logpage{[ 7, 8, 4 ]}
|
||
|
\hyperdef{L}{X857B373E7B4E0519}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRightBruckLoop({\mdseries\slshape Q})\index{IsRightBruckLoop@\texttt{IsRightBruckLoop}}
|
||
|
\label{IsRightBruckLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsRightKLoop({\mdseries\slshape Q})\index{IsRightKLoop@\texttt{IsRightKLoop}}
|
||
|
\label{IsRightKLoop}
|
||
|
}\hfill{\scriptsize (property)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if \mbox{\texttt{\mdseries\slshape Q}} is a right Bruck loop (aka right K loop).
|
||
|
|
||
|
|
||
|
|
||
|
A right Bol loop with the automorphic inverse property is known as a \emph{right Bruck loop}\index{Bruck loop!right}\index{loop!right Bruck} or a \emph{right K loop}\index{K loop!right}\index{loop!right K}.}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\chapter{\textcolor{Chapter }{Specific Methods}}\label{Chap:SpecificMethods}
|
||
|
\logpage{[ 8, 0, 0 ]}
|
||
|
\hyperdef{L}{X85AFC9C47FD3C03F}{}
|
||
|
{
|
||
|
This chapter describes methods of \textsf{LOOPS} that apply to specific classes of loops, mostly Bol and Moufang loops.
|
||
|
\section{\textcolor{Chapter }{Core Methods for Bol Loops}}\label{Sec:CoreMethodsForBolLoops}
|
||
|
\logpage{[ 8, 1, 0 ]}
|
||
|
\hyperdef{L}{X7990F2F880E717EE}{}
|
||
|
{
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{AssociatedLeftBruckLoop and AssociatedRightBruckLoop}}\logpage{[ 8, 1, 1 ]}
|
||
|
\hyperdef{L}{X8664CA927DD73DBE}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AssociatedLeftBruckLoop({\mdseries\slshape Q})\index{AssociatedLeftBruckLoop@\texttt{AssociatedLeftBruckLoop}}
|
||
|
\label{AssociatedLeftBruckLoop}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AssociatedRightBruckLoop({\mdseries\slshape Q})\index{AssociatedRightBruckLoop@\texttt{AssociatedRightBruckLoop}}
|
||
|
\label{AssociatedRightBruckLoop}
|
||
|
}\hfill{\scriptsize (attribute)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The left (resp. right) Bruck loop associated with a uniquely 2-divisible left
|
||
|
(resp. right) Bol loop \mbox{\texttt{\mdseries\slshape Q}}.
|
||
|
|
||
|
|
||
|
|
||
|
Let $Q$ be a left Bol loop\index{loop!left Bol}\index{Bol loop!left} such that the mapping $x\mapsto 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 \emph{associated left Bruck loop}\index{Bruck loop!associated left}\index{loop!associated left Bruck}. (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.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{IsExactGroupFactorization}}
|
||
|
\logpage{[ 8, 1, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X82FC16F386CE11F1}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{IsExactGroupFactorization({\mdseries\slshape G, H1, H2})\index{IsExactGroupFactorization@\texttt{IsExactGroupFactorization}}
|
||
|
\label{IsExactGroupFactorization}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
\texttt{true} if (\mbox{\texttt{\mdseries\slshape G}}, \mbox{\texttt{\mdseries\slshape H1}}, \mbox{\texttt{\mdseries\slshape 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 \emph{exact group factorization}\index{exact group factorization} if $H_1$, $H_2$ are subgroups of $G$ such that $H_1H_2=G$ and $H_1\cap H_2=1$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{RightBolLoopByExactGroupFactorization}}
|
||
|
\logpage{[ 8, 1, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X7DCA64807F899127}{}
|
||
|
{
|
||
|
|
||
|
If $(G,H_1,H_2)$ is an exact group factorization then $(G\times G, H_1\times H_2, T)$ with $T=\{(x,x^{-1})| x\in G\}$ is a loop folder that gives rise to a right Bol loop.\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightBolLoopByExactGroupFactorization({\mdseries\slshape arg})\index{RightBolLoopByExactGroupFactorization@\texttt{Right}\-\texttt{Bol}\-\texttt{Loop}\-\texttt{By}\-\texttt{Exact}\-\texttt{Group}\-\texttt{Factorization}}
|
||
|
\label{RightBolLoopByExactGroupFactorization}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The right Bol loop constructed from an exact group factorization. The argument \mbox{\texttt{\mdseries\slshape arg}} can either be an exact group factorization \texttt{[G,H1,H2]}, or the tuple \texttt{[G,H]}, where \texttt{H} is a regular subgroup of \texttt{G}. We also allow \mbox{\texttt{\mdseries\slshape arg}} to be separate entries rather than a list of entries.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Moufang Modifications}}\label{Sec:MoufangModifications}
|
||
|
\logpage{[ 8, 2, 0 ]}
|
||
|
\hyperdef{L}{X819F82737C2A860D}{}
|
||
|
{
|
||
|
Dr{\a'a}pal \cite{DrapalCD} 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 \emph{Moufang modifications}\index{modification!Moufang}. The library of Moufang loops included in \textsf{LOOPS} is based on Moufang modifications. See \cite{DrVo} for details.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LoopByCyclicModification}}
|
||
|
\logpage{[ 8, 2, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7B3165C083709831}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LoopByCyclicModification({\mdseries\slshape Q, S, a, h})\index{LoopByCyclicModification@\texttt{LoopByCyclicModification}}
|
||
|
\label{LoopByCyclicModification}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The cyclic modification of a Moufang loop \mbox{\texttt{\mdseries\slshape Q}} obtained from \mbox{\texttt{\mdseries\slshape S}}, \mbox{\texttt{\mdseries\slshape a}}$=\alpha$ and \mbox{\texttt{\mdseries\slshape 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\in S\cap Z(L)$. Let $\alpha$ be a generator of $Q/S$ and write $Q = \bigcup_{i\in M} \alpha^i$, where $M=\{-m+1$, $\dots$, $m\}$. Let $\sigma:\mathbb{Z}\to M$ be defined by $\sigma(i)=0$ if $i\in M$, $\sigma(i)=1$ if $i>m$, and $\sigma(i)=-1$ if $i<-m+1$. Introduce a new multiplication $*$ on $Q$ by $x*y = xyh^{\sigma(i+j)}$, where $x\in \alpha^i$, $y\in\alpha^j$, $i\in M$ and $j\in M$. Then $(Q,*)$ is a Moufang loop, a \emph{cyclic modification}\index{modification!cyclic} of $Q$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LoopByDihedralModification}}
|
||
|
\logpage{[ 8, 2, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X7D7717C587BC2D1E}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LoopByDihedralModification({\mdseries\slshape Q, S, e, f, h})\index{LoopByDihedralModification@\texttt{LoopByDihedralModification}}
|
||
|
\label{LoopByDihedralModification}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The dihedral modification of a Moufang loop \mbox{\texttt{\mdseries\slshape Q}} obtained from \mbox{\texttt{\mdseries\slshape S}}, \mbox{\texttt{\mdseries\slshape e}}, \mbox{\texttt{\mdseries\slshape f}} and \mbox{\texttt{\mdseries\slshape 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 $m\ge 1$. Let $M$ and $\sigma$ be defined as in the cyclic case. Let $\beta$, $\gamma$ be two involutions of $Q/S$ such that $\alpha=\beta\gamma$ generates a cyclic subgroup of $Q/S$ of order $2m$. Let $e\in\beta$ and $f\in\gamma$ be arbitrary. Then $Q$ can be written as a disjoint union $Q=\bigcup_{i\in M}(\alpha^i\cup e\alpha^i)$, and also $Q=\bigcup_{i\in M}(\alpha^i\cup \alpha^if)$. Let $G_0=\bigcup_{i\in M}\alpha^i$, and $G_1=L\setminus G_0$. Let $h\in S\cap N(L)\cap Z(G_0)$. Introduce a new multiplication $*$ on $Q$ by $x*y = xyh^{(-1)^r\sigma(i+j)}$, where $x\in\alpha^i\cup e\alpha^i$, $y\in\alpha^j\cup \alpha^jf$, $i\in M$, $j\in M$, $y\in G_r$ and $r\in\{0,1\}$. Then $(Q,*)$ is a Moufang loop, a \emph{dihedral modification}\index{modification!dihedral} of $Q$.}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LoopMG2}}
|
||
|
\logpage{[ 8, 2, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X7CC6CDB786E9BBA0}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LoopMG2({\mdseries\slshape G})\index{LoopMG2@\texttt{LoopMG2}}
|
||
|
\label{LoopMG2}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The Chein loop constructed from a group \mbox{\texttt{\mdseries\slshape G}}.
|
||
|
|
||
|
|
||
|
|
||
|
Let $G$ be a group. Let $\overline{G}=\{\overline{g}|g\in G\}$ be a disjoint copy of elements of $G$. Define multiplication $*$ on $Q=G\cup \overline{G}$ by $g*h = gh$, $g*\overline{h}=\overline{hg}$, $\overline{g}*h = \overline{gh^{-1}}$ and $\overline{g}*\overline{h}=h^{-1}g$, where $g$, $h\in G$. Then $(Q,*)=M(G,2)$ is a so-called \emph{Chein loop}\index{Chein loop}\index{loop!Chein}, which is always a Moufang loop, and it is associative if and only if $G$ is commutative.}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Triality for Moufang Loops}}\label{Sec:TrialityForMoufangLoops}
|
||
|
\logpage{[ 8, 3, 0 ]}
|
||
|
\hyperdef{L}{X83E73A767D79FAFD}{}
|
||
|
{
|
||
|
Let $G$ be a group and $\sigma$, $\rho$ be automorphisms of $G$ satisfying $\sigma^2 = \rho^3 = (\sigma \rho)^2 = 1$. Below we write automorphisms as exponents and $[g,\sigma]$ for $g^{-1}g^\sigma$. We say that the triple $(G,\rho,\sigma)$ is a \emph{group with triality}\index{group with triality} if $[g, \sigma] [g,\sigma]^\rho [g,\sigma]^{\rho^2} =1$ holds for all $g \in G$. It is known that one can associate a group with triality $(G,\rho,\sigma)$ in a canonical way with a Moufang loop $Q$. See \cite{NaVo2003} 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 $\sigma$ and $\rho$ are in the same family as the elements of $G$.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{TrialityPermGroup}}
|
||
|
\logpage{[ 8, 3, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7DB4DE647F6F56F0}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{TrialityPermGroup({\mdseries\slshape Q})\index{TrialityPermGroup@\texttt{TrialityPermGroup}}
|
||
|
\label{TrialityPermGroup}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A record with components \texttt{G}, \texttt{rho}, \texttt{sigma}, where \texttt{G} is the canonical group with triality associated with a Moufang loop \mbox{\texttt{\mdseries\slshape Q}}, and \texttt{rho}, \texttt{sigma} are the corresponding triality automorphisms.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{TrialityPcGroup}}
|
||
|
\logpage{[ 8, 3, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X82CC977085DFDFE8}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{TrialityPcGroup({\mdseries\slshape Q})\index{TrialityPcGroup@\texttt{TrialityPcGroup}}
|
||
|
\label{TrialityPcGroup}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
|
||
|
|
||
|
This is a variation of \texttt{TrialityPermGroup} in which \texttt{G} is returned as a pc group.}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Realizing Groups as Multiplication Groups of Loops}}\label{Sec:RealizingGroupsEtc}
|
||
|
\logpage{[ 8, 4, 0 ]}
|
||
|
\hyperdef{L}{X841ED66B8084AA73}{}
|
||
|
{
|
||
|
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 \mbox{\texttt{\mdseries\slshape G}}. In all these operations, one can speed up the search by increasing the
|
||
|
optional argument \mbox{\texttt{\mdseries\slshape depth}}, the price being a much higher memory consumption. The argument \mbox{\texttt{\mdseries\slshape depth}} is optimally chosen if in the permutation group \mbox{\texttt{\mdseries\slshape G}} there are not many permutations fixing \mbox{\texttt{\mdseries\slshape depth}} elements. It is safe to omit the argument or set it equal to 2.
|
||
|
|
||
|
The optional argument \mbox{\texttt{\mdseries\slshape infolevel}} determines the amount of information displayed during the search. With \texttt{\mbox{\texttt{\mdseries\slshape infolevel}}=0}, no information is provided. With \texttt{\mbox{\texttt{\mdseries\slshape infolevel}}=1}, you get some information on timing and hits. With \texttt{\mbox{\texttt{\mdseries\slshape infolevel}}=2}, the results are printed as well.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{AllLoopTablesInGroup}}
|
||
|
\logpage{[ 8, 4, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X804F40087DD1225D}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AllLoopTablesInGroup({\mdseries\slshape G[, depth[, infolevel]]})\index{AllLoopTablesInGroup@\texttt{AllLoopTablesInGroup}}
|
||
|
\label{AllLoopTablesInGroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
All Cayley tables of loops whose multiplication group is contained in the
|
||
|
transitive permutation group \mbox{\texttt{\mdseries\slshape G}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{AllProperLoopTablesInGroup}}
|
||
|
\logpage{[ 8, 4, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X7854C8E382DC8E8B}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AllProperLoopTablesInGroup({\mdseries\slshape G[, depth[, infolevel]]})\index{AllProperLoopTablesInGroup@\texttt{AllProperLoopTablesInGroup}}
|
||
|
\label{AllProperLoopTablesInGroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
All Cayley tables of nonassociative loops whose multiplication group is
|
||
|
contained in the transitive permutation group \mbox{\texttt{\mdseries\slshape G}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{OneLoopTableInGroup}}
|
||
|
\logpage{[ 8, 4, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X7BFFC66A824BA6AA}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{OneLoopTableInGroup({\mdseries\slshape G[, depth[, infolevel]]})\index{OneLoopTableInGroup@\texttt{OneLoopTableInGroup}}
|
||
|
\label{OneLoopTableInGroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A Cayley table of a loop whose multiplication group is contained in the
|
||
|
transitive permutation group \mbox{\texttt{\mdseries\slshape G}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{OneProperLoopTableInGroup}}
|
||
|
\logpage{[ 8, 4, 4 ]}\nobreak
|
||
|
\hyperdef{L}{X84C5A76585B335FF}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{OneProperLoopTableInGroup({\mdseries\slshape G[, depth[, infolevel]]})\index{OneProperLoopTableInGroup@\texttt{OneProperLoopTableInGroup}}
|
||
|
\label{OneProperLoopTableInGroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A Cayley table of a nonassociative loop whose multiplication group is
|
||
|
contained in the transitive permutation group \mbox{\texttt{\mdseries\slshape G}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{AllLoopsWithMltGroup}}
|
||
|
\logpage{[ 8, 4, 5 ]}\nobreak
|
||
|
\hyperdef{L}{X7E5F1C2879358EEF}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AllLoopsWithMltGroup({\mdseries\slshape G[, depth[, infolevel]]})\index{AllLoopsWithMltGroup@\texttt{AllLoopsWithMltGroup}}
|
||
|
\label{AllLoopsWithMltGroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
A list of all loops (given as sections) whose multiplication group is equal to
|
||
|
the transitive permutation group \mbox{\texttt{\mdseries\slshape G}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{OneLoopWithMltGroup}}
|
||
|
\logpage{[ 8, 4, 6 ]}\nobreak
|
||
|
\hyperdef{L}{X8266DE05824226E6}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{OneLoopWithMltGroup({\mdseries\slshape G[, depth[, infolevel]]})\index{OneLoopWithMltGroup@\texttt{OneLoopWithMltGroup}}
|
||
|
\label{OneLoopWithMltGroup}
|
||
|
}\hfill{\scriptsize (operation)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
One loop (given as a section) whose multiplication group is equal to the
|
||
|
transitive permutation group \mbox{\texttt{\mdseries\slshape G}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@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) ])
|
||
|
!gapprompt@gap>| !gapinput@a:=AllLoopTablesInGroup(g,3,0);; Size(a);
|
|
||
|
56
|
||
|
!gapprompt@gap>| !gapinput@a:=AllLoopsWithMltGroup(g,3,0);; Size(a);
|
|
||
|
52
|
||
|
\end{Verbatim}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\chapter{\textcolor{Chapter }{Libraries of Loops}}\label{Chap:LibrariesOfLoops}
|
||
|
\logpage{[ 9, 0, 0 ]}
|
||
|
\hyperdef{L}{X7BF3EE6E7953560D}{}
|
||
|
{
|
||
|
Libraries of small loops form an integral part of \textsf{LOOPS}. The loops are stored in libraries up to isomorphism and, sometimes, up to
|
||
|
isotopism.
|
||
|
\section{\textcolor{Chapter }{A Typical Library}}\label{Sec:ATypicalLibrary}
|
||
|
\logpage{[ 9, 1, 0 ]}
|
||
|
\hyperdef{L}{X874DFEAA79B3377C}{}
|
||
|
{
|
||
|
A library named \emph{my Library} is stored in file \texttt{data/mylibrary.tbl}, and the corresponding data structure is named \texttt{LOOPS{\textunderscore}my{\textunderscore}library{\textunderscore}data}. For example, when the library is called \emph{left Bol}, the corresponding data file is called \texttt{data/leftbol.tbl} and the corresponding data structure is named \texttt{LOOPS{\textunderscore}left{\textunderscore}bol{\textunderscore}data}.
|
||
|
|
||
|
In most cases, the array \texttt{LOOPS{\textunderscore}my{\textunderscore}library{\textunderscore}data} consists of three lists:
|
||
|
\begin{itemize}
|
||
|
\item \texttt{LOOPS{\textunderscore}my{\textunderscore}library{\textunderscore}data[1]} is a list of orders for which there is at least one loop in the library,
|
||
|
\item \texttt{LOOPS{\textunderscore}my{\textunderscore}library{\textunderscore}data[2][k]} is the number of loops of order \texttt{LOOPS{\textunderscore}my{\textunderscore}library{\textunderscore}data[1][k]} in the library,
|
||
|
\item \texttt{LOOPS{\textunderscore}my{\textunderscore}library{\textunderscore}data[3][k][s]} contains data necessary to produce the \texttt{s}th loop of order \texttt{LOOPS{\textunderscore}my{\textunderscore}library{\textunderscore}data[1][k]} in the library.
|
||
|
\end{itemize}
|
||
|
The format of \texttt{LOOPS{\textunderscore}my{\textunderscore}library{\textunderscore}data[3]} depends heavily on the particular library and is not standardized in any way.
|
||
|
The data is often coded to save space.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LibraryLoop}}
|
||
|
\logpage{[ 9, 1, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X849865D6786EEF9B}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LibraryLoop({\mdseries\slshape libname, n, m})\index{LibraryLoop@\texttt{LibraryLoop}}
|
||
|
\label{LibraryLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th loop of order \mbox{\texttt{\mdseries\slshape n}} from the library named \mbox{\texttt{\mdseries\slshape libname}}.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{MyLibraryLoop}}
|
||
|
\logpage{[ 9, 1, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X78C4B8757902D49F}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{MyLibraryLoop({\mdseries\slshape n, m})\index{MyLibraryLoop@\texttt{MyLibraryLoop}}
|
||
|
\label{MyLibraryLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
|
||
|
|
||
|
This is a template function that retrieves the \mbox{\texttt{\mdseries\slshape m}}th loop of order \mbox{\texttt{\mdseries\slshape n}} from the library named \emph{my library}.}
|
||
|
|
||
|
|
||
|
|
||
|
For example, the \mbox{\texttt{\mdseries\slshape m}}th left Bol loop of order \mbox{\texttt{\mdseries\slshape n}} is obtained via \texttt{LeftBolLoop(\mbox{\texttt{\mdseries\slshape n}},\mbox{\texttt{\mdseries\slshape m}})} or via \texttt{LibraryLoop("left Bol",\mbox{\texttt{\mdseries\slshape n}},\mbox{\texttt{\mdseries\slshape m}})}.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{DisplayLibraryInfo}}
|
||
|
\logpage{[ 9, 1, 3 ]}\nobreak
|
||
|
\hyperdef{L}{X7A64372E81E713B4}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{DisplayLibraryInfo({\mdseries\slshape libname})\index{DisplayLibraryInfo@\texttt{DisplayLibraryInfo}}
|
||
|
\label{DisplayLibraryInfo}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
Brief information about the loops contained in the library named \mbox{\texttt{\mdseries\slshape libname}}.\\
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
We are now going to describe the individual libraries. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Left Bol Loops and Right Bol Loops}}\label{Sec:LeftBolLoopsEtc}
|
||
|
\logpage{[ 9, 2, 0 ]}
|
||
|
\hyperdef{L}{X7DF21BD685FBF258}{}
|
||
|
{
|
||
|
The library named \emph{left Bol} contains all nonassociative left Bol loops of order less than 17, including
|
||
|
Moufang loops, as well as all left Bol loops of order $pq$ for primes $p>q>2$. There are 6 such loops of order 8, 1 of order 12, 2 of order 15, 2038 of
|
||
|
order 16, and $(p+q-4)/2$ of order $pq$.
|
||
|
|
||
|
The classification of left Bol loops of order 16 was first accomplished by
|
||
|
Moorhouse \cite{Mo}. Our library was generated independently and it agrees with Moorhouse's
|
||
|
results. The left Bol loops of order $pq$ were classified in \cite{KiNaVo2015}.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LeftBolLoop}}
|
||
|
\logpage{[ 9, 2, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7EE99F647C537994}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftBolLoop({\mdseries\slshape n, m})\index{LeftBolLoop@\texttt{LeftBolLoop}}
|
||
|
\label{LeftBolLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th left Bol loop of order \mbox{\texttt{\mdseries\slshape n}} in the library.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{RightBolLoop}}
|
||
|
\logpage{[ 9, 2, 2 ]}\nobreak
|
||
|
\hyperdef{L}{X8774304282654C58}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightBolLoop({\mdseries\slshape n, m})\index{RightBolLoop@\texttt{RightBolLoop}}
|
||
|
\label{RightBolLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th right Bol loop of order \mbox{\texttt{\mdseries\slshape n}} in the library.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\textsc{Remark:} Only left Bol loops are stored in the library. Right Bol loops are retrieved
|
||
|
by calling \texttt{Opposite} on left Bol loops. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Moufang Loops}}\label{Sec:MoufangLoops}
|
||
|
\logpage{[ 9, 3, 0 ]}
|
||
|
\hyperdef{L}{X7953702D84E60AF4}{}
|
||
|
{
|
||
|
The library named \emph{Moufang} contains all nonassociative Moufang loops of order $n\le 64$ and $n\in\{81,243\}$.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{MoufangLoop}}
|
||
|
\logpage{[ 9, 3, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X81E82098822543EE}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{MoufangLoop({\mdseries\slshape n, m})\index{MoufangLoop@\texttt{MoufangLoop}}
|
||
|
\label{MoufangLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th Moufang loop of order \mbox{\texttt{\mdseries\slshape n}} in the library.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
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:
|
||
|
\[ \begin{array}{r|rrrrrrrrrrrrrrrrrr}
|
||
|
order&12&16&20&24&28&32&36&40&42&44&48&52&54&56&60&64&81&243\cr loops&1 &5 &1
|
||
|
&5 &1 &71&4 &5 &1 &1 &51&1 &2 &4 &5 &4262& 5 &72 \end{array} \]
|
||
|
|
||
|
|
||
|
The \emph{octonion loop}\index{octonion loop}\index{loop!octonion} of order 16 (i.e., the multiplication loop of the basis elements in the
|
||
|
8-dimensional standard real octonion algebra) can be obtained as \texttt{MoufangLoop(16,3)}. }
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Code Loops}}\label{Sec:CodeLoops}
|
||
|
\logpage{[ 9, 4, 0 ]}
|
||
|
\hyperdef{L}{X7BCA6BCB847F79DC}{}
|
||
|
{
|
||
|
The library named \emph{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.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{CodeLoop}}
|
||
|
\logpage{[ 9, 4, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7DB4D3B27BB4D7EE}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{CodeLoop({\mdseries\slshape n, m})\index{CodeLoop@\texttt{CodeLoop}}
|
||
|
\label{CodeLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th code loop of order \mbox{\texttt{\mdseries\slshape n}} in the library.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Steiner Loops}}\label{Sec:SteinerLoops}
|
||
|
\logpage{[ 9, 5, 0 ]}
|
||
|
\hyperdef{L}{X84E941EE7846D3EE}{}
|
||
|
{
|
||
|
Here is how the libary named \emph{Steiner} is described within \textsf{LOOPS}:
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@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
|
||
|
\end{Verbatim}
|
||
|
|
||
|
|
||
|
Our labeling of Steiner loops of order 16 coincides with the labeling of
|
||
|
Steiner triple systems of order 15 in \cite{CoRo}.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{SteinerLoop}}
|
||
|
\logpage{[ 9, 5, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X87C235457E859AF4}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{SteinerLoop({\mdseries\slshape n, m})\index{SteinerLoop@\texttt{SteinerLoop}}
|
||
|
\label{SteinerLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th Steiner loop of order \mbox{\texttt{\mdseries\slshape n}} in the library.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Conjugacy Closed Loops}}\label{Sec:ConjugacyClosedLoops}
|
||
|
\logpage{[ 9, 6, 0 ]}
|
||
|
\hyperdef{L}{X867E5F0783FEB8B5}{}
|
||
|
{
|
||
|
The library named \emph{RCC} contains all nonassocitive right conjugacy closed loops of order $n\le 27$ up to isomorphism. The data for the library was generated by Katharina Artic \cite{Artic} who can also provide additional data for all right conjugacy closed loops of
|
||
|
order $n\le 31$.
|
||
|
|
||
|
Let $Q$ be a right conjugacy closed loop, $G$ its right multiplication group and $T$ its right section. Then $\langle T\rangle = G$ is a transitive group, and $T$ is a union of conjugacy classes of $G$. Every right conjugacy closed loop of order $n$ can therefore be represented as a union of certain conjugacy classes of a
|
||
|
transitive group of degree $n$. This is how right conjugacy closed loops of order less than $28$ are represented in \textsf{LOOPS}. The following table summarizes the number of right conjugacy closed loops of
|
||
|
a given order up to isomorphism:
|
||
|
\[ \begin{array}{r|rrrrrrrrrrrrrrrr} order &6& 8&9&10& 12&14&15& 16& 18& 20&\cr
|
||
|
loops &3&19&5&16&155&97& 17&6317&1901&8248&\cr \hline order &21& 22& 24& 25&
|
||
|
26& 27\cr loops &119&10487&471995& 119&151971&152701 \end{array} \]
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{RCCLoop and RightConjugacyClosedLoop}}\logpage{[ 9, 6, 1 ]}
|
||
|
\hyperdef{L}{X806B2DE67990E42F}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RCCLoop({\mdseries\slshape n, m})\index{RCCLoop@\texttt{RCCLoop}}
|
||
|
\label{RCCLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{RightConjugacyClosedLoop({\mdseries\slshape n, m})\index{RightConjugacyClosedLoop@\texttt{RightConjugacyClosedLoop}}
|
||
|
\label{RightConjugacyClosedLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th right conjugacy closed loop of order \mbox{\texttt{\mdseries\slshape n}} in the library.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{LCCLoop and LeftConjugacyClosedLoop}}\logpage{[ 9, 6, 2 ]}
|
||
|
\hyperdef{L}{X80AB8B107D55FB19}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LCCLoop({\mdseries\slshape n, m})\index{LCCLoop@\texttt{LCCLoop}}
|
||
|
\label{LCCLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{LeftConjugacyClosedLoop({\mdseries\slshape n, m})\index{LeftConjugacyClosedLoop@\texttt{LeftConjugacyClosedLoop}}
|
||
|
\label{LeftConjugacyClosedLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th left conjugacy closed loop of order \mbox{\texttt{\mdseries\slshape n}} in the library.
|
||
|
|
||
|
|
||
|
|
||
|
\textsc{Remark:} Only the right conjugacy closed loops are stored in the library. Left
|
||
|
conjugacy closed loops are obtained from right conjugacy closed loops via \texttt{Opposite}.\\
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
The library named \emph{CC} contains all nonassociative conjugacy closed loops of order $n\le 27$ and also of orders $2p$ and $p^2$ for all primes $p$.
|
||
|
|
||
|
By results of Kunen \cite{Kun}, for every odd prime $p$ there are precisely 3 nonassociative conjugacy closed loops of order $p^2$. Cs{\"o}rg{\H o} and Dr{\a'a}pal \cite{CsDr} described these 3 loops by multiplicative formulas on $\mathbb{Z}_{p^2}$ and $\mathbb{Z}_p \times \mathbb{Z}_p$ as follows:
|
||
|
\begin{itemize}
|
||
|
\item 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 $\mathbb{Z}_{p^2}$ by $x\cdot y = x + y + kpx^2y$.
|
||
|
\item 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 $\mathbb{Z}_{p^2}$ by $x\cdot y = x + y + kpx^2y$.
|
||
|
\item Case $m = 3$: Define multiplication on $\mathbb{Z}_p \times \mathbb{Z}_p$ by $(x,a)(y,b) = (x+y, a+b+x^2y )$.
|
||
|
\end{itemize}
|
||
|
|
||
|
|
||
|
Moreover, Wilson \cite{Wi} constructed a nonassociative conjugacy closed loop of order $2p$ for every odd prime $p$, and Kunen \cite{Kun} showed that there are no other nonassociative conjugacy closed oops of this
|
||
|
order. Here is the relevant multiplication formula on $\mathbb{Z}_2 \times \mathbb{Z}_p$: $(0,m)(0,n) = ( 0, m + n )$, $(0,m)(1,n) = ( 1, -m + n )$, $(1,m)(0,n) = ( 1, m + n)$, $(1,m)(1,n) = ( 0, 1 - m + n )$.
|
||
|
\subsection{\textcolor{Chapter }{CCLoop and ConjugacyClosedLoop}}\logpage{[ 9, 6, 3 ]}
|
||
|
\hyperdef{L}{X798BC601843E8916}{}
|
||
|
{
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{CCLoop({\mdseries\slshape n, m})\index{CCLoop@\texttt{CCLoop}}
|
||
|
\label{CCLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ConjugacyClosedLoop({\mdseries\slshape n, m})\index{ConjugacyClosedLoop@\texttt{ConjugacyClosedLoop}}
|
||
|
\label{ConjugacyClosedLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th conjugacy closed loop of order \mbox{\texttt{\mdseries\slshape n}} in the library.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Small Loops}}\label{Sec:SmallLoops}
|
||
|
\logpage{[ 9, 7, 0 ]}
|
||
|
\hyperdef{L}{X7E3A8F2C790F2CA1}{}
|
||
|
{
|
||
|
The library named \emph{small} contains all nonassociative loops of order 5 and 6. There are 5 and 107 such
|
||
|
loops, respectively.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{SmallLoop}}
|
||
|
\logpage{[ 9, 7, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7C6EE23E84CD87D3}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{SmallLoop({\mdseries\slshape n, m})\index{SmallLoop@\texttt{SmallLoop}}
|
||
|
\label{SmallLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th loop of order \mbox{\texttt{\mdseries\slshape n}} in the library.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Paige Loops}}\label{Sec:PaigeLoops}
|
||
|
\logpage{[ 9, 8, 0 ]}
|
||
|
\hyperdef{L}{X8135C8FD8714C606}{}
|
||
|
{
|
||
|
\emph{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.
|
||
|
|
||
|
The library named \emph{Paige} contains the smallest nonassociative simple Moufang loop.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{PaigeLoop}}
|
||
|
\logpage{[ 9, 8, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7FCF4D6B7AD66D74}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{PaigeLoop({\mdseries\slshape q})\index{PaigeLoop@\texttt{PaigeLoop}}
|
||
|
\label{PaigeLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The Paige loop constructed over the finite field of order \mbox{\texttt{\mdseries\slshape q}}. Only the case \texttt{\mbox{\texttt{\mdseries\slshape q}}=2} is implemented.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Nilpotent Loops}}\label{Sec:NilpotentLoops}
|
||
|
\logpage{[ 9, 9, 0 ]}
|
||
|
\hyperdef{L}{X86695C577A4D1784}{}
|
||
|
{
|
||
|
The library named \emph{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.
|
||
|
|
||
|
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.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{NilpotentLoop}}
|
||
|
\logpage{[ 9, 9, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X7A9C960D86E2AD28}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{NilpotentLoop({\mdseries\slshape n, m})\index{NilpotentLoop@\texttt{NilpotentLoop}}
|
||
|
\label{NilpotentLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th nilpotent loop of order \mbox{\texttt{\mdseries\slshape n}} in the library.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Automorphic Loops}}\label{Sec:AutomorphicLoops}
|
||
|
\logpage{[ 9, 10, 0 ]}
|
||
|
\hyperdef{L}{X793B22EA8643C667}{}
|
||
|
{
|
||
|
The library named \emph{automorphic} contains all nonassociative automorphic loops of order less than 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), all commutative automorphic
|
||
|
loops of order 3, 9, 27 and 81 (there are 1, 2, 7 and 72 such loops,
|
||
|
respectively, including abelian groups), and commutative automorphic loops $Q$ of order 243 possessing a central subloop $S$ of order 3 such that $Q/S$ is not the elementary abelian group of order 81 (there are 118451 such loops).
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{AutomorphicLoop}}
|
||
|
\logpage{[ 9, 10, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X784FFA9E7FDA9F43}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{AutomorphicLoop({\mdseries\slshape n, m})\index{AutomorphicLoop@\texttt{AutomorphicLoop}}
|
||
|
\label{AutomorphicLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th automorphic loop of order \mbox{\texttt{\mdseries\slshape n}} in the library.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Interesting Loops}}\label{Sec:InterestingLoops}
|
||
|
\logpage{[ 9, 11, 0 ]}
|
||
|
\hyperdef{L}{X843BD73F788049F7}{}
|
||
|
{
|
||
|
The library named \emph{interesting} contains some loops that are illustrative in the theory of loops. At this
|
||
|
point, the library contains a nonassociative loop of order 5, a nonassociative
|
||
|
nilpotent loop of order 6, a non-Moufang left Bol loop of order 16, the loop
|
||
|
of sedenions\index{sedenion loop}\index{loop!sedenion} of order 32 (sedenions generalize octonions), and the unique nonassociative
|
||
|
simple right Bol loop of order 96 and exponent 2.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{InterestingLoop}}
|
||
|
\logpage{[ 9, 11, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X87F24AD3811910D3}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{InterestingLoop({\mdseries\slshape n, m})\index{InterestingLoop@\texttt{InterestingLoop}}
|
||
|
\label{InterestingLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th interesting loop of order \mbox{\texttt{\mdseries\slshape n}} in the library.
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\section{\textcolor{Chapter }{Libraries of Loops Up To Isotopism}}\label{Sec:LibrariesOfLoopsUpToIsotopism}
|
||
|
\logpage{[ 9, 12, 0 ]}
|
||
|
\hyperdef{L}{X864839227D5C0A90}{}
|
||
|
{
|
||
|
For the library named \emph{small} we also provide the corresponding library of loops up to isotopism. In
|
||
|
general, given a library named \emph{libname}, the corresponding library of loops up to isotopism is named \emph{itp lib}, and the loops can be retrieved by the template \texttt{ItpLibLoop(n,m)}.
|
||
|
|
||
|
\subsection{\textcolor{Chapter }{ItpSmallLoop}}
|
||
|
\logpage{[ 9, 12, 1 ]}\nobreak
|
||
|
\hyperdef{L}{X850C4C01817A098D}{}
|
||
|
{\noindent\textcolor{FuncColor}{$\triangleright$\ \ \texttt{ItpSmallLoop({\mdseries\slshape n, m})\index{ItpSmallLoop@\texttt{ItpSmallLoop}}
|
||
|
\label{ItpSmallLoop}
|
||
|
}\hfill{\scriptsize (function)}}\\
|
||
|
\textbf{\indent Returns:\ }
|
||
|
The \mbox{\texttt{\mdseries\slshape m}}th small loop of order \mbox{\texttt{\mdseries\slshape n}} up to isotopism in the library.
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
|
||
|
!gapprompt@gap>| !gapinput@SmallLoop( 6, 14 );
|
|
||
|
<small loop 6/14>
|
||
|
!gapprompt@gap>| !gapinput@ItpSmallLoop( 6, 14 );
|
|
||
|
<small loop 6/42>
|
||
|
!gapprompt@gap>| !gapinput@LibraryLoop( "itp small", 6, 14 );
|
|
||
|
<small loop 6/42>
|
||
|
\end{Verbatim}
|
||
|
|
||
|
|
||
|
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 14th
|
||
|
small loop of order 6 up to isotopism is in fact the 42nd small loop of order
|
||
|
6 up to isomorphism. }
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
\appendix
|
||
|
|
||
|
|
||
|
\chapter{\textcolor{Chapter }{Files}}\label{Apx:Files}
|
||
|
\logpage{[ "A", 0, 0 ]}
|
||
|
\hyperdef{L}{X7BC4571A79FFB7D0}{}
|
||
|
{
|
||
|
Below is a list of all relevant files forming the \textsf{LOOPS} package. Some technical files are not included. A typical user will not need
|
||
|
to know any of this information. All paths are relative to the \texttt{pkg/loops} folder. \\
|
||
|
\\
|
||
|
\texttt{../README.loops} (installation and usage instructions) \\
|
||
|
\texttt{init.g} (declarations) \\
|
||
|
\texttt{PackageInfo.g} (loading info for GAP 4.4) \\
|
||
|
\texttt{read.g} (implementations) \\
|
||
|
\texttt{data/automorphic.tbl} (library of automorphic loops) \\
|
||
|
\texttt{data/automorphic/*.*} (addition files for the library of automorphic loops) \\
|
||
|
\texttt{data/cc.tbl} (library of conjugacy closed loops) \\
|
||
|
\texttt{data/code.tbl} (library of code loops) \\
|
||
|
\texttt{data/interesting.tbl} (library of interesting loops) \\
|
||
|
\texttt{data/itp{\textunderscore}small.tbl} (library of small loops up to isotopism) \\
|
||
|
\texttt{data/leftbol.tbl} (library of left Bol loops) \\
|
||
|
\texttt{data/moufang.tbl} (library of Moufang loops) \\
|
||
|
\texttt{data/nilpotent.tbl} (library of small nilpotent loops) \\
|
||
|
\texttt{data/rcc.tbl} (library of right conjugacy closed loops) \\
|
||
|
\texttt{data/rcc/*.*} (additional files for the library of right conjugacy closed loops) \\
|
||
|
\texttt{data/paige.tbl} (library of Paige loops) \\
|
||
|
\texttt{data/small.tbl} (library of small loops) \\
|
||
|
\texttt{data/steiner.tbl} (library of Steiner loops) \\
|
||
|
\texttt{doc/*.*} (all documentation files) \\
|
||
|
\texttt{doc/loops.xml} (the main documentation file for GAPDoc) \\
|
||
|
\texttt{doc/loops.bib} (the main bibliography file for documentation) \\
|
||
|
\texttt{gap/banner.g} (banner of LOOPS) \\
|
||
|
\texttt{gap/bol{\textunderscore}core{\textunderscore}methods.gd .gi} (core methods for Bol loops) \\
|
||
|
\texttt{gap/classes.gd .gi} (properties of quasigroups and loops) \\
|
||
|
\texttt{gap/convert.gd .gi} (methods for data conversion and compression) \\
|
||
|
\texttt{gap/core{\textunderscore}methods.gd .gi} (core methods for quasigroups and loops) \\
|
||
|
\texttt{gap/elements.gd .gi} (elements and basic arithmetic operations) \\
|
||
|
\texttt{gap/examples.gd .gi} (methods for libraries of loops) \\
|
||
|
\texttt{gap/extensions.gd .gi} (methods for extensions of loops) \\
|
||
|
\texttt{gap/iso.gd .gi} (methods for isomorphisms and isotopisms of loops) \\
|
||
|
\texttt{gap/memory.gd .gi} (memory management) \\
|
||
|
\texttt{gap/mlt{\textunderscore}search.gd .gi} (realizing groups as multiplication groups of loops) \\
|
||
|
\texttt{gap/moufang{\textunderscore}modifications.gd .gi} (methods for Moufang modifications) \\
|
||
|
\texttt{gap/moufang{\textunderscore}triality.gd .gi} (methods for triality of Moufang loops) \\
|
||
|
\texttt{gap/quasigroups.gd .gi} (representing, creating and displaying quasigroups) \\
|
||
|
\texttt{gap/random.gd .gi} (random quasigroups and loops) \\
|
||
|
\texttt{tst/bol.tst} (test file for Bol loops) \\
|
||
|
\texttt{tst/core{\textunderscore}methods.tst} (test file for core methods) \\
|
||
|
\texttt{tst/iso.tst} (test file for isomorphisms and automorphisms) \\
|
||
|
\texttt{tst/lib.tst} (test file for libraries of loops, except Moufang loops) \\
|
||
|
\texttt{tst/nilpot.tst} (test file for nilpotency and triality) \\
|
||
|
\texttt{tst/testall.g} (batch for all tets files) }
|
||
|
|
||
|
|
||
|
\chapter{\textcolor{Chapter }{Filters}}\label{Apx:Filters}
|
||
|
\logpage{[ "B", 0, 0 ]}
|
||
|
\hyperdef{L}{X84EFA4C07D4277BB}{}
|
||
|
{
|
||
|
Many implications among properties of loops are built directly into \textsf{LOOPS}. A sizeable portion of these properties are of trivial character or are based
|
||
|
on definitions (e.g., alternative loops $=$ left alternative loops $+$ right alternative loops). The remaining implications are theorems.
|
||
|
|
||
|
All filters of \textsf{LOOPS} are summarized below, using the \textsf{GAP} convention that the property on the left is implied by the property
|
||
|
(properties) on the right. \\
|
||
|
\\
|
||
|
\texttt{( IsExtraLoop, IsAssociative and IsLoop )} \\
|
||
|
\texttt{( IsExtraLoop, IsCodeLoop )} \\
|
||
|
\texttt{( IsCCLoop, IsCodeLoop )} \\
|
||
|
\texttt{( HasTwosidedInverses, IsPowerAssociative and IsLoop )} \\
|
||
|
\texttt{( IsPowerAlternative, IsDiassociative )} \\
|
||
|
\texttt{( IsFlexible, IsDiassociative )} \\
|
||
|
\texttt{( HasAntiautomorphicInverseProperty, HasAutomorphicInverseProperty and
|
||
|
IsCommutative )} \\
|
||
|
\texttt{( HasAutomorphicInverseProperty, HasAntiautomorphicInverseProperty and
|
||
|
IsCommutative )} \\
|
||
|
\texttt{( HasLeftInverseProperty, HasInverseProperty )} \\
|
||
|
\texttt{( HasRightInverseProperty, HasInverseProperty )} \\
|
||
|
\texttt{( HasWeakInverseProperty, HasInverseProperty )} \\
|
||
|
\texttt{( HasAntiautomorphicInverseProperty, HasInverseProperty )} \\
|
||
|
\texttt{( HasTwosidedInverses, HasAntiautomorphicInverseProperty )} \\
|
||
|
\texttt{( HasInverseProperty, HasLeftInverseProperty and IsCommutative )} \\
|
||
|
\texttt{( HasInverseProperty, HasRightInverseProperty and IsCommutative )} \\
|
||
|
\texttt{( HasInverseProperty, HasLeftInverseProperty and HasRightInverseProperty )} \\
|
||
|
\texttt{( HasInverseProperty, HasLeftInverseProperty and HasWeakInverseProperty )} \\
|
||
|
\texttt{( HasInverseProperty, HasRightInverseProperty and HasWeakInverseProperty )} \\
|
||
|
\texttt{( HasInverseProperty, HasLeftInverseProperty and
|
||
|
HasAntiautomorphicInverseProperty )} \\
|
||
|
\texttt{( HasInverseProperty, HasRightInverseProperty and
|
||
|
HasAntiautomorphicInverseProperty )} \\
|
||
|
\texttt{( HasInverseProperty, HasWeakInverseProperty and
|
||
|
HasAntiautomorphicInverseProperty )} \\
|
||
|
\texttt{( HasTwosidedInverses, HasLeftInverseProperty )} \\
|
||
|
\texttt{( HasTwosidedInverses, HasRightInverseProperty )} \\
|
||
|
\texttt{( HasTwosidedInverses, IsFlexible and IsLoop )} \\
|
||
|
\texttt{( IsMoufangLoop, IsExtraLoop )} \\
|
||
|
\texttt{( IsCLoop, IsExtraLoop )} \\
|
||
|
\texttt{( IsExtraLoop, IsMoufangLoop and IsLeftNuclearSquareLoop )} \\
|
||
|
\texttt{( IsExtraLoop, IsMoufangLoop and IsMiddleNuclearSquareLoop )} \\
|
||
|
\texttt{( IsExtraLoop, IsMoufangLoop and IsRightNuclearSquareLoop )} \\
|
||
|
\texttt{( IsLeftBolLoop, IsMoufangLoop )} \\
|
||
|
\texttt{( IsRightBolLoop, IsMoufangLoop )} \\
|
||
|
\texttt{( IsDiassociative, IsMoufangLoop )} \\
|
||
|
\texttt{( IsMoufangLoop, IsLeftBolLoop and IsRightBolLoop )} \\
|
||
|
\texttt{( IsLCLoop, IsCLoop )} \\
|
||
|
\texttt{( IsRCLoop, IsCLoop )} \\
|
||
|
\texttt{( IsDiassociative, IsCLoop and IsFlexible)} \\
|
||
|
\texttt{( IsCLoop, IsLCLoop and IsRCLoop )} \\
|
||
|
\texttt{( IsRightBolLoop, IsLeftBolLoop and IsCommutative )} \\
|
||
|
\texttt{( IsLeftPowerAlternative, IsLeftBolLoop )} \\
|
||
|
\texttt{( IsLeftBolLoop, IsRightBolLoop and IsCommutative )} \\
|
||
|
\texttt{( IsRightPowerAlternative, IsRightBolLoop )} \\
|
||
|
\texttt{( IsLeftPowerAlternative, IsLCLoop )} \\
|
||
|
\texttt{( IsLeftNuclearSquareLoop, IsLCLoop )} \\
|
||
|
\texttt{( IsMiddleNuclearSquareLoop, IsLCLoop )} \\
|
||
|
\texttt{( IsRCLoop, IsLCLoop and IsCommutative )} \\
|
||
|
\texttt{( IsRightPowerAlternative, IsRCLoop )} \\
|
||
|
\texttt{( IsRightNuclearSquareLoop, IsRCLoop )} \\
|
||
|
\texttt{( IsMiddleNuclearSquareLoop, IsRCLoop )} \\
|
||
|
\texttt{( IsLCLoop, IsRCLoop and IsCommutative )} \\
|
||
|
\texttt{( IsRightNuclearSquareLoop, IsLeftNuclearSquareLoop and IsCommutative )} \\
|
||
|
\texttt{( IsLeftNuclearSquareLoop, IsRightNuclearSquareLoop and IsCommutative )} \\
|
||
|
\texttt{( IsLeftNuclearSquareLoop, IsNuclearSquareLoop )} \\
|
||
|
\texttt{( IsRightNuclearSquareLoop, IsNuclearSquareLoop )} \\
|
||
|
\texttt{( IsMiddleNuclearSquareLoop, IsNuclearSquareLoop )} \\
|
||
|
\texttt{( IsNuclearSquareLoop, IsLeftNuclearSquareLoop and IsRightNuclearSquareLoop} \\
|
||
|
\texttt{ and IsMiddleNuclearSquareLoop )} \\
|
||
|
\texttt{( IsFlexible, IsCommutative )} \\
|
||
|
\texttt{( IsRightAlternative, IsLeftAlternative and IsCommutative )} \\
|
||
|
\texttt{( IsLeftAlternative, IsRightAlternative and IsCommutative )} \\
|
||
|
\texttt{( IsLeftAlternative, IsAlternative )} \\
|
||
|
\texttt{( IsRightAlternative, IsAlternative )} \\
|
||
|
\texttt{( IsAlternative, IsLeftAlternative and IsRightAlternative )} \\
|
||
|
\texttt{( IsLeftAlternative, IsLeftPowerAlternative )} \\
|
||
|
\texttt{( HasLeftInverseProperty, IsLeftPowerAlternative )} \\
|
||
|
\texttt{( IsPowerAssociative, IsLeftPowerAlternative )} \\
|
||
|
\texttt{( IsRightAlternative, IsRightPowerAlternative )} \\
|
||
|
\texttt{( HasRightInverseProperty, IsRightPowerAlternative )} \\
|
||
|
\texttt{( IsPowerAssociative, IsRightPowerAlternative )} \\
|
||
|
\texttt{( IsLeftPowerAlternative, IsPowerAlternative )} \\
|
||
|
\texttt{( IsRightPowerAlternative, IsPowerAlternative )} \\
|
||
|
\texttt{( IsAssociative, IsLCCLoop and IsCommutative )} \\
|
||
|
\texttt{( IsExtraLoop, IsLCCLoop and IsMoufangLoop )} \\
|
||
|
\texttt{( IsAssociative, IsRCCLoop and IsCommutative )} \\
|
||
|
\texttt{( IsExtraLoop, IsRCCLoop and IsMoufangLoop )} \\
|
||
|
\texttt{( IsLCCLoop, IsCCLoop )} \\
|
||
|
\texttt{( IsRCCLoop, IsCCLoop )} \\
|
||
|
\texttt{( IsCCLoop, IsLCCLoop and IsRCCLoop )} \\
|
||
|
\texttt{( IsOsbornLoop, IsMoufangLoop )} \\
|
||
|
\texttt{( IsOsbornLoop, IsCCLoop )} \\
|
||
|
\texttt{( HasAutomorphicInverseProperty, IsLeftBruckLoop )} \\
|
||
|
\texttt{( IsLeftBolLoop, IsLeftBruckLoop )} \\
|
||
|
\texttt{( IsRightBruckLoop, IsLeftBruckLoop and IsCommutative )} \\
|
||
|
\texttt{( IsLeftBruckLoop, IsLeftBolLoop and HasAutomorphicInverseProperty )} \\
|
||
|
\texttt{( HasAutomorphicInverseProperty, IsRightBruckLoop )} \\
|
||
|
\texttt{( IsRightBolLoop, IsRightBruckLoop )} \\
|
||
|
\texttt{( IsLeftBruckLoop, IsRightBruckLoop and IsCommutative )} \\
|
||
|
\texttt{( IsRightBruckLoop, IsRightBolLoop and HasAutomorphicInverseProperty )} \\
|
||
|
\texttt{( IsCommutative, IsSteinerLoop )} \\
|
||
|
\texttt{( IsCLoop, IsSteinerLoop )} \\
|
||
|
\texttt{( IsLeftAutomorphicLoop, IsAutomorphicLoop )} \\
|
||
|
\texttt{( IsRightAutomorphicLoop, IsAutomorphicLoop )} \\
|
||
|
\texttt{( IsMiddleAutomorphicLoop, IsAutomorphicLoop )} \\
|
||
|
\texttt{( IsMiddleAutomorphicLoop, IsCommutative )} \\
|
||
|
\texttt{( IsAutomorphicLoop, IsLeftAutomorphicLoop and IsCommutative )} \\
|
||
|
\texttt{( IsAutomorphicLoop, IsRightAutomorphicLoop and IsCommutative )} \\
|
||
|
\texttt{( IsLeftAutomorphicLoop, IsRightAutomorphicLoop and
|
||
|
HasAntiautomorphicInverseProperty )} \\
|
||
|
\texttt{( IsRightAutomorphicLoop, IsLeftAutomorphicLoop and
|
||
|
HasAntiautomorphicInverseProperty )} \\
|
||
|
\texttt{( IsFlexible, IsMiddleAutomorphicLoop )} \\
|
||
|
\texttt{( HasAntiautomorphicInverseProperty, IsFlexible and IsLeftAutomorphicLoop )} \\
|
||
|
\texttt{( HasAntiautomorphicInverseProperty, IsFlexible and IsRightAutomorphicLoop )} \\
|
||
|
\texttt{( IsMoufangLoop, IsAutomorphicLoop and IsLeftAlternative )} \\
|
||
|
\texttt{( IsMoufangLoop, IsAutomorphicLoop and IsRightAlternative )} \\
|
||
|
\texttt{( IsMoufangLoop, IsAutomorphicLoop and HasLeftInverseProperty )} \\
|
||
|
\texttt{( IsMoufangLoop, IsAutomorphicLoop and HasRightInverseProperty )} \\
|
||
|
\texttt{( IsMoufangLoop, IsAutomorphicLoop and HasWeakInverseProperty )} \\
|
||
|
\texttt{( IsLeftAutomorphicLoop, IsLeftBruckLoop )} \\
|
||
|
\texttt{( IsLeftAutomorphicLoop, IsLCCLoop )} \\
|
||
|
\texttt{( IsRightAutomorphicLoop, IsRightBruckLoop )} \\
|
||
|
\texttt{( IsRightAutomorphicLoop, IsRCCLoop )} \\
|
||
|
\texttt{( IsAutomorphicLoop, IsCommutative and IsMoufangLoop )} }
|
||
|
|
||
|
\def\bibname{References\logpage{[ "Bib", 0, 0 ]}
|
||
|
\hyperdef{L}{X7A6F98FD85F02BFE}{}
|
||
|
}
|
||
|
|
||
|
\bibliographystyle{alpha}
|
||
|
\bibliography{loops_bib.xml}
|
||
|
|
||
|
\addcontentsline{toc}{chapter}{References}
|
||
|
|
||
|
\def\indexname{Index\logpage{[ "Ind", 0, 0 ]}
|
||
|
\hyperdef{L}{X83A0356F839C696F}{}
|
||
|
}
|
||
|
|
||
|
\cleardoublepage
|
||
|
\phantomsection
|
||
|
\addcontentsline{toc}{chapter}{Index}
|
||
|
|
||
|
|
||
|
\printindex
|
||
|
|
||
|
\newpage
|
||
|
\immediate\write\pagenrlog{["End"], \arabic{page}];}
|
||
|
\immediate\closeout\pagenrlog
|
||
|
\end{document}
|