Quellcode-Bibliothek chap6.html
Sprache: HTML
|
|
| products/sources/formale Sprachen/GAP/pkg/loops/doc/chap6.html |
 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (Loops) - Chapter 6: Methods Based on Permutation Groups</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
<script src="manual.js" type="text/javascript"></script>
<script type="text/javascript">overwriteStyle();</script>
</head>
<body class="chap6" onload="jscontent()">
<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a> <a href="chap1.html">1</a> <a href="chap2.html">2</a> <a href="chap3.html">3</a> <a href="chap4.html">4</a> <a href="chap5.html">5</a> <a href="chap6.html">6</a> <a href="chap7.html">7</a> <a href="chap8.html">8</a> <a href="chap9.html">9</a> <a href="chapA.html">A</a> <a href="chapB.html">B</a> <a href="chapBib.html">Bib</a> <a href="chapInd.html">Ind</a> </div>
<div class="chlinkprevnexttop"> <a href="chap0.html">[Top of Book]</a> <a href="chap0.html#contents">[Contents]</a> <a href="chap5.html">[Previous Chapter]</a> <a href="chap7.html">[Next Chapter]</a> </div>
<p id="mathjaxlink" class="pcenter"><a href="chap6_mj.html">[MathJax on]</a></p>
<p><a id="X794A04C5854D352B" name="X794A04C5854D352B"></a></p>
<div class="ChapSects"><a href="chap6.html#X794A04C5854D352B">6 <span class="Heading">Methods Based on Permutation Groups</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6.html#X8731D818827C08F3">6.1 <span class="Heading">Parent of a Quasigroup</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7BC856CC7F116BB0">6.1-1 Parent</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X79975EC6783B4293">6.1-2 Position</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X832295DE866E44EE">6.1-3 PosInParent</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6.html#X83EDF04F7952143F">6.2 <span class="Heading">Subquasigroups and Subloops</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7DD511FF864FCDFF">6.2-1 Subquasigroup</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X84E6744E804AE830">6.2-2 Subloop</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X87AC8B7E80CE9260">6.2-3 <span class="Heading">IsSubquasigroup and IsSubloop</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X859B6C8183537E75">6.2-4 AllSubquasigroups</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X81EF252585592001">6.2-5 AllSubloops</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X835F48248571364F">6.2-6 RightCosets</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X85C65D06822E716F">6.2-7 RightTransversal</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6.html#X78AA3D177CCA49FF">6.3 <span class="Heading">Translations and Sections</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7B45B48C7C4D6061">6.3-1 <span class="Heading">LeftTranslation and RightTranslation</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7EB9197C80FB4664">6.3-2 <span class="Heading">LeftSection and RightSection</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6.html#X78ED50F578A88046">6.4 <span class="Heading">Multiplication Groups</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7AB8C9947C1303E2">6.4-1 <span class="Heading">LeftMultiplicationGroup, RightMultiplicationGroup and MultiplicationGroup</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X847256B779E1E7E5">6.4-2 <span class="Heading">RelativeLeftMultiplicationGroup, RelativeRightMultiplicationGroup and RelativeMultiplicationGroup</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6.html#X8740D61178ACD217">6.5 <span class="Heading">Inner Mapping Groups</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7EE1E78C856C6F7C">6.5-1 <span class="Heading">LeftInnerMapping, RightInnerMapping, MiddleInnerMapping</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X79CDA09A7D48BF2B">6.5-2 <span class="Heading">LeftInnerMappingGroup, RightInnerMappingGroup, MiddleInnerMappingGroup</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X82513A3B7C3A6420">6.5-3 InnerMappingGroup</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6.html#X7B45C2AF7C2E28AB">6.6 <span class="Heading">Nuclei, Commutant, Center, and Associator Subloop</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X798316F47A47FF63">6.6-1 <span class="Heading">LeftNucleus, MiddleNucleus, and RightNucleus</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X84D389677A91C290">6.6-2 <span class="Heading">Nuc, NucleusOfQuasigroup and NucleusOfLoop</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7C8428DE791F3CE1">6.6-3 Commutant</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7C1FBE7A84DD4873">6.6-4 Center</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7F7FDE82780EDD7E">6.6-5 AssociatorSubloop</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6.html#X85B650D284FE39F3">6.7 <span class="Heading">Normal Subloops and Simple Loops</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X838186F9836F678C">6.7-1 IsNormal</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7BDEA0A98720D1BB">6.7-2 NormalClosure</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7D8E63A7824037CC">6.7-3 IsSimple</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6.html#X87F66DB383C29A4A">6.8 <span class="Heading">Factor Loops</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X83E1953980E2DE2F">6.8-1 FactorLoop</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X870FCB497AECC730">6.8-2 NaturalHomomorphismByNormalSubloop</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6.html#X821F40748401D698">6.9 <span class="Heading">Nilpotency and Central Series</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X78A4B93781C96AAE">6.9-1 IsNilpotent</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7D5FC62581A99482">6.9-2 NilpotencyClassOfLoop</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7E7C2D117B55F6A0">6.9-3 IsStronglyNilpotent</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7ED37AA07BEE79E0">6.9-4 UpperCentralSeries</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X817BDBC2812992ED">6.9-5 LowerCentralSeries</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6.html#X83A38A6C7EDBCA63">6.10 <span class="Heading">Solvability, Derived Series and Frattini Subloop</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X79B10B337A3B1C6E">6.10-1 IsSolvable</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7A82DC4680DAD67C">6.10-2 DerivedSubloop</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7A9AA1577CEC891F">6.10-3 DerivedLength</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X85BD2C517FA7A47E">6.10-4 <span class="Heading">FrattiniSubloop and FrattinifactorSize</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X855286367A2D5A54">6.10-5 FrattinifactorSize</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6.html#X81F3496578EAA74E">6.11 <span class="Heading">Isomorphisms and Automorphisms</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X801067F67E5292F7">6.11-1 IsomorphismQuasigroups</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7D7B10D6836FCA9F">6.11-2 IsomorphismLoops</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X82373C5479574F22">6.11-3 QuasigroupsUpToIsomorphism</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X8308F38283C61B20">6.11-4 LoopsUpToIsomorphism</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X87677B0787B4461A">6.11-5 AutomorphismGroup</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7A42812B7B027DD4">6.11-6 QuasigroupIsomorph</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7BD1AC32851286EA">6.11-7 LoopIsomorph</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X85B3E22679FD8D81">6.11-8 IsomorphicCopyByPerm</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X8121DE3A78795040">6.11-9 IsomorphicCopyByNormalSubloop</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X7D09D8957E4A0973">6.11-10 Discriminator</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X812F0DEE7C896E18">6.11-11 AreEqualDiscriminators</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap6.html#X7E996BDD81E594F9">6.12 <span class="Heading">Isotopisms</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X84C5ADE77F910F63">6.12-1 IsotopismLoops</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap6.html#X841E540B7A7EF29F">6.12-2 LoopsUpToIsotopism</a></span>
</div></div>
</div>
<h3>6 <span class="Heading">Methods Based on Permutation Groups</span></h3>
<p>Most calculations in the <strong class="pkg">LOOPS</strong> 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 <strong class="pkg">LOOPS</strong> based on permutations. Additional core methods can be found in Chapter <a href="chap7.html#X7910E575825C713E"><span class="RefLink">7</span></a>.</p>
<p><a id="X8731D818827C08F3" name="X8731D818827C08F3"></a></p>
<h4>6.1 <span class="Heading">Parent of a Quasigroup</span></h4>
<p>Let <span class="SimpleMath">Q</span> be a quasigroup and <span class="SimpleMath">S</span> a subquasigroup of <span class="SimpleMath">Q</span>. Since the multiplication in <span class="SimpleMath">S</span> coincides with the multiplication in <span class="SimpleMath">Q</span>, it is reasonable not to store the multiplication table of <span class="SimpleMath">S</span>. However, the quasigroup <span class="SimpleMath">S</span> then must know that it is a subquasigroup of <span class="SimpleMath">Q</span>.</p>
<p><a id="X7BC856CC7F116BB0" name="X7BC856CC7F116BB0"></a></p>
<h5>6.1-1 Parent</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Parent</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The parent quasigroup of the quasigroup <var class="Arg">Q</var>.</p>
<p>When <var class="Arg">Q</var> is not created as a subquasigroup of another quasigroup, the attribute <code class="code">Parent(<var class="Arg">Q</var>)</code> is set to <var class="Arg">Q</var>. When <var class="Arg">Q</var> is created as a subquasigroup of a quasigroup <var class="Arg">H</var>, we set <code class="code">Parent(<var class="Arg">Q</var>)</code> equal to <code class="code">Parent(<var class="Arg">H</var>)</code>. Thus, in effect, <code class="code">Parent(<var class="Arg">Q</var>)</code> is the largest quasigroup from which <var class="Arg">Q</var> has been created.</p>
<p><a id="X79975EC6783B4293" name="X79975EC6783B4293"></a></p>
<h5>6.1-2 Position</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Position</code>( <var class="Arg">Q</var>, <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The position of <var class="Arg">x</var> among the elements of <var class="Arg">Q</var>.<br /></p>
<p>Let <var class="Arg">Q</var> be a quasigroup with parent <var class="Arg">P</var>, where <var class="Arg">P</var> is some <span class="SimpleMath">n</span>-element quasigroup. Let <var class="Arg">x</var> be an element of <var class="Arg">Q</var>. Then <code class="code"><var class="Arg">x</var>![1]</code> is the position of <var class="Arg">x</var> among the elements of <var class="Arg">P</var>, i.e., <code class="code"><var class="Arg">x</var>![1] = Position(Elements(<var class="Arg">P</var>),<var class="Arg">x</var>)</code>.</p>
<p>While referring to elements of <var class="Arg">Q</var> by their positions, the user should understand whether the positions are meant among the elements of <var class="Arg">Q</var>, or among the elements of the parent <var class="Arg">P</var> of <var class="Arg">Q</var>. Since it requires no calculation to obtain <code class="code"><var class="Arg">x</var>![1]</code>, we always use the position of an element in its parent quasigroup in <strong class="pkg">LOOPS</strong>. In this way, many attributes of a quasigroup, including its Cayley table, are permanently tied to its parent.</p>
<p>It is now clear why we have not insisted that Cayley tables of quasigroups must have entries covering the entire interval <span class="SimpleMath">1</span>, <span class="SimpleMath">dots</span>, <span class="SimpleMath">n</span> for some <span class="SimpleMath">n</span>.</p>
<p><a id="X832295DE866E44EE" name="X832295DE866E44EE"></a></p>
<h5>6.1-3 PosInParent</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PosInParent</code>( <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: When <var class="Arg">S</var> is a list of quasigroup elements (not necessarily from the same quasigroup), returns the corresponding list of positions of elements of <var class="Arg">S</var> in the corresponding parent, i.e., <code class="code">PosInParent(<var class="Arg">S</var>)[i] = <var class="Arg">S</var>[i]![1] = Position(Parent(<var class="Arg">S</var>[i]),<var class="Arg">S</var>[i])</code>.<br /></p>
<p>Quasigroups with the same parent can be compared as follows. Assume that <span class="SimpleMath">A</span>, <span class="SimpleMath">B</span> are two quasigroups with common parent <span class="SimpleMath">Q</span>. Let <span class="SimpleMath">G_A</span>, <span class="SimpleMath">G_B</span> be the canonical generating sets of <span class="SimpleMath">A</span> and <span class="SimpleMath">B</span>, respectively, obtained by the method <code class="code">GeneratorsSmallest</code> (see Section <a href="chap5.html#X7BD5B55C802805B4"><span class="RefLink">5.5</span></a>). Then we define <span class="SimpleMath">A<B</span> if and only if <span class="SimpleMath">G_A<G_B</span> lexicographically.</p>
<p><a id="X83EDF04F7952143F" name="X83EDF04F7952143F"></a></p>
<h4>6.2 <span class="Heading">Subquasigroups and Subloops</span></h4>
<p><a id="X7DD511FF864FCDFF" name="X7DD511FF864FCDFF"></a></p>
<h5>6.2-1 Subquasigroup</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Subquasigroup</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: When <var class="Arg">S</var> is a subset of elements or indices of a quasigroup (resp. loop) <var class="Arg">Q</var>, returns the smallest subquasigroup (resp. subloop) of <var class="Arg">Q</var> containing <var class="Arg">S</var>.</p>
<p>We allow <var class="Arg">S</var> to be a list of elements of <var class="Arg">Q</var>, or a list of integers representing the positions of the respective elements in the parent quasigroup (resp. loop) of <var class="Arg">Q</var>.</p>
<p>If <var class="Arg">S</var> is empty, <code class="code">Subquasigroup(<var class="Arg">Q</var>,<var class="Arg">S</var>)</code> returns the empty set if <var class="Arg">Q</var> is a quasigroup, and it returns the one-element subloop of <var class="Arg">Q</var> if <var class="Arg">Q</var> is a loop.</p>
<p><strong class="button">Remark:</strong> The empty set is sometimes considered to be a subquasigroup of <var class="Arg">Q</var> (although not in <strong class="pkg">LOOPS</strong>). The above convention is useful for handling certain situations, for instance when the user calls <code class="code">Center(<var class="Arg">Q</var>)</code> for a quasigroup <var class="Arg">Q</var> with empty center.</p>
<p><a id="X84E6744E804AE830" name="X84E6744E804AE830"></a></p>
<h5>6.2-2 Subloop</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Subloop</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>This is an analog of <code class="code">Subquasigroup(<var class="Arg">Q</var>,<var class="Arg">S</var>)</code> that can be used only when <var class="Arg">Q</var> is a loop. Since there is no difference in the outcome while calling <code class="code">Subquasigroup(<var class="Arg">Q</var>,<var class="Arg">S</var>)</code> or <code class="code">Subloop(<var class="Arg">Q</var>,<var class="Arg">S</var>)</code> when <var class="Arg">Q</var> is a loop, it is safe to always call <code class="code">Subquasigroup(<var class="Arg">Q</var>,<var class="Arg">S</var>)</code>, whether <var class="Arg">Q</var> is a loop or not.</p>
<p><a id="X87AC8B7E80CE9260" name="X87AC8B7E80CE9260"></a></p>
<h5>6.2-3 <span class="Heading">IsSubquasigroup and IsSubloop</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSubquasigroup</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSubloop</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">S</var> is a subquasigroup (resp. subloop) of a quasigroup (resp. loop) <var class="Arg">Q</var>, <code class="code">false</code> otherwise. In other words, returns <code class="code">true</code> if <var class="Arg">S</var> and <var class="Arg">Q</var> are quasigroups (resp. loops) with the same parent and <var class="Arg">S</var> is a subset of <var class="Arg">Q</var>.</p>
<p><a id="X859B6C8183537E75" name="X859B6C8183537E75"></a></p>
<h5>6.2-4 AllSubquasigroups</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AllSubquasigroups</code>( <var class="Arg">Q</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A list of all subquasigroups of a loop <var class="Arg">Q</var>.</p>
<p><a id="X81EF252585592001" name="X81EF252585592001"></a></p>
<h5>6.2-5 AllSubloops</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AllSubloops</code>( <var class="Arg">Q</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A list of all subloops of a loop <var class="Arg">Q</var>.</p>
<p><a id="X835F48248571364F" name="X835F48248571364F"></a></p>
<h5>6.2-6 RightCosets</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightCosets</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: If <var class="Arg">S</var> is a subloop of <var class="Arg">Q</var>, returns a list of all right cosets of <var class="Arg">S</var> in <var class="Arg">Q</var>.</p>
<p>The coset <var class="Arg">S</var> is listed first, and the elements of each coset are ordered in the same way as the elements of <var class="Arg">S</var>, i.e., if <var class="Arg">S</var><span class="SimpleMath">= [s_1,dots,s_m]</span>, then <var class="Arg">S</var><span class="SimpleMath">x=[s_1x,dots,s_mx]</span>.</p>
<p><a id="X85C65D06822E716F" name="X85C65D06822E716F"></a></p>
<h5>6.2-7 RightTransversal</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightTransversal</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A right transversal of a subloop <var class="Arg">S</var> in a loop <var class="Arg">Q</var>. The transversal consists of the list of first elements from the right cosets obtained by <code class="code">RightCosets(<var class="Arg">Q</var>,<var class="Arg">S</var>)</code>.</p>
<p>When <var class="Arg">S</var> is a subloop of <var class="Arg">Q</var>, the right transversal of <var class="Arg">S</var> with respect to <var class="Arg">Q</var> is a subset of <var class="Arg">Q</var> containing one element from each right coset of <var class="Arg">S</var> in <var class="Arg">Q</var>.</p>
<p><a id="X78AA3D177CCA49FF" name="X78AA3D177CCA49FF"></a></p>
<h4>6.3 <span class="Heading">Translations and Sections</span></h4>
<p>When <span class="SimpleMath">x</span> is an element of a quasigroup <span class="SimpleMath">Q</span>, the left translation <span class="SimpleMath">L_x</span> is a permutation of <span class="SimpleMath">Q</span>. In <strong class="pkg">LOOPS</strong>, all permutations associated with quasigroups and their elements are permutations in the sense of <strong class="pkg">GAP</strong>, i.e., they are bijections of some interval <span class="SimpleMath">1</span>, <span class="SimpleMath">dots</span>, <span class="SimpleMath">n</span>. Moreover, following our convention, the numerical entries of the permutations point to the positions among elements of the parent of <span class="SimpleMath">Q</span>, not among elements of <span class="SimpleMath">Q</span>.</p>
<p><a id="X7B45B48C7C4D6061" name="X7B45B48C7C4D6061"></a></p>
<h5>6.3-1 <span class="Heading">LeftTranslation and RightTranslation</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftTranslation</code>( <var class="Arg">Q</var>, <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightTranslation</code>( <var class="Arg">Q</var>, <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: If <var class="Arg">x</var> is an element of a quasigroup <var class="Arg">Q</var>, returns the left translation (resp. right translation) by <var class="Arg">x</var> in <var class="Arg">Q</var>.</p>
<p><a id="X7EB9197C80FB4664" name="X7EB9197C80FB4664"></a></p>
<h5>6.3-2 <span class="Heading">LeftSection and RightSection</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftSection</code>( <var class="Arg">Q</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightSection</code>( <var class="Arg">Q</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The left section (resp. right section) of a quasigroup <var class="Arg">Q</var>.<br /></p>
<p>Here is an example illustrating the main features of the subquasigroup construction and the relationship between a quasigroup and its parent.</p>
<p>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.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">M := MoufangLoop( 12, 1 );; S := Subloop( M, [ M.5 ] );</span>
<loop of order 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">[ Parent( S ) = M, Elements( S ), PosInParent( S ) ];</span>
[ true, [ l1, l3, l5], [ 1, 3, 5 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">HasCayleyTable( S );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">SetLoopElmName( S, "s" );; Elements( S ); Elements( M );</span>
[ s1, s3, s5 ]
[ s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">CayleyTable( S );</span>
[ [ 1, 3, 5 ], [ 3, 5, 1 ], [ 5, 1, 3 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">LeftSection( S );</span>
[ (), (1,3,5), (1,5,3) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">[ HasCayleyTable( S ), Parent( S ) = M ];</span>
[ true, true ]
<span class="GAPprompt">gap></span> <span class="GAPinput">L := LoopByCayleyTable( CayleyTable( S ) );; Elements( L );</span>
[ l1, l2, l3 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">[ Parent( L ) = L, IsSubloop( M, S ), IsSubloop( M, L ) ];</span>
[ true, true, false ]
<span class="GAPprompt">gap></span> <span class="GAPinput">LeftSection( L );</span>
[ (), (1,2,3), (1,3,2) ]
</pre></div>
<p><a id="X78ED50F578A88046" name="X78ED50F578A88046"></a></p>
<h4>6.4 <span class="Heading">Multiplication Groups</span></h4>
<p><a id="X7AB8C9947C1303E2" name="X7AB8C9947C1303E2"></a></p>
<h5>6.4-1 <span class="Heading">LeftMultiplicationGroup, RightMultiplicationGroup and MultiplicationGroup</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftMultiplicationGroup</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightMultiplicationGroup</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MultiplicationGroup</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The left multiplication group, right multiplication group, resp. multiplication group of a quasigroup <var class="Arg">Q</var>.</p>
<p><a id="X847256B779E1E7E5" name="X847256B779E1E7E5"></a></p>
<h5>6.4-2 <span class="Heading">RelativeLeftMultiplicationGroup, RelativeRightMultiplicationGroup and RelativeMultiplicationGroup</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RelativeLeftMultiplicationGroup</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RelativeRightMultiplicationGroup</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RelativeMultiplicationGroup</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The relative left multiplication group, the relative right multiplication group, resp. the relative multiplication group of a quasigroup <var class="Arg">Q</var> with respect to a subquasigroup <var class="Arg">S</var> of <var class="Arg">Q</var>.</p>
<p>Let <span class="SimpleMath">S</span> be a subquasigroup of a quasigroup <span class="SimpleMath">Q</span>. Then the <em>relative left multiplication group</em> of <span class="SimpleMath">Q</span> with respect to <span class="SimpleMath">S</span> is the group <span class="SimpleMath">⟨ L(x)|x∈ S⟩</span>, where <span class="SimpleMath">L(x)</span> is the left translation by <span class="SimpleMath">x</span> in <span class="SimpleMath">Q</span> restricted to <span class="SimpleMath">S</span>. The <em>relative right multiplication group</em> and the <em>relative multiplication group</em> are defined analogously.</p>
<p><a id="X8740D61178ACD217" name="X8740D61178ACD217"></a></p>
<h4>6.5 <span class="Heading">Inner Mapping Groups</span></h4>
<p>By a result of Bruck, the left inner mapping group of a loop is generated by all <em>left inner mappings</em> <span class="SimpleMath">L(x,y) = L_yx^-1L_yL_x</span>, and the right inner mapping group is generated by all <em>right inner mappings</em> <span class="SimpleMath">R(x,y) = R_xy^-1R_yR_x</span>.</p>
<p>In analogy with group theory, we define the <em>conjugations</em> or the <em>middle inner mappings</em> as <span class="SimpleMath">T(x) = L_x^-1R_x</span>. The <em>middle inner mapping group</em> is then the group generated by all conjugations.</p>
<p><a id="X7EE1E78C856C6F7C" name="X7EE1E78C856C6F7C"></a></p>
<h5>6.5-1 <span class="Heading">LeftInnerMapping, RightInnerMapping, MiddleInnerMapping</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftInnerMapping</code>( <var class="Arg">Q</var>, <var class="Arg">x</var>, <var class="Arg">y</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightInnerMapping</code>( <var class="Arg">Q</var>, <var class="Arg">x</var>, <var class="Arg">y</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MiddleInnerMapping</code>( <var class="Arg">Q</var>, <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The left inner mapping <span class="SimpleMath">L(</span><var class="Arg">x</var>,<var class="Arg">y</var><span class="SimpleMath">)</span>, the right inner mapping <span class="SimpleMath">R(</span><var class="Arg">x</var>,<var class="Arg">y</var><span class="SimpleMath">)</span>, resp. the middle inner mapping <span class="SimpleMath">T(</span><var class="Arg">x</var><span class="SimpleMath">)</span> of a loop <var class="Arg">Q</var>.</p>
<p><a id="X79CDA09A7D48BF2B" name="X79CDA09A7D48BF2B"></a></p>
<h5>6.5-2 <span class="Heading">LeftInnerMappingGroup, RightInnerMappingGroup, MiddleInnerMappingGroup</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftInnerMappingGroup</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightInnerMappingGroup</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MiddleInnerMappingGroup</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The left inner mapping group, right inner mapping group, resp. middle inner mapping group of a loop <var class="Arg">Q</var>.</p>
<p><a id="X82513A3B7C3A6420" name="X82513A3B7C3A6420"></a></p>
<h5>6.5-3 InnerMappingGroup</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ InnerMappingGroup</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The inner mapping group of a loop <var class="Arg">Q</var>.<br /></p>
<p>Here is an example for multiplication groups and inner mapping groups:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">M := MoufangLoop(12,1);</span>
<Moufang loop 12/1>
<span class="GAPprompt">gap></span> <span class="GAPinput">LeftSection(M)[2];</span>
(1,2)(3,4)(5,6)(7,8)(9,12)(10,11)
<span class="GAPprompt">gap></span> <span class="GAPinput">Mlt := MultiplicationGroup(M); Inn := InnerMappingGroup(M);</span>
<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) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(Inn);</span>
216
</pre></div>
<p><a id="X7B45C2AF7C2E28AB" name="X7B45C2AF7C2E28AB"></a></p>
<h4>6.6 <span class="Heading">Nuclei, Commutant, Center, and Associator Subloop</span></h4>
<p>See Section <a href="chap2.html#X83EDF04F7952143F"><span class="RefLink">2.3</span></a> for the relevant definitions.</p>
<p><a id="X798316F47A47FF63" name="X798316F47A47FF63"></a></p>
<h5>6.6-1 <span class="Heading">LeftNucleus, MiddleNucleus, and RightNucleus</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftNucleus</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MiddleNucleus</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightNucleus</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The left nucleus, middle nucleus, resp. right nucleus of a quasigroup <var class="Arg">Q</var>.</p>
<p><a id="X84D389677A91C290" name="X84D389677A91C290"></a></p>
<h5>6.6-2 <span class="Heading">Nuc, NucleusOfQuasigroup and NucleusOfLoop</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Nuc</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NucleusOfQuasigroup</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NucleusOfLoop</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: These synonymous attributes return the nucleus of a quasigroup <var class="Arg">Q</var>.</p>
<p>Since all nuclei are subquasigroups of <var class="Arg">Q</var>, they are returned as subquasigroups (resp. subloops). When <var class="Arg">Q</var> is a loop then all nuclei are in fact groups, and they are returned as associative loops.</p>
<p><strong class="button">Remark:</strong> The name <code class="code">Nucleus</code> is a global function of <strong class="pkg">GAP</strong> with two variables. We have therefore used <code class="code">Nuc</code> rather than <code class="code">Nucleus</code> for the nucleus. This abbreviation is sometimes used in the literature, too.</p>
<p><a id="X7C8428DE791F3CE1" name="X7C8428DE791F3CE1"></a></p>
<h5>6.6-3 Commutant</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Commutant</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The commutant of a quasigroup <var class="Arg">Q</var>.</p>
<p><a id="X7C1FBE7A84DD4873" name="X7C1FBE7A84DD4873"></a></p>
<h5>6.6-4 Center</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Center</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The center of a quasigroup <var class="Arg">Q</var>.</p>
<p>If <var class="Arg">Q</var> is a loop, the center of <var class="Arg">Q</var> is a subgroup of <var class="Arg">Q</var> and it is returned as an associative loop.</p>
<p><a id="X7F7FDE82780EDD7E" name="X7F7FDE82780EDD7E"></a></p>
<h5>6.6-5 AssociatorSubloop</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AssociatorSubloop</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The associator subloop of a loop <var class="Arg">Q</var>.</p>
<p>We calculate the associator subloop of <var class="Arg">Q</var> as the smallest normal subloop of <var class="Arg">Q</var> containing all elements <span class="SimpleMath">xbackslashα(x)</span>, where <span class="SimpleMath">x</span> is an element of <var class="Arg">Q</var> and <span class="SimpleMath">α</span> is a left inner mapping of <var class="Arg">Q</var>.</p>
<p><a id="X85B650D284FE39F3" name="X85B650D284FE39F3"></a></p>
<h4>6.7 <span class="Heading">Normal Subloops and Simple Loops</span></h4>
<p><a id="X838186F9836F678C" name="X838186F9836F678C"></a></p>
<h5>6.7-1 IsNormal</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsNormal</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">S</var> is a normal subloop of a loop <var class="Arg">Q</var>.</p>
<p>A subloop <span class="SimpleMath">S</span> of a loop <span class="SimpleMath">Q</span> is <em>normal</em> if it is invariant under all inner mappings of <span class="SimpleMath">Q</span>.</p>
<p><a id="X7BDEA0A98720D1BB" name="X7BDEA0A98720D1BB"></a></p>
<h5>6.7-2 NormalClosure</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NormalClosure</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The normal closure of a subset <var class="Arg">S</var> of a loop <var class="Arg">Q</var>.</p>
<p>For a subset <span class="SimpleMath">S</span> of a loop <span class="SimpleMath">Q</span>, the <em>normal closure</em> of <span class="SimpleMath">S</span> in <span class="SimpleMath">Q</span> is the smallest normal subloop of <span class="SimpleMath">Q</span> containing <span class="SimpleMath">S</span>.</p>
<p><a id="X7D8E63A7824037CC" name="X7D8E63A7824037CC"></a></p>
<h5>6.7-3 IsSimple</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSimple</code>( <var class="Arg">Q</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a simple loop.</p>
<p>A loop <span class="SimpleMath">Q</span> is <em>simple</em> if <span class="SimpleMath">{1}</span> and <span class="SimpleMath">Q</span> are the only normal subloops of <span class="SimpleMath">Q</span>.</p>
<p><a id="X87F66DB383C29A4A" name="X87F66DB383C29A4A"></a></p>
<h4>6.8 <span class="Heading">Factor Loops</span></h4>
<p><a id="X83E1953980E2DE2F" name="X83E1953980E2DE2F"></a></p>
<h5>6.8-1 FactorLoop</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FactorLoop</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: When <var class="Arg">S</var> is a normal subloop of a loop <var class="Arg">Q</var>, returns the factor loop <var class="Arg">Q</var><span class="SimpleMath">/</span><var class="Arg">S</var>.</p>
<p><a id="X870FCB497AECC730" name="X870FCB497AECC730"></a></p>
<h5>6.8-2 NaturalHomomorphismByNormalSubloop</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NaturalHomomorphismByNormalSubloop</code>( <var class="Arg">Q</var>, <var class="Arg">S</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: When <var class="Arg">S</var> is a normal subloop of a loop <var class="Arg">Q</var>, returns the natural projection from <var class="Arg">Q</var> onto <var class="Arg">Q</var><span class="SimpleMath">/</span><var class="Arg">S</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">M := MoufangLoop( 12, 1 );; S := Subloop( M, [ M.3 ] );</span>
<loop of order 3>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsNormal( M, S );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">F := FactorLoop( M, S );</span>
<loop of order 4>
<span class="GAPprompt">gap></span> <span class="GAPinput">NaturalHomomorphismByNormalSubloop( M, S );</span>
MappingByFunction( <loop of order 12>, <loop of order 4>,
function( x ) ... end )
</pre></div>
<p><a id="X821F40748401D698" name="X821F40748401D698"></a></p>
<h4>6.9 <span class="Heading">Nilpotency and Central Series</span></h4>
<p>See Section <a href="chap2.html#X869CBCE381E2C422"><span class="RefLink">2.4</span></a> for the relevant definitions.</p>
<p><a id="X78A4B93781C96AAE" name="X78A4B93781C96AAE"></a></p>
<h5>6.9-1 IsNilpotent</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsNilpotent</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a nilpotent loop.</p>
<p><a id="X7D5FC62581A99482" name="X7D5FC62581A99482"></a></p>
<h5>6.9-2 NilpotencyClassOfLoop</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NilpotencyClassOfLoop</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The nilpotency class of a loop <var class="Arg">Q</var> if <var class="Arg">Q</var> is nilpotent, <code class="code">fail</code> otherwise.</p>
<p><a id="X7E7C2D117B55F6A0" name="X7E7C2D117B55F6A0"></a></p>
<h5>6.9-3 IsStronglyNilpotent</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsStronglyNilpotent</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a strongly nilpotent loop.</p>
<p>A loop <span class="SimpleMath">Q</span> is said to be <em>strongly nilpotent</em> if its multiplication group is nilpotent.</p>
<p><a id="X7ED37AA07BEE79E0" name="X7ED37AA07BEE79E0"></a></p>
<h5>6.9-4 UpperCentralSeries</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UpperCentralSeries</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: When <var class="Arg">Q</var> is a nilpotent loop, returns the upper central series of <var class="Arg">Q</var>, else returns <code class="code">fail</code>.</p>
<p><a id="X817BDBC2812992ED" name="X817BDBC2812992ED"></a></p>
<h5>6.9-5 LowerCentralSeries</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LowerCentralSeries</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: When <var class="Arg">Q</var> is a nilpotent loop, returns the lower central series of <var class="Arg">Q</var>, else returns <code class="code">fail</code>.</p>
<p>The <em>lower central series</em> for loops is defined analogously to groups.</p>
<p><a id="X83A38A6C7EDBCA63" name="X83A38A6C7EDBCA63"></a></p>
<h4>6.10 <span class="Heading">Solvability, Derived Series and Frattini Subloop</span></h4>
<p>See Section <a href="chap2.html#X869CBCE381E2C422"><span class="RefLink">2.4</span></a> for definitions of solvability an derived subloop.</p>
<p><a id="X79B10B337A3B1C6E" name="X79B10B337A3B1C6E"></a></p>
<h5>6.10-1 IsSolvable</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSolvable</code>( <var class="Arg">Q</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="code">true</code> if <var class="Arg">Q</var> is a solvable loop.</p>
<p><a id="X7A82DC4680DAD67C" name="X7A82DC4680DAD67C"></a></p>
<h5>6.10-2 DerivedSubloop</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DerivedSubloop</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The derived subloop of a loop <var class="Arg">Q</var>.</p>
<p><a id="X7A9AA1577CEC891F" name="X7A9AA1577CEC891F"></a></p>
<h5>6.10-3 DerivedLength</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DerivedLength</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: If <var class="Arg">Q</var> is solvable, returns the derived length of <var class="Arg">Q</var>, else returns <code class="code">fail</code>.</p>
<p><a id="X85BD2C517FA7A47E" name="X85BD2C517FA7A47E"></a></p>
<h5>6.10-4 <span class="Heading">FrattiniSubloop and FrattinifactorSize</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FrattiniSubloop</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The Frattini subloop of <var class="Arg">Q</var>. The method is implemented only for strongly nilpotent loops.</p>
<p><em>Frattini subloop</em> of a loop <span class="SimpleMath">Q</span> is the intersection of maximal subloops of <span class="SimpleMath">Q</span>.</p>
<p><a id="X855286367A2D5A54" name="X855286367A2D5A54"></a></p>
<h5>6.10-5 FrattinifactorSize</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FrattinifactorSize</code>( <var class="Arg">Q</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><a id="X81F3496578EAA74E" name="X81F3496578EAA74E"></a></p>
<h4>6.11 <span class="Heading">Isomorphisms and Automorphisms</span></h4>
<p><a id="X801067F67E5292F7" name="X801067F67E5292F7"></a></p>
<h5>6.11-1 IsomorphismQuasigroups</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsomorphismQuasigroups</code>( <var class="Arg">Q</var>, <var class="Arg">L</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: An isomorphism from a quasigroup <var class="Arg">Q</var> to a quasigroup <var class="Arg">L</var> if the quasigroups are isomorphic, <code class="code">fail</code> otherwise.</p>
<p>If an isomorphism exists, it is returned as a permutation <span class="SimpleMath">f</span> of <span class="SimpleMath">1,dots,|</span><var class="Arg">Q</var><span class="SimpleMath">|</span>, where <span class="SimpleMath">i^f=j</span> means that the <span class="SimpleMath">i</span>th element of <var class="Arg">Q</var> is mapped onto the <span class="SimpleMath">j</span>th element of <var class="Arg">L</var>. Note that this convention is used even if the underlying sets of <var class="Arg">Q</var>, <var class="Arg">L</var> are not indexed by consecutive integers.</p>
<p><a id="X7D7B10D6836FCA9F" name="X7D7B10D6836FCA9F"></a></p>
<h5>6.11-2 IsomorphismLoops</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsomorphismLoops</code>( <var class="Arg">Q</var>, <var class="Arg">L</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: An isomorphism from a loop <var class="Arg">Q</var> to a loop <var class="Arg">L</var> if the loops are isomorphic, <code class="code">fail</code> otherwise, with the same convention as in <code class="code">IsomorphismQuasigroups</code>.</p>
<p><a id="X82373C5479574F22" name="X82373C5479574F22"></a></p>
<h5>6.11-3 QuasigroupsUpToIsomorphism</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ QuasigroupsUpToIsomorphism</code>( <var class="Arg">ls</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: Given a list <var class="Arg">ls</var> of quasigroups, returns a sublist of <var class=" | |